Ваша проблема в терминологии NURBS заключается в том, что вам нужна рациональная кривая вместо нерациональной .
Глядя на прототип gluNurbsCurve , мы имеем:
void gluNurbsCurve(GLUnurbsObj *nobj, // NURBS object
GLint nknots, // number of knots
GLfloat *knot, // knot values
GLint stride, // stride
GLfloat *ctlarray, // control points array
GLint order, // order of data
GLenum type) // data type
Одним из параметров является *knot
, ОДНАКО это не массив весов. То, как Glu обрабатывает веса узлов, немного запутано, вы можете прочитать об этом здесь .
Интересующий вас последний параметр - ctlarray и last. Последний параметр, тип, является одним из двухмерных типов вычислителя. Как правило, вы можете использовать GL_MAP2_VERTEX_3 для нерациональных или GL_MAP2_VERTEX_4 для рациональных контрольных точек, соответственно.
Подробнее см. Красная книга .