OpenGL c ++ - 出现不需要的黑色三角形

时间:2014-09-26 16:49:06

标签: c++ opengl

我开始使用OpenGL开发一个简单的GUI应用程序。绘制一个简单的背景四边形会带来很多困难,而我却无法发现我做错了什么或者什么“打破了”。以下是代码的一部分,负责绘制我的背景' quad':

static void Draw(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f(0.5f, 0.5f, 0.5f);
    glBegin(GL_QUADS);
    glVertex2f(-1.0f, -1.0f);
    glVertex2f(1.0f, -1.0f);
    glVertex2f(-1.0f, 1.0f);
    glVertex2f(1.0f, 1.0f);
    glEnd();
    glutSwapBuffers();
}


int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
    glutInitWindowSize(600, 600);
    glutCreateWindow("Pro Sound");
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glutDisplayFunc(Draw);
    glutKeyboardFunc(keyPressed);
    glutKeyboardUpFunc(keyUp);

    glutMainLoop();
}

输出看起来像灰色四边形,但在它的顶部(右侧)有一个黑色三角形,中心,右上角和右下角有顶点。所以我的背景看起来像被三角形牙齿像素怪物咬伤。问题是,它最近工作正常,我甚至可以添加一些纹理,定位好等等。

2 个答案:

答案 0 :(得分:4)

看起来您正在以错误的顺序绘制四边形顶点。默认情况下,应沿着多边形的周边以逆时针方式对顶点进行排序。

所以你拥有的是:

(-1.0f, -1.0f)  Bottom-Left
( 1.0f, -1.0f)  Bottom-Right
(-1.0f,  1.0f)  Top-Left
( 1.0f,  1.0f)  Top-Right

正在创建:

enter image description here

何时需要:

(-1.0f, -1.0f)  Bottom-Left
( 1.0f, -1.0f)  Bottom-Right
( 1.0f,  1.0f)  Top-Right
(-1.0f,  1.0f)  Top-Left

创建:

enter image description here

另请参阅Face CullingPrimitive - Quads

答案 1 :(得分:3)

不要使用GL_QUADS并更改坐标,请保留坐标并使用GL_TRIANGLE_STRIP

我相当肯定GL_QUADS已被弃用,使用GL_TRIANGLE_STRIPGL_TRIANGLE_FAN似乎是一种好习惯,无论您是否正在绘制四边形。

您应该使用GL_QUADS的唯一时间是您处于即时模式并绘制一个性能无关紧要的小程序。 (这可能是其中之一;但为了加强和衡量标准,我总是使用GL_TRIANGLE_STRIPGL_TRIANGLE_FAN。)