英語で読む

次の方法で共有


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 を使用して、テセレーション オブジェクトで使用するコールバックを指定します。 指定したコールバックが既に定義されている場合は、置き換えられます。 fnNULL の場合、既存のコールバックは未定義になります。

テセレーション オブジェクトは、これらのコールバックを使用して、指定した多角形を三角形に分割する方法を記述します。

各コールバックには 2 つのバージョンがあり、1 つは定義できる多角形データを含み、1 つはなしです。 特定のコールバックの両方のバージョンが指定されている場合は、指定した多角形データを含むコールバックが使用されます。 gluTessBeginPolygonpolygon_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 (GLenumvoid * 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_datavoid * 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コールバックは次のようになります。
void myCombine( GLdouble coords[3], VERTEX *d[4],                 GLfloat w[4], VERTEX **dataOut ) {     VERTEX *newVertex = new_vertex();     newVertex->x = coords[0];     newVertex->y = coords[1];     newVertex->z = coords[2];     newVertex->r = w[0]*d[0]->r + w[1]*d[1]->r + w[2]*d[2]->r +                    w[3]*d[3]->r;     newVertex->g = w[0]*d[0]->g + w[1]*d[1]->g + w[2]*d[2]->g +                    w[3]*d[3]->g;     newVertex->b = w[0]*d[0]->b + w[1]*d[1]->b + w[2]*d[2]->b +                    w[3]*d[3]->b;     newVertex->a = w[0]*d[0]->a + w[1]*d[1]->a + w[2]*d[2]->a +                    w[3]*d[3]->a;     *dataOut = newVertex; }
テセレーションで交差が検出された場合、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 [デスクトップ アプリのみ]
ヘッダー
Glu.h
ライブラリ
Glu32.lib
[DLL]
Glu32.dll

関連項目

glBegin

glEdgeFlag

glEnd

glVertex

gluDeleteTess

gluErrorString

gluNewTess

gluTessBeginPolygon

gluTessEndPolygon

gluTessVertex