【问题标题】:Outline non-convex polygon in OpenGL在OpenGL中勾勒出非凸多边形
【发布时间】:2010-12-16 08:47:31
【问题描述】:

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

显然,我得到了轮廓多边形加上所有内线。
那么如何去除那些内线呢?

谢谢

【问题讨论】:

    标签: opengl polygon


    【解决方案1】:

    像现在一样绘制填充的三角形,但绘制轮廓时不要将多边形分开。

    【讨论】:

    • 很明显。但似乎工作正常。谢谢。我认为会有一些更“高级”的方法来做到这一点,但有时更简单的解决方案会更好。
    【解决方案2】:

    用黑色绘制多边形。然后再次绘制多边形,通常情况下,z 偏移量较小且稍小。你会有一个黑色的轮廓。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-14
      • 1970-01-01
      • 1970-01-01
      • 2011-05-15
      • 1970-01-01
      • 2013-02-04
      • 1970-01-01
      • 2011-12-17
      相关资源
      最近更新 更多