gluNurbsSurface(3) NURBS 曲面の形状を定義する

書式

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 方向における連続する制御点の間の オフセットは、sStridetStride で指定する。
sOrder
パラメータ u 方向における NURBS 曲面の階数を指定する。 階数は次数より 1 大きいので、u について 3 次の曲面は 階数 4 を持つ。
tOrder
パラメータ v 方向における NURBS 曲面の階数を指定する。 階数は次数より 1 大きいので、u について 3 次の曲面は 階数 4 を持つ。
type
曲面の種類を指定する。 type は、正しい 2 次元の評価型(GL_MAP2_VERTEX_3GL_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 をちょうど一回だけ 呼び出さなければならない(typeGL_MAP2_VERTEX_3 または GL_MAP2_VERTEX_4 である)。

gluBeginTrimgluEndTrim の呼び出しの間に 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);