2010-12-16 100 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即可。