書式
void gluNurbsCallback( GLUnurbs* nurb,
GLenum which,
_GLUfuncptr CallBackFunc )
delim $$
引き数
- nurb
- NURBS オブジェクト(gluNewNurbsRenderer を使って作る)を指定する。
- which
- 定義するコールバックを指定する。 有効な値は GLU_NURBS_BEGIN, GLU_NURBS_VERTEX, GLU_NURBS_NORMAL, GLU_NURBS_COLOR, GLU_NURBS_TEXTURE_COORD, GLU_NURBS_END, GLU_NURBS_BEGIN_DATA, GLU_NURBS_VERTEX_DATA, GLU_NURBS_NORMAL_DATA, GLU_NURBS_COLOR_DATA, GLU_NURBS_TEXTURE_COORD_DATA, GLU_NURBS_END_DATA, GLU_NURBS_ERROR である。
- CallBackFunc
- コールバックが呼び出す関数を指定する。
説明
gluNurbsCallback は、NURBS オブジェクトが使うコールバックを 定義するために使われる。 指定されたコールバックが既に定義されていたら、新しいコールバックに 置き換えられる。 CallBackFunc が NULL であれば、このコールバックは呼び出されなく なり、関連付けられていたデータは(もしあれば)失われる。エラー用コールバックを除き、これらのコールバックは NURBS の テセレーション処理に使われ(GLU_NURBS_MODE に GLU_NURBS_TESSELLATOR が設定されている時)、 テセレーションの結果として得られる OpenGL のポリゴンプリミティブを 返す。 各コールバックには 2 種類のバージョンがある点に注意すること。 すなわち、ユーザデータを指すポインタを持つものと持たないものである。 あるコールバックに対して両方のバージョンが指定された場合は、 ユーザデータを指すポインタを持つ方が使われる。 ``userData'' は前回の gluNurbsCallbackData の呼び出しで 指定されたポインタのコピーである点に注意すること。
エラー用コールバック関数は、GLU_NURBS_MODE の値に関係なく 有効となる。 他の全ての種類のコールバック関数は、 GLU_NURBS_MODE に GLU_NURBS_TESSELLATOR が 設定されている場合だけ有効となる。
有効なコールバックは以下の通りである: GLU_NURBS_BEGIN 開始コールバックはプリミティブの開始を示す。 この関数は GLenum 型の引き数をひとつ取る。 引き数の値には GL_LINES, GL_LINE_STRIP, GL_TRIANGLE_FAN, GL_TRIANGLE_STRIP, GL_TRIANGLES, GL_QUAD_STRIP のいずれかを指定できる。 デフォルトでは開始コールバックは NULL である。 このコールバックの関数プロトタイプは次のようになる:
- void begin ( GLenum type );
- GLU_NURBS_BEGIN_DATA
-
GLU_NURBS_BEGIN コールバックとほぼ同じであるが、ポインタ引き数
がひとつ多い点が異なる。このポインタは前回の
gluNurbsCallbackData の呼び出しの際に指定されたポインタの
コピーである。
デフォルトのコールバック関数は NULL である。
このコールバックの関数プロトタイプは次のようになる:
- void beginData (GLenum type, void *userData);
- GLU_NURBS_VERTEX
-
頂点コールバックはプリテミィブの頂点を示す。
頂点の座標は引き数 ``vertex'' に格納される。
生成された全ての頂点の次元は 3 である。つまり、同次座標系は
アフィン座標系に変換される。
デフォルトの頂点コールバック関数は NULL である。
このコールバックの関数プロトタイプは次のようになる:
- void vertex ( GLfloat *vertex );
- GLU_NURBS_VERTEX_DATA
-
GLU_NURBS_VERTEX コールバックとほぼ同じであるが、ポインタ引き数
がひとつ多い点が異なる。このポインタは前回の
gluNurbsCallbackData の呼び出しの際に指定されたポインタの
コピーである。
デフォルトのコールバック関数は NULL である。
このコールバックの関数プロトタイプは次のようになる:
- void vertexData ( GLfloat *vertex, void *userData );
- GLU_NURBS_NORMAL
-
法線コールバックは、頂点上に法線が生成されると呼び出される。
法線の成分は引き数 ``normal'' に格納される。
NURBS 曲線の場合、このコールバック関数はユーザが法線マップ
(GL_MAP1_NORMAL)を与えた場合のみ有効となる。
NURBS 曲面の場合、法線マップが(GL_MAP2_NORMAL)が与えられると、
生成される法線は法線マップから算出される。
法線マップが与えられていなければ、曲面の法線は GL_AUTO_NORMAL
が有効な場合の評価処理に対する説明と同様の方法で算出される。
デフォルトの法線コールバックは NULL である。
このコールバックの関数プロトタイプは次のようになる:
- void normal ( GLfloat *normal );
- GLU_NURBS_NORMAL_DATA
-
GLU_NURBS_NORMAL コールバックとほぼ同じであるが、ポインタ引き数
がひとつ多い点が異なる。このポインタは前回の
gluNurbsCallbackData の呼び出しの際に指定されたポインタの
コピーである。
デフォルトのコールバック関数は NULL である。
このコールバックの関数プロトタイプは次のようになる:
- void normalData ( GLfloat *normal, void *userData );
- GLU_NURBS_COLOR
-
色コールバックは、頂点上に色が生成されたときに呼び出される。
色の要素は引き数 ``color'' に格納される。
このコールバックは、ユーザがカラーマップ((GL_MAP1_COLOR_4
または GL_MAP2_COLOR_4)を指定した場合のみ有効になる。
``color'' は 4 つの要素(R, G, B, A)を持つ。
デフォルトの色コールバック関数は NULL である。
このコールバックの関数プロトタイプは次のようになる:
- void color ( GLfloat *color );
- GLU_NURBS_COLOR_DATA
-
GLU_NURBS_COLOR コールバックとほぼ同じであるが、ポインタ引き数
がひとつ多い点が異なる。このポインタは前回の
gluNurbsCallbackData の呼び出しの際に指定されたポインタの
コピーである。
デフォルトのコールバック関数は NULL である。
このコールバックの関数プロトタイプは次のようになる:
- void colorData ( GLfloat *color, void *userData );
- GLU_NURBS_TEXTURE_COORD
-
テクスチャコールバックは頂点上にテクスチャ座標系が生成されたときに呼び
出される。
これらの座標系は引き数 ``texCoord'' に格納される。
テクスチャ座標系の数は 1, 2, 3, 4 のいずれかであり、指定された
テクスチャマップの種類によって決まる
(GL_MAP1_TEXTURE_COORD_1,
GL_MAP1_TEXTURE_COORD_2,
GL_MAP1_TEXTURE_COORD_3,
GL_MAP1_TEXTURE_COORD_4,
GL_MAP2_TEXTURE_COORD_1,
GL_MAP2_TEXTURE_COORD_2,
GL_MAP2_TEXTURE_COORD_3,
GL_MAP2_TEXTURE_COORD_4)。
テクスチャマップが指定されていない場合は、このコールバック関数は
呼び出されない。
デフォルトのテクスチャコールバック関数は NULL である。
このコールバックの関数プロトタイプは次のようになる:
- void texCoord ( GLfloat *texCoord );
GLU_NURBS_TEXTURE_COORD_DATA-
GLU_NURBS_TEXTURE_COORD コールバックとほぼ同じであるが、
ポインタ引き数がひとつ多い点が異なる。
このポインタは前回の gluNurbsCallbackData の呼び出しの際に
指定されたポインタのコピーである。
デフォルトのコールバック関数は NULL である。
このコールバックの関数プロトタイプは次のようになる:
- void texCoordData (GLfloat *texCoord, void *userData);
- GLU_NURBS_END
-
このコールバックはプリミティブの終わりで呼び出される。
デフォルトの終了コールバック関数は NULL である。
このコールバックの関数プロトタイプは次のようになる:
- void end ( void );
- GLU_NURBS_END_DATA
-
GLU_NURBS_END コールバックとほぼ同じであるが、ポインタ引き数
がひとつ多い点が異なる。このポインタは前回の
gluNurbsCallbackData の呼び出しの際に指定されたポインタの
コピーである。
デフォルトのコールバック関数は NULL である。
このコールバックの関数プロトタイプは次のようになる:
- void endData ( void *userData );
- GLU_NURBS_ERROR
- エラー用関数は、エラーが起きたときに呼び出される。 この関数は GLenum 型の引き数をひとつ取る。これは発生したエラーを示す。 NURBS 固有のエラーは 37 個あり、GLU_NURBS_ERROR1 から GLU_NURBS_ERROR37 までの名前が付いている。 エラーの内容を説明する文字列は gluErrorString を使って 得ることができる。
注意
gluNurbsCallback はバージョン 1.2 以降の GLU でしか使えない。GLU バージョン 1.2 では、which には GLU_ERROR しか指定で きない。 GLU_ERROR は GLU バージョン 1.3 では使うべきではなく、 GLU_NURBS_ERROR の方が好ましい。 CallBackFunc に指定できる他の全ての値は、GLU バージョン 1.3 以降 でのみ利用できる。