OpenGL中的轮廓非凸多边形
问题描述:
我想在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);
很显然,我得到的概述多边形加上所有的内部线路。
那我该如何删除那些内线呢?
谢谢
答
按照现在的方法绘制填充的三角形,但绘制轮廓时不会将多边形分开。
答
用黑色绘制多边形。然后再次绘制多边形,通常使用小的Z偏移量并略小。你会有一个黑色的轮廓。
编辑:实际上,您正在将多边形的轮廓指定为一组gluTessVertex调用。所以只需将这些顶点渲染为GL_LINE_STRIP即可。
非常明显。但似乎工作正常。谢谢。我认为会有一些更“先进”的做法,但有时候更简单的解决方案会更好。 – MikMik 2010-12-16 10:43:32