openGL奇怪的bug?

Xen*_*ate 1 c++ 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();
Run Code Online (Sandbox Code Playgroud)

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

但GL_POLYGON(黄色)的顶点与GL_POINTS(红色)不匹配.这是一个截图:

openGL错误

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

ltj*_*jax 5

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

尝试使用GL_TRIANGLE_FAN而不是从左下角开始:你的多边形是星形的,所以GL_TRIANGLE_FAN如果你从它的内核中的一个点(你的顶点,左下角的那个是唯一的一个)开始,你就可以用它绘制它.满足这个条件).

如果你期望更复杂的多边形,你需要将它们分解成凸面(三角形最好)来渲染它们.