【问题标题】:openGL weird bug?openGL 奇怪的错误?
【发布时间】:2011-04-15 11:16:38
【问题描述】:

我有以下代码:

glNormal3f(0, 0, 1);
glColor3f(1, 0, 0);
glBegin(GL_POINTS);
    glVertex3f(-45, 75, -5);
    glVertex3f(-45, 90, -5);
    glVertex3f(-30, 90, -5);
    glVertex3f(-30, 80, -5);
    glVertex3f(-35, 80, -5);
    glVertex3f(-35, 75, -5);
    glVertex3f(-45, 75, -5);

glEnd();
glColor3f(1, 1, 0);
glBegin(GL_POLYGON);
    glVertex3f(-45, 75, -5);
    glVertex3f(-45, 90, -5);
    glVertex3f(-30, 90, -5);
    glVertex3f(-30, 80, -5);
    glVertex3f(-35, 80, -5);
    glVertex3f(-35, 75, -5);
    glVertex3f(-45, 75, -5);

glEnd();

注意每个实例中 glBegin 和 glEnd 之间的代码是相同的。

但是 GL_POLYGON(黄色)的顶点与 GL_POINTS(红色)不匹配。 截图如下:

我使用 openGL 的次数越多,我就越讨厌它。但我想这可能是我做错了什么......怎么了?

【问题讨论】:

  • 您的示例图像中还有很多其他内容...您是否仅使用上述代码尝试过?
  • 不,但最终我还是需要这些东西……我已经检查过了,我正在结束每个 glBegin……我看不出它可能是什么。不过,我应该补充一点,我是 GL 菜鸟。
  • 人们总是责怪工具,这很有趣。您没有提到它可能是编译器错误:P
  • 有趣的是,我使用 OpenGL 的次数越多,我就越喜欢它。但我理解你的沮丧,Motig。只需深呼吸并坚持下去! :-)

标签: c++ opengl


【解决方案1】:

那是因为你的多边形不是凸的——右上角是凹的。 GL_POLYGON 仅适用于凸多边形。

尝试改用GL_TRIANGLE_FAN 并从左下角开始:您的多边形是星形的,因此如果您从其内核中的一个点(您的顶点,左下角是唯一满足这个条件的)。

如果您期望更复杂的多边形,则需要将它们分解为凸位(最好是三角形)来渲染它们。

【讨论】:

    【解决方案2】:

    GL_POLYGON 的规范说:

    GL 只保证正确绘制凸多边形。如果一个 指定的多边形是非凸的,当 投影到窗户上,然后 渲染的多边形只需要位于 投影的凸包 定义其边界的顶点。

    由于您定义的是凹多边形,因此这是一种有效的行为。 尝试使用三角形条而不是多边形。它会快得多,因为多边形需要由 GL 进行三角剖分。

    顺便说一句:到目前为止我还没有使用过 GL_POLYGON。但我认为您不需要指定最后一个顶点(等于第一个顶点)。据我所知,它会自动连接。

    【讨论】:

      【解决方案3】:

      GLU Tesselator 是一种自动将凹面(和其他复杂)多边形转换为对 opengl 友好的多边形的便捷方式。看看吧:

      http://glprogramming.com/red/chapter11.html

      http://www.songho.ca/opengl/gl_tessellation.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-16
        • 2012-12-25
        • 1970-01-01
        • 2010-11-17
        相关资源
        最近更新 更多