【问题标题】:OpenGL 2d rectangle not being renderedOpenGL 2d矩形没有被渲染
【发布时间】:2016-12-22 00:07:43
【问题描述】:

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

代码如下:

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

【问题讨论】:

  • GL_COLOR_BUFFER_BIT & GL_DEPTH_BUFFER_BIT 是位标志,您需要将它们按位或 (|) 在一起,而不是逻辑或 (||)。

标签: c++ opengl glfw


【解决方案1】:

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

GL_CCW 是实际的,它被认为是“前”。默认情况下,OpenGL 以 glCullFace(GL_BACK) 模式剔除三角形,内部将 quad 视为一对三角形。

顶点的改变顺序

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?的答案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2019-04-02
    • 1970-01-01
    相关资源
    最近更新 更多