書式
void gluNurbsSurface( GLUnurbs* nurb,
GLint sKnotCount,
GLfloat* sKnots,
GLint tKnotCount,
GLfloat* tKnots,
GLint sStride,
GLint tStride,
GLfloat* control,
GLint sOrder,
GLint tOrder,
GLenum type )
delim $$
引き数
- nurb
- NURBS オブジェクト(gluNewNurbsRenderer を使って作る)を指定する。
- sKnotCount
- パラメータ u 方向におけるノット数を指定する。
- sKnots
- sKnotCount の配列を指定する。 この配列は、パラメータ u 方向についてノット値が単調増加となるように並ぶ。
- tKnotCount
- パラメータ v 方向におけるノット数を指定する。
- tKnots
- sKnotCount の配列を指定する。 この配列は、パラメータ v 方向についてノット値が単調増加となるように並ぶ。
- sStride
- control 内のパラメータ u 方向における、 連続する制御点の間のオフセット(単精度の浮動小数点値)を指定する。
- tStride
- control 内のパラメータ v 方向における、 連続する制御点の間のオフセット(単精度の浮動小数点値)を指定する。
- control
- NURBS 曲面の制御点を含む配列を指定する。 パラメータ u および v 方向における連続する制御点の間の オフセットは、sStride と tStride で指定する。
- sOrder
- パラメータ u 方向における NURBS 曲面の階数を指定する。 階数は次数より 1 大きいので、u について 3 次の曲面は 階数 4 を持つ。
- tOrder
- パラメータ v 方向における NURBS 曲面の階数を指定する。 階数は次数より 1 大きいので、u について 3 次の曲面は 階数 4 を持つ。
- type
- 曲面の種類を指定する。 type は、正しい 2 次元の評価型(GL_MAP2_VERTEX_3 や GL_MAP2_COLOR_4 など)であれば何でもよい。
説明
NURBS (Non-Uniform Rational B-Spline, 非一様有理 B-スプライン)曲面の 形状を記述するには、NURBS 曲面の定義の内部で gluNurbsSurface を使う。 NURBS 曲面の定義の開始を示すには gluBeginSurface コマンドを 使う。 NURBS 曲面の終わりを示すには gluEndSurface コマンドを使う。 gluNurbsSurface は NURBS 曲面の定義の内部だけで使うこと。位置座標・テクスチャ座標・色座標は、 gluBeginSurface/gluEndSurface で括られた部分で それぞれ個別に gluNurbsSurface を表すことにより 曲面に対応づける。 色・位置・テクスチャデータのそれぞれについて、ひとつの gluBeginSurface/gluEndSurface の対の間に gluNurbsSurface を二回以上呼ぶことはできない。 曲面の位置を記述するには gluNurbsSurface をちょうど一回だけ 呼び出さなければならない(type は GL_MAP2_VERTEX_3 または GL_MAP2_VERTEX_4 である)。
gluBeginTrim と gluEndTrim の呼び出しの間に gluNurbsCurve コマンドと gluPwlCurve コマンドを 呼び出すことにより、NURBS 曲面をトリムすることができる。
u 方向に sKnotCount 個、 v 方向に tKnotCount 個のノットを持ち、かつ階数 sOrder および tOrder を持つ NURBS 曲面を gluNurbsSurface で記述する場合には、 (sKnotCount - sOrder) $times$ (tKnotCount - tOrder) 個の制御点が必要である。
使用例
以下のコマンドは法線を持ち、テクスチャ処理された NURBS 曲面を レンダリングする。 テクスチャ座標と法線もまた NURBS 曲面である:
gluBeginSurface(nobj);
gluNurbsSurface(nobj, ..., GL_MAP2_TEXTURE_COORD_2);
gluNurbsSurface(nobj, ..., GL_MAP2_NORMAL);
gluNurbsSurface(nobj, ..., GL_MAP2_VERTEX_4);
gluEndSurface(nobj);