OpenGL 2d矩形未呈现

时间:2016-12-22 00:07:43

标签: c++ opengl glfw

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

以下是代码:

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

1 个答案:

答案 0 :(得分:1)

它被剔除了。通过提供比顶部0更大的底部= 720,您将Y轴与投影相反。您的四边形在本地坐标中是逆时针方向,但在标准化坐标中它是顺时针方向。请记住,投影矩阵是全局变换矩阵的一部分!现在,如果那是默认状态,那么就是那两个绕线方向 enter image description here

GL_CCW是实际的,它被认为是“前线”。默认情况下,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?

的答案