OpenGL の GLU 拡張機能を使用してレンダリングを行う NURBS クラスを作成していますが、制御点の重みを設定する方法がわからないことに気付きました。それは Red Book にも GLU のドキュメントにもありませんし、ウェブでもあまり言及されていません。GLU の NURBS 実装にこの機能が含まれていない可能性はありますか? もしそうなら、B スプラインだけでなく NURBS と呼んでいたことに驚いています。
編集:「結び目の重み」を「制御点の重み」に変更しました。
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
パラメータの 1 つは ですが*knot
、重みの配列ではありません。glu がノットの重みを処理する方法は少し混乱しています。詳細については、こちらを参照してください。
ctlarray と最後のパラメーターは、興味のあるものです。最後のパラメーター type は、2 次元エバリュエーター タイプの 1 つです。一般的に、非有理制御点には GL_MAP2_VERTEX_3 を、有理制御点には GL_MAP2_VERTEX_4 をそれぞれ使用します。
詳細については、レッド ブックを参照してください。