生成三次均匀B样条闭合曲线并合成NURBS

void makeClosedBspline(int blineSplitNum, int bezierStep, int degreeSplitNum, float* blinesPoints_coralGroup, float* texcoord_coral,float** lines)
{

	float blinesPointsGather[6000];
	float f1, f2, f3, f4;
	float deltaT = 1.0 / float(blineSplitNum);
	float T;
	for (int i = 0; i < blineSplitNum; i++)
	{
		T = float(i)*deltaT;
		f1 = (-T*T*T + 3 * T*T - 3 * T + 1) / 6.0;
		f2 = (3 * T*T*T - 6 * T*T + 4) / 6.0;
		f3 = (-3 * T*T*T + 3 * T*T + 3 * T + 1) / 6.0;
		f4 = (T*T*T) / 6.0;

		//每条贝塞尔线段上拥有的点数  贝塞尔线段上的第m个点
		for (int m = 0; m < bezierStep; m++) 
		{
			//每个闭环包含的段数 * 每个曲线段包含的点个数 * 3 * 第m个闭合圈   每个闭合圈所包含的数值个数   +3是加的3条线段
			int loopIndex = (degreeSplitNum + 3) * blineSplitNum * 3 * m;
			//贝塞尔线段上的第 m 个点的索引
			int mIndex1 = m * 3; 
			int mIndex2 = mIndex1 + 1;
			int mIndex3 = mIndex2 + 1;
			for (int j = 0; j < degreeSplitNum; j++) {
				//j * steps * 3  横截面的第j个点
				float x = f1 * lines[j][mIndex1] +
					f2 * lines[j + 1][mIndex1] +
					f3 * lines[j + 2][mIndex1] +
					f4 * lines[j + 3][mIndex1];
				float y = f1 * lines[j][mIndex2] +
					f2 * lines[j + 1][mIndex2] +
					f3 * lines[j + 2][mIndex2] +
					f4 * lines[j + 3][mIndex2];
				float z = f1 * lines[j][mIndex3] +
					f2 * lines[j + 1][mIndex3] +
					f3 * lines[j + 2][mIndex3] +
					f4 * lines[j + 3][mIndex3];
				//到第 j 个点时,当下的索引值
				int secNum = blineSplitNum * 3 * j;
				int blindex = secNum + i * 3 + loopIndex;

				blinesPointsGather[blindex] = x;
				blinesPointsGather[blindex + 1] = y;
				blinesPointsGather[blindex + 2] = z;


			}

			//横截面的最后三个点
			float x4 = f1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值