在OpenGL中概述非凸多边形

时间:2010-12-16 08:47:32

标签: opengl polygon

我正在尝试在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);

显然,我得到了轮廓多边形和所有内线 那么如何删除这些内线?

由于

2 个答案:

答案 0 :(得分:0)

以黑色绘制多边形。然后通常再次绘制多边形,使用小的z偏移并略小一些。你会有一个黑色轮廓。

编辑:实际上,您将多边形的轮廓指定为一组gluTessVertex调用。所以只需将这些顶点渲染为GL_LINE_STRIP。

答案 1 :(得分:0)

像现在一样绘制填充的三角形,但绘制轮廓而不会使多边形分开。