0

我正在尝试使用 openGL 制作一个简单的绘图。但是,深度缓冲区似乎没有工作。

其他有类似问题的人通常会做以下两件事之一:

  1. 不包括 glEnable(GL_DEPTH_TEST)

  2. 错误的剪裁值

但是,我的代码没有这些问题。

...
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 挤压上运行它。

4

1 回答 1

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 模式。

于 2013-01-31T04:52:45.567 回答