Code Bye

opengl 的画曲线函数 gluNurbsCurve()的控制点二维数组怎么赋值?

B样条曲线数据如下:

GLUnurbsObj *theNurb;
GLfloat ctrlpoints[9][3] = {{-47.343,23.057,45},{-46.804, 23.052,45},{-45.655,23.146,45},
                                        {-44.004,23.840,45}, {-42.756,24.882,45},{-41.930,25.988,45},
                                        {-41.357,27.256,45},{-41.178, 28.209,45},{-41.149,28.720,45} };//控制点

GLfloat knots[13] = {0,0,0,0,   0.174058,   0.386051, 0.551328 ,  0.693068,   0.834781,   1,1,1,1};

然后调用函数:
           gluBeginCurve(theNurb);
           gluNurbsCurve(theNurb,13,knots,3,&ctrlpoints[0][0],4,GL_MAP1_VERTEX_3);
           gluEndCurve(theNurb);
可以正常画出曲线。

问题如下:
现在需要从一个内存缓冲区给上述曲线参数(节点矢量一维数组和控制点二维数组)动态赋值。
或者说,把已经处理好的批量B样条曲线段数据传送给gluNurbsCurve();
代码如下:

    GLfloat ** ctrlpoints;       //new 一个动态二维数组
    ctrlpoints = new float * [9];
    for (i = 0;i < 9;i++)
        ctrlpoints[i]= new float [3];

    for(i=0;i<9;i++)          //给二维数组赋值
    {
        for(j=0;j<3;j++)
        {
          ctrlpoints[i][j] = buffCtlPts[i][j] ; //把控制点数据传给变量
        }
    }

然后再调用 gluNurbsCurve(),曲线画不出来(而且确认过,控制点数据准确无误)。
但是,不用变量赋值的方法,像帖子开头那样 直接给二维数组赋值,曲线可以正常画出。

目前有大量的曲线段要在屏幕上画出,不用变量赋值是不可能的。

请问大家,怎么给这个函数 gluNurbsCurve(theNurb,13,knots,3,&ctrlpoints[0][0],4,GL_MAP1_VERTEX_3)
中的 ctrlpoints[][] 二维数组变量赋值?

60分
GLfloat ** ctrlpoints;       //new 一个动态二维数组
    ctrlpoints = new float * [9];
    for (i = 0;i < 9;i++)
        ctrlpoints[i]= new float [3];
改成
GLfloat *ctrlpoints;       //new 一个动态二维数组
    ctrlpoints = new float [9*3];
 for(i=0;i<9;i++)          //给二维数组赋值
    {
        for(j=0;j<3;j++)
        {
          ctrlpoints[i*3+j] = buffCtlPts[i][j] ; //把控制点数据传给变量
        }
    }
试试看
谢谢啊
引用 2 楼 guoyunfei1 的回复:

谢谢啊

百万军中取上将首级如探囊取物,千万行里改关键源码在弹指瞬间。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明opengl 的画曲线函数 gluNurbsCurve()的控制点二维数组怎么赋值?