我试图用openGL做一个简单的绘图。但是,深度缓冲区似乎不起作用。
其他有类似问题的人通常会做两件事之一:
不包括glEnable(GL_DEPTH_TEST)
剪裁值不佳
但是,我的代码没有这些问题。
...
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
gluPerspective(25.0,1.0,10.0,200.0);
// Set the camera location
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(20.0, 10.0, 50.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
// Enable depth test
glEnable(GL_DEPTH_TEST);
// Cull backfacing polygons
glCullFace(GL_BACK);
glEnable(GL_CULL_FACE)
drawCoordinateAxis();
drawBox(5.0,2.0,5.0,0.8,0.0,0.0);
glTranslated(1.0,-1.0,1.0); //The box is 5x2x5, it is shifted 1 unit down and 1 in the x and z directions
drawBox(5.0,2.0,5.0,0.0,1.0,1.0);
...
当我执行我的代码时,会绘制它。 http://imgur.com/G9y41O1
请注意,蓝色框和红色框会发生碰撞,因此红色框应该覆盖蓝色框的一部分。
函数drawCoordinateAxis()和drawBox()只是绘制了一些原语,里面没什么花哨的。
我正在Debian上运行它。
答案 0 :(得分:1)
void reshape(GLint width, GLint height)
{
g_Width = width;
g_Height = height;
glViewport(0, 0, g_Width, g_Height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(65.0, (float)g_Width / g_Height, g_nearPlane, g_farPlane);
glMatrixMode(GL_MODELVIEW);
}
首先将Matrix Mode设置为GL_PROJECTION,然后设置gluPerspective ....然后再返回MODELVIEW模式。