поверхность NURBS не отображается в OpenGL - PullRequest
0 голосов
/ 11 ноября 2011
GLUnurbsObj *theNurb;

theNurb = gluNewNurbsRenderer();
gluNurbsProperty(theNurb, GLU_SAMPLING_TOLERANCE, 5.0);
gluNurbsProperty(theNurb, GLU_DISPLAY_MODE, GLU_FILL);

//ctrPoint[] is an array containing the coordinate x,y,z of a grid size of 15*15. 
// therefore, the # of control points is 15*15=225. The degree is 3 and
// the order is 4.The size of knot vector is 4+225 = 229.   

void drawNurbs(){
    float knots[229];
    for (int i=0;i<114;i++)
    {
        knots[i] = 0;
    }
    for (int i=114;i<229;i++)
    {
        knots[i] = 1;
    }

    gluBeginSurface(theNurb);
    gluNurbsSurface(theNurb, 229, knots, 229, knots, 15*3 , 3, &ctrPoint[0], 
        4, 4, GL_MAP2_VERTEX_3);
    gluEndSurface(theNurb);

}

void display(){
    drawNurbs();
}

Приведенный выше код не работает. В функции drawNurbs () что-то не так. Но я не знаю, где я не прав. Размер ctrPoint[] составляет 225 * 3.

1 Ответ

0 голосов
/ 11 ноября 2011

Я обнаружил проблемы.

(1) первый 4 элемент узла равен 0!

(2) число узлов должно быть 15 + 4 = 19 вместо 229!!

GLfloat ctrlpoints[s_count][t_count][type]; //ctrlPoints[15][15][3]
GLfloat sknot[sknot_count];                 
GLfloat tknot[tknot_count];

Тогда

sknot_count = s_count + sorder; // 19 = 15+4
tknot_count = t_count + torder; // 19=15+4
...