OpenGL的工具庫GLU提供了三維處理的常用工具狀態機器(這裡之所以成為工具狀態機器是因為其操作方式和OpenGL很類似),對於多邊形的分割化我主要想介紹的是裡面的幾個重要的概念:
1.多邊形的環繞規則,對於複雜的多邊形,咱們首先要確定的是應該如何來確定環繞線的走向,這樣咱們才可以確定出我們所需要繪製的部分,那部分圖形是多邊形的內部,那部分是多邊形的外部。
2.多邊形分割化的回調,這裡主要說說GLU_TESS_COMBINE這個參數的使用。
gluTessCallback(tobj, GLU_TESS_COMBINE,
(void(__stdcall *)())combineCallback);
void CALLBACK combineCallback(GLdouble coords[3],
GLdouble *vertex_data[4],
GLfloat weight[4], GLdouble **dataOut )
{
GLdouble *vertex;
int i;
std::cout<<"combineCallback is called"<<std::endl;
vertex = (GLdouble *) malloc(6 * sizeof(GLdouble));
vertex[0] = coords[0];
vertex[1] = coords[1];
vertex[2] = coords[2];
for (i = 3; i < 7; i++)
vertex[i] = weight[0] * vertex_data[0][i]
+ weight[1] * vertex_data[1][i]
+ weight[2] * vertex_data[2][i]
+ weight[3] * vertex_data[3][i];
*dataOut = vertex;
}
coords是計算出來的交點
vertex_data是頂點附加資料(也就是顏色、法向量等)(取的是最大的資料個數,例如顏色r,g,b,a所以這裡的數組的個數為4)
weight 每個資料在整個資料中所佔的比重