OpenGL 二维矩形未被渲染

OpenGL 2d rectangle not being rendered

我正在尝试在屏幕上渲染一个矩形。当程序为运行时,只有清晰的颜色出现,没有矩形。

代码如下:

glClearColor(0.0, 0.0, 0.0, 0.0);
glViewport(0, 0, 1280, 720);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, 1280, 720, 0, -10, 10);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT || GL_DEPTH_BUFFER_BIT); //Clear the screen and depth buffer

int x = 100;
int y = 100;
while (!glfwWindowShouldClose(window)) {
    glfwPollEvents();

    glBegin(GL_QUADS);
        glVertex2f(x, y);
        glVertex2f(x + 10, y);
        glVertex2f(x + 10, y + 10);
        glVertex2f(x, y + 10);
    glEnd();

    gsm->update();
    gsm->render();

    glfwSwapBuffers(window);
}

它被淘汰了。通过提供比顶部 0 大的 bottom =720,您的投影已经反转了 Y 轴。您的四边形在您的本地坐标中是逆时针的,但在归一化坐标中它是顺时针的。请记住,投影矩阵是全局变换矩阵的一部分!现在,如果这是默认状态,那么在这两个缠绕方向之外

GL_CCW 是实际的,它被认为是 "Front"。默认情况下,OpenGL 剔除模式为 glCullFace(GL_BACK) 的三角形,四边形在内部被视为一对三角形。

要么改变顶点的顺序

glBegin(GL_QUADS);
    glVertex2f(x, y);
    glVertex2f(x, y + 10);
    glVertex2f(x + 10, y + 10);
    glVertex2f(x + 10, y);
glEnd();

或更改剔除模式以匹配坐标系的左手性或禁用剔除。

另请参阅: 1. https://www.khronos.org/opengl/wiki/Viewing_and_Transformations 2.Is OpenGL coordinate system left-handed or right-handed?

的答案