2010-12-16 147 views
0

我想在OpenGL中繪製一個輪廓的非凸多邊形,但我不成功,因此問題。
基本上,我正在做的是鑲嵌多邊形並從中創建顯示列表。然後我畫兩遍,一次填充,然後只是線條。所以這是我的代碼,到目前爲止:OpenGL中的輪廓非凸多邊形

GLUtriangulatorObj *tess = gluNewTess(); 

gluTessCallback(tess, GLU_TESS_BEGIN, (void (__stdcall*)(void))tessBeginCB); 
gluTessCallback(tess, GLU_TESS_END, (void (__stdcall*)(void))tessEndCB); 
gluTessCallback(tess, GLU_TESS_ERROR, (void (__stdcall*)(void))tessErrorCB); 
gluTessCallback(tess, GLU_TESS_VERTEX, (void (__stdcall*)())tessVertexCB); 

GLuint poly = glGenLists(1); 
glNewList(poly, GL_COMPILE); 

gluTessBeginPolygon(tess, NULL); 
gluTessBeginContour(tess); 

// calls to gluTessVertex(tess, v, v); to add vertices 

gluTessEndContour(tess); 
gluTessEndPolygon(tess); 
gluDeleteTess(tess); 

glEndList(); 


// DRAW 
glPolygonOffset(1.0, 1.0); 
glEnable(GL_POLYGON_OFFSET_FILL); 
glCallList(poly); 
glDisable(GL_POLYGON_OFFSET_FILL); 

glColor3ub(255, 0, 0); 
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); 
glCallList(poly); 
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); 

很顯然,我得到的概述多邊形加上所有的內部線路。
那我該如何刪除那些內線呢?

謝謝

回答

0

按照現在的方法繪製填充的三角形,但繪製輪廓時不會將多邊形分開。

+0

非常明顯。但似乎工作正常。謝謝。我認爲會有一些更「先進」的做法,但有時候更簡單的解決方案會更好。 – MikMik 2010-12-16 10:43:32

0

用黑色繪製多邊形。然後再次繪製多邊形,通常使用小的Z偏移量並略小。你會有一個黑色的輪廓。

編輯:實際上,您正在將多邊形的輪廓指定爲一組gluTessVertex調用。所以只需將這些頂點渲染爲GL_LINE_STRIP即可。