gluNurbsCallback(3) NURBS オブジェクトのコールバックを定義する

書式

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_MODEGLU_NURBS_TESSELLATOR が設定されている時)、 テセレーションの結果として得られる OpenGL のポリゴンプリミティブを 返す。 各コールバックには 2 種類のバージョンがある点に注意すること。 すなわち、ユーザデータを指すポインタを持つものと持たないものである。 あるコールバックに対して両方のバージョンが指定された場合は、 ユーザデータを指すポインタを持つ方が使われる。 ``userData'' は前回の gluNurbsCallbackData の呼び出しで 指定されたポインタのコピーである点に注意すること。

エラー用コールバック関数は、GLU_NURBS_MODE の値に関係なく 有効となる。 他の全ての種類のコールバック関数は、 GLU_NURBS_MODEGLU_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 以降 でのみ利用できる。