다음을 통해 공유


gluTessCallback 함수

gluTessCallback 함수는 테셀레이션 개체에 대한 콜백을 정의합니다.

구문

void WINAPI gluTessCallback(
   GLUtesselator *tess,
   GLenum        which,
   void (CALLBACK *fn)()
);

매개 변수

Tess

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이면 기존 콜백이 정의되지 않습니다.

공간 분할 개체는 이러한 콜백을 사용하여 지정하는 다각형이 삼각형으로 분할되는 방법을 설명합니다.

각 콜백에는 정의할 수 있는 다각형 데이터와 없는 두 가지 버전의 콜백이 있습니다. 특정 콜백의 두 버전을 모두 지정하면 지정한 다각형 데이터가 포함된 콜백이 사용됩니다. gluTessBeginPolygonpolygon_data 매개 변수는 gluTessBeginPolygon이 호출될 때 지정된 포인터의 복사본입니다.

유효한 콜백은 다음과 같습니다.

콜백 Description
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 설정됩니다. 이 콜백의 함수 프로토타입은 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 콜백(정의된 경우)이 호출됩니다. 삼각형 선풍기 및 삼각형 스트립은 에지 플래그를 지원하지 않으므로 에지 플래그 콜백이 제공되는 경우 시작 콜백이 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와 동일한 용도로 사용됩니다. 기본 형식의 끝을 나타내며 인수를 사용하지 않습니다. 이 콜백의 함수 프로토타입은 void (void);입니다.
GLU_TESS_END_DATA GLU_TESS_END_DATA 콜백은 추가 포인터 인수를 사용한다는 점을 제외하고 GLU_TESS_END 콜백과 동일합니다. 이 포인터는 gluTessBeginPolygon을 호출할 때 제공되는 불투명 포인터와 동일합니다. 이 콜백의 함수 프로토타입은 voidendData (void * polygon_data)입니다.
GLU_TESS_COMBINE 테셀레이션이 교차점을 감지할 때 새 꼭짓점을 만들거나 기능을 병합하려면 GLU_TESS_COMBINE 콜백을 호출합니다. 함수는 Gldouble 형식의 각 요소 3개 배열인 네 개의 인수를 사용합니다.
4개의 포인터로 구성된 배열입니다.
각각 GLfloat 형식인 네 개의 요소로 구성된 배열입니다.
포인터에 대한 포인터입니다.
이 콜백의 함수 프로토타입은 다음과 같습니다.
voidcombine(GLdoublecoords[3], void * vertex_data[4], GLfloatweight[4], void **outData);
꼭짓점은 vertex_data 저장된 최대 4개의 기존 꼭짓점의 선형 조합으로 정의됩니다. 선형 조합의 계수는 가중치로 지정됩니다. 이러한 가중치는 항상 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 콜백은 오류가 발생하면 호출됩니다. 한 인수는 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 절대값을 초과했으며 값이 고정되었음을 나타냅니다. (좌표 값은 오버플로 없이 둘을 곱할 수 있을 만큼 충분히 작아야 합니다.) 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 (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