GLU NURBS - как установить вес контрольной точки? - PullRequest
2 голосов
/ 07 января 2010

Я пишу класс NURBS, использующий расширение GLU OpenGL для рендеринга, но я только что понял, что понятия не имею, как установить веса контрольных точек. Этого нет ни в Красной книге, ни в документации GLU, и в Интернете также не упоминается об этом. Возможно ли, что реализация GLU NURBS просто не включает эту функцию? Если так, то я удивляюсь, что им не удалось назвать это NURBS, а не просто B-сплайнами.

Редактировать : Изменены "веса узлов" на "веса контрольных точек".

1 Ответ

4 голосов
/ 07 января 2010

Ваша проблема в терминологии 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 для рациональных контрольных точек, соответственно.

Подробнее см. Красная книга .

...