openGL怪异的bug?

| 我有以下代码:
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越多,我就越讨厌它。但是我想这可能是我做错了...怎么了?     
已邀请:
那是因为您的多边形不是凸的-右上角是凹的。
GL_POLYGON
仅适用于凸多边形。 尝试改用
GL_TRIANGLE_FAN
,然后从左下角开始:您的多边形是星形的,因此,如果从其核中的某个点(顶点中的左下角是顶点)开始,则可以用一个
GL_TRIANGLE_FAN
进行绘制。仅满足此条件的一个)。 如果您期望更复杂的多边形,则需要将其分解为凸位(最好是三角形)以进行渲染。     
规范对GL_POLYGON表示:   GL保证只能正确绘制凸多边形。如果一个   指定的多边形是非凸的   投影到窗户上,然后   渲染的多边形只需要位于其中   投影的凸包   定义边界的顶点。 由于定义的是凹面多边形,因此这是有效的行为。 尝试使用三角带代替多边形。因为多边形需要由GL三角剖分,所以速度会更快。 顺便说一句:到目前为止,我还没有使用过GL_POLYGON。但是我认为您不需要指定最后一个顶点(等于第一个顶点)。据我所知,它将自动连接。     
GLU Tesselator是将凹形(和其他复杂)多边形自动转换为适合opengl的多边形的便捷方法。一探究竟: http://glprogramming.com/red/chapter11.html http://www.songho.ca/opengl/gl_tessellation.html     

要回复问题请先登录注册