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?
的答案
我正在尝试在屏幕上渲染一个矩形。当程序为运行时,只有清晰的颜色出现,没有矩形。
代码如下:
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?
的答案