GLUNURBSSURFACE(3G)

名前
gluNurbsSurface - 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 )

引き数

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);

関連項目
gluBeginSurface, gluBeginTrim, gluNewNurbsRenderer, gluNurbsCurve, gluPwlCurve