OpenGL深度缓冲区不工作
Posted
技术标签:
【中文标题】OpenGL深度缓冲区不工作【英文标题】:OpenGL depth buffer isn't working 【发布时间】:2013-01-31 04:02:47 【问题描述】:我正在尝试使用 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 Squeeze 上运行它。
【问题讨论】:
在创建 GL 上下文时是否请求深度缓冲区? 【参考方案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 模式。
【讨论】:
这段代码最好放在显示函数中。只要您需要 HUD 或其他类型的指示器,您就必须在渲染过程中调整视口和投影。重塑处理程序应保留给在调整窗口大小时发生的代价高昂的操作,例如重新处理后处理 FBO 附件。以上是关于OpenGL深度缓冲区不工作的主要内容,如果未能解决你的问题,请参考以下文章