共用方式為


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,則現有的回呼會變成未定義。

鑲嵌物件會使用這些回呼來描述您指定的多邊形如何分成三角形。

每個回呼各有兩個版本,一個具有您可以定義的多邊形資料,另一個沒有。 如果指定這兩個版本的特定回呼,將會使用您指定的多邊形資料回呼。 gluTessBeginPolygon的polygon_data參數是呼叫gluTessBeginPolygon時所指定的指標複本。

以下是有效的回呼:

回呼 描述
GLU_TESS_BEGIN 叫用GLU_TESS_BEGIN回呼的方式類似 glBegin ,以指出 (三角形) 基本專案的開頭。 函式會採用 GLenum類型的單一引數。 如果您將 GLU_TESS_BOUNDARY_ONLY 屬性設定為 GL_FALSE,則引數會設定為 GL_TRIANGLE_FAN、GL_TRIANGLE_STRIP 或 GL_TRIANGLES。 如果您將 GLU_TESS_BOUNDARY_ONLY 屬性設定為 GL_TRUE,則引數會設定為 GL_LINE_LOOP。 此回呼的函式原型如下所示: void開始 (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回呼 (。 由於三角形風扇和三角形帶不支援邊緣旗標,因此如果未提供邊緣旗標回呼,則不會使用 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回呼,以在鑲嵌偵測到交集或合併特徵時建立新的頂點。 函式採用四個引數:三個元素的陣列,每一個類型為 Gldouble。
四個指標的陣列。
四個元素的陣列,每一個類型都是 GLfloat。
指標的指標。
此回呼的函式原型如下:
voidcombine (GLdoublecoords[3], void * vertex_data[4], GLfloatweight[4], void **outData) ;
頂點定義為最多四個現有頂點的線性組合,儲存在vertex_data中。 線性組合的係數會依權數來指定;這些權數一律加總至 1.0。 即使部分加權為零,所有頂點指標都有效。 coords 參數會提供新頂點的位置。
配置另一個頂點、使用vertex_data和權數插補參數,並在 outData 中傳回新的頂點指標。 轉譯回呼期間會提供此控制碼。 呼叫 gluTessEndPolygon之後,請釋放記憶體。
例如,如果多邊形位於三維空間中的任意平面,而且您將色彩與每個頂點產生關聯,則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], voidoutDatavoid * **polygon_data) ;
GLU_TESS_ERROR 發生錯誤時會呼叫GLU_TESS_ERROR回呼。 一個引數的類型為 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 以擷取描述這些錯誤的字元字串。 此回呼的函式原型如下所示:
voiderror (GLenumerrno) ;
GLU 程式庫會插入遺漏的呼叫或呼叫,以從前四個錯誤復原。 GLU_TESS_COORD_TOO_LARGE表示某些頂點座標超過絕對值中預先定義的常數GLU_TESS_MAX_COORD,而且值已受到限制。 (座標值必須夠小,兩個可以乘以不溢位。) GLU_TESS_NEED_COMBINE_CALLBACK表示鑲嵌偵測到輸入資料中兩個邊緣之間的交集,而且未提供GLU_TESS_COMBINE或GLU_TESS_COMBINE_DATA回呼。 不會產生任何輸出。
GLU_TESS_ERROR_DATA GLU_TESS_ERROR_DATA回呼與GLU_TESS_ERROR回呼相同,不同之處在于它會採用額外的指標引數。 當您呼叫 gluTessBeginPolygon時,此指標與提供的不透明指標相同。 此回呼的函式原型為:voiderrorData (GLenumerrnovoid * polygon_data) ;

規格需求

需求
最低支援的用戶端
Windows 2000 專業版 [僅限傳統型應用程式]
最低支援的伺服器
Windows 2000 Server [僅限傳統型應用程式]
標頭
Glu.h
程式庫
Glu32.lib
DLL
Glu32.dll

另請參閱

glBegin

glEdgeFlag

glEnd

glVertex

gluDeleteTess

gluErrorString

gluNewTess

gluTessBeginPolygon

gluTessEndPolygon

gluTessVertex