2011-04-15 74 views
1

我有以下代码:openGL怪异的错误?

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 bug

我使用OpenGL的越多,我恨它。但我想这可能是我做错了什么......有什么?

+0

你的榜样形象有很多其他的东西在里面太...你与上面的代码只尝试? – Rookie 2011-04-15 11:23:50

+0

不,但最终我还是需要那些东西......我已经检查过,并且我正在结束每一个glBegin ...我不知道它会是什么。不过,我应该补充一点,我是GL的noob。 – Xenoprimate 2011-04-15 11:25:12

+0

有趣的是,人们总是责怪这个工具。你没有提到它可能是一个编译器错误:P – 2011-04-15 14:17:36

回答

5

这是因为您的多边形不是凸面 - 右上角是凹面。 GL_POLYGON只适用于凸多边形。

尝试使用GL_TRIANGLE_FAN代替,并从左下角开始:您的多边形是星形的,所以如果从内核中的一个点开始绘制它(如果您的顶点的顶点,只有一个是满足这个条件的)。

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

3

规范说的GL_POLYGON:

只有凸多边形保证是由GL正确绘制。如果 指定的多边形是投影到窗口上的 时是非凸的,那么渲染的多边形只需要位于其边界的投影的凸包的 内。

既然您定义了一个凹多边形,这是一个有效的行为。 尝试使用三角形条而不是多边形。这会更快,因为多边形需要由GL进行三角剖分。

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