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

Posted

技术标签:

【中文标题】OpenGL c++ - 出现不需要的黑色三角形【英文标题】:OpenGL c++ - unwanted black triangle appears 【发布时间】:2014-09-26 16:49:05 【问题描述】:

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

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();

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

【问题讨论】:

【参考方案1】:

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

所以你拥有的是:

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

正在创造:

当你想要时:

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

创建:

另请参阅Face Culling 和 Primitive - Quads

【讨论】:

如此简单,但很有启发性。非常感谢我的救命恩人。致敬! 他使用的是GL_QUADS,所以它会绘制一个四边形,而不是两个三角形。 所有现代 GPU 只消耗三角形,因此驱动程序将其三角剖分为两个三角形。如果 GPU 在四边形上工作,那么他就不会看到他看到的工件。 没错。您在 OpenGL 中看到的大部分内容现在都转换为三角形和着色——因为它是快速路径。如此之多,即使使用转换,它也更快。【参考方案2】:

不要使用GL_QUADS 并更改您的坐标,而是保留您的坐标并使用GL_TRIANGLE_STRIP

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

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

【讨论】:

是的,Quads 在 3.0 中已弃用,并在 3.1 中完全删除。这是一个很好的观点。 会马上进入。感谢您的宝贵时间,感谢您,先生。

以上是关于OpenGL c++ - 出现不需要的黑色三角形的主要内容,如果未能解决你的问题,请参考以下文章

无法获得简单的 2D 着色器以在 C++ openGL 中绘制红色三角形(无编译器错误)

OpenGL/Glew C++ 纹理不适用

OpenGL不绘制三角形VBO

OpenGL 计算三角形法线 C++

c++ opengl 相机移动

三角形不出现在opengl中? [关闭]