gluTessCallback 関数
gluTessCallback 関数は、テセレーション オブジェクトのコールバックを定義します。
void WINAPI gluTessCallback(
GLUtesselator *tess,
GLenum which,
void (CALLBACK *fn)()
);
-
テス
-
テセレーション オブジェクト ( gluNewTess で作成)。
-
どっち
-
定義されているコールバック。 有効な値は、GLU_TESS_BEGIN、GLU_TESS_BEGIN_DATA、GLU_TESS_EDGE_FLAG、GLU_TESS_EDGE_FLAG_DATA、GLU_TESS_VERTEX、GLU_TESS_VERTEX_DATA、GLU_TESS_END、GLU_TESS_END_DATA、GLU_TESS_COMBINE、GLU_TESS_COMBINE_DATA、GLU_TESS_ERROR、GLU_TESS_ERROR_DATAです。
これらのコールバックの詳細については、次の「備考」セクションを参照してください。
-
fn
-
呼び出される関数。
この関数は値を返しません。
gluTessCallback を使用して、テセレーション オブジェクトで使用するコールバックを指定します。 指定したコールバックが既に定義されている場合は、置き換えられます。 fn が NULL の場合、既存のコールバックは未定義になります。
テセレーション オブジェクトは、これらのコールバックを使用して、指定した多角形を三角形に分割する方法を記述します。
各コールバックには 2 つのバージョンがあり、1 つは定義できる多角形データを含み、1 つはなしです。 特定のコールバックの両方のバージョンが指定されている場合は、指定した多角形データを含むコールバックが使用されます。 gluTessBeginPolygon のpolygon_data パラメーターは、gluTessBeginPolygon が呼び出されたときに指定されたポインターのコピーです。
有効なコールバックを次に示します。
コールバック | 説明 |
---|---|
GLU_TESS_BEGIN | GLU_TESS_BEGIN コールバックは glBegin のように呼び出され、(三角形) プリミティブの開始を示します。 この関数は、 GLenum 型の 1 つの引数を受け取ります。 GLU_TESS_BOUNDARY_ONLY プロパティを GL_FALSE に設定すると、引数は GL_TRIANGLE_FAN、GL_TRIANGLE_STRIP、または GL_TRIANGLES のいずれかに設定されます。 GLU_TESS_BOUNDARY_ONLY プロパティを GL_TRUE に設定すると、引数は GL_LINE_LOOP に設定されます。 このコールバックの関数プロトタイプは、 voidbegin (GLenum型) です。 |
GLU_TESS_BEGIN_DATA | GLU_TESS_BEGIN_DATAは、追加のポインター引数を受け取る点を除き、GLU_TESS_BEGINコールバックと同じです。 このポインターは、 gluTessBeginPolygon を呼び出すときに提供される不透明なポインターと同じです。 このコールバックの関数プロトタイプは、 voidbeginData (GLenum型、 void * polygon_data) です。 |
GLU_TESS_EDGE_FLAG | GLU_TESS_EDGE_FLAGコールバックは glEdgeFlag に似ています。 関数は、ポリゴン境界上のエッジを示す単一のブール型フラグを受け取ります。 フラグがGL_TRUEされている場合、その後に続く各頂点は、ポリゴン境界上にあるエッジを開始します。つまり、内部領域と外部領域を分離するエッジです。 フラグがGL_FALSEされている場合、その後に続く各頂点は、ポリゴン内部にあるエッジを開始します。 GLU_TESS_EDGE_FLAG コールバック (定義されている場合) は、最初の頂点コールバックが作成される前に呼び出されます。 三角形のファンと三角形のストリップはエッジ フラグをサポートしていないため、エッジ フラグ コールバックが指定されている場合、begin コールバックは GL_TRIANGLE_FAN または GL_TRIANGLE_STRIPで呼び出されません。 代わりに、ファンとストリップは独立した三角形に変換されます。 このコールバックの関数プロトタイプは次のとおりです。 voidedgeFlag (GLbooleanフラグ); |
GLU_TESS_EDGE_FLAG_DATA | GLU_TESS_EDGE_FLAG_DATA コールバックは、追加のポインター引数を受け取る点を除き、GLU_TESS_EDGE_FLAG コールバックと同じです。 このポインターは、 gluTessBeginPolygon を呼び出すときに提供される不透明なポインターと同じです。 このコールバックの関数プロトタイプは、 voidedgeFlagData (GLbooleanフラグ、 void * polygon_data) です。 |
GLU_TESS_VERTEX | GLU_TESS_VERTEX コールバックは、開始コールバックと終了コールバックの間で呼び出されます。 glVertex に似ていて、テセレーション プロセスによって作成される三角形の頂点を定義します。 関数は、ポインターを唯一の引数として受け取ります。 このポインターは、頂点を定義したときに指定した不透明なポインターと同じです ( gluTessVertex を参照)。 このコールバックの関数プロトタイプは、 void頂点 (void * vertex_data) です。 |
GLU_TESS_VERTEX_DATA | GLU_TESS_VERTEX_DATAは、追加のポインター引数を受け取る点を除き、GLU_TESS_VERTEXコールバックと同じです。 このポインターは、 gluTessBeginPolygon を呼び出すときに提供される不透明なポインターと同じです。 このコールバックの関数プロトタイプは、 voidvertexData (void * vertex_data、 void * polygon_data) です。 |
GLU_TESS_END | GLU_TESS_END コールバックは 、glEnd と同じ目的を果たします。 これはプリミティブの終わりを示し、引数を受け取らなくなります。 このコールバックの関数プロトタイプは、 voidend (void) です。 |
GLU_TESS_END_DATA | GLU_TESS_END_DATA コールバックは、追加のポインター引数を受け取る点を除き、GLU_TESS_END コールバックと同じです。 このポインターは、 gluTessBeginPolygon を呼び出すときに提供される不透明なポインターと同じです。 このコールバックの関数プロトタイプは、 voidendData (void * polygon_data) です。 |
GLU_TESS_COMBINE | GLU_TESS_COMBINE コールバックを呼び出して、テセレーションで交差が検出されたときに新しい頂点を作成するか、フィーチャをマージします。 この関数は、4 つの引数を受け取ります。3 つの要素の配列で、それぞれ Gldouble 型です。 4 つのポインターの配列。 各型 GLfloat の 4 つの要素の配列。 ポインターへのポインター。 このコールバックの関数プロトタイプは次のとおりです。 voidcombine(GLdoublecoords[3], void * vertex_data[4], GLfloatweight[4], void **outData); 頂点は、最大 4 つの既存の頂点の線形組み合わせとして定義され、vertex_dataに格納されます。 線形の組み合わせの係数は重みによって与えられます。これらの重みは常に 1.0 に合計されます。 一部の重みが 0 の場合でも、すべての頂点ポインターが有効です。 coords パラメーターは、新しい頂点の位置を指定します。 別の頂点を割り当て、vertex_dataと重みを使用してパラメーターを補間し、outData で新しい頂点ポインターを返します。 このハンドルは、レンダリング コールバック中に提供されます。 gluTessEndPolygon を呼び出した後、メモリを解放します。 たとえば、多角形が 3 次元空間内の任意の平面にあり、各頂点に色を関連付ける場合、GLU_TESS_COMBINEコールバックは次のようになります。 テセレーションで交差が検出された場合、GLU_TESS_COMBINEまたはGLU_TESS_COMBINE_DATAコールバック (下記参照) を定義し、NULL 以外のポインターを dataOut に書き込む必要があります。 それ以外の場合は、GLU_TESS_NEED_COMBINE_CALLBACK エラーが発生し、出力は生成されません。 (テセレーションとレンダリング中に発生する可能性がある唯一のエラーです)。 |
GLU_TESS_COMBINE_DATA | GLU_TESS_COMBINE_DATA コールバックは、追加のポインター引数を受け取る点を除き、GLU_TESS_COMBINE コールバックと同じです。 このポインターは、 gluTessBeginPolygon を呼び出すときに提供される不透明なポインターと同じです。 このコールバックの関数プロトタイプは次のとおりです 。voidcombineData (GLdoublecoords[3], void *vertex_data[4], GLfloatweight[4], void **outData, void * polygon_data); |
GLU_TESS_ERROR | エラーが発生すると、GLU_TESS_ERRORコールバックが呼び出されます。 1 つの引数は GLenum 型です。これは、発生した特定のエラーを示し、次のいずれかに設定されています: GLU_TESS_MISSING_BEGIN_POLYGON GLU_TESS_MISSING_END_POLYGON GLU_TESS_MISSING_BEGIN_CONTOUR GLU_TESS_MISSING_END_CONTOUR GLU_TESS_COORD_TOO_LARGE GLU_TESS_NEED_COMBINE_CALLBACK gluErrorString を呼び出して、これらのエラーを説明する文字列を取得します。 このコールバックの関数プロトタイプは次のとおりです。 voidエラー (GLenumerrno); GLU ライブラリは、見つからない呼び出しまたは呼び出しを挿入することで、最初の 4 つのエラーから回復します。 GLU_TESS_COORD_TOO_LARGEは、一部の頂点座標が絶対値で定義済みの定数GLU_TESS_MAX_COORDを超え、値がクランプされたことを示します。 (座標値は、オーバーフローなしで 2 つを乗算できる十分な小さい値である必要があります)。GLU_TESS_NEED_COMBINE_CALLBACKは、テセレーションによって入力データ内の 2 つのエッジ間の交差が検出され、GLU_TESS_COMBINEまたはGLU_TESS_COMBINE_DATAコールバックが指定されなかったことを示します。 出力は生成されません。 |
GLU_TESS_ERROR_DATA | GLU_TESS_ERROR_DATA コールバックは、追加のポインター引数を受け取る点を除き、GLU_TESS_ERROR コールバックと同じです。 このポインターは、 gluTessBeginPolygon を呼び出すときに提供される不透明なポインターと同じです。 このコールバックの関数プロトタイプは次のとおりです 。voiderrorData (GLenumerrno, void * polygon_data); |
要件 | 値 |
---|---|
サポートされている最小のクライアント |
Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされている最小のサーバー |
Windows 2000 Server [デスクトップ アプリのみ] |
ヘッダー |
|
ライブラリ |
|
[DLL] |
|