Opengl Skybox深度缓冲区隐藏场景
在我添加Skybox之前,深度缓冲区工作正常,现在它隐藏了我的所有世界(场景),并且仅在hiddenDepth=False时渲染Skybox。。。 问题显然是skybox,因为我通过删除skybox进行了检查 显示功能如下Opengl Skybox深度缓冲区隐藏场景,opengl,depth-buffer,skybox,depth-testing,Opengl,Depth Buffer,Skybox,Depth Testing,在我添加Skybox之前,深度缓冲区工作正常,现在它隐藏了我的所有世界(场景),并且仅在hiddenDepth=False时渲染Skybox。。。 问题显然是skybox,因为我通过删除skybox进行了检查 显示功能如下 static void display() { if (hiddenDepth) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } else { glClear(GL_COLOR_BUFFER_BIT);
static void display()
{
if (hiddenDepth)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
else {
glClear(GL_COLOR_BUFFER_BIT);
}
glPushMatrix();
glScalef(15500, 15500, 15500);
glTranslatef(0,0.5, 0);
drawskybox();
glPopMatrix();
glScalef(40, 40, 40);
drawWorld();
}
这是我的天空盒子
glPushMatrix();
glPushAttrib(GL_ENABLE_BIT);
glEnable(GL_TEXTURE_2D);
glDisable(GL_DEPTH_TEST);
glDepthMask(GL_FALSE);
glDisable(GL_BLEND);
// Render the quad
glPopAttrib();
glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);
glEnable(GL_BLEND);
glPopMatrix();
}
隐藏深度调用(按键时为真,按键时为假)
初始图解法
static void initGraphics (void)
{
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
主要功能
int main (int argc, char * argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGB);
glutInitWindowSize(550, 550);
glutInitWindowPosition(100, 75);
glutCreateWindow("Cube");
initGraphics();
glutDisplayFunc(display);
glutReshapeFunc(resize);
glutKeyboardFunc(asciiKey);
glutSpecialFunc(specialKey);
glutIdleFunc(idleRoutine);
glutTimerFunc(timerMSecs,timer,0);
glutMainLoop();
/* Should never get here, but keeps compiler happy */
return 0;
}
修正!!!问题是我在Skybox函数中同时使用了深度测试和深度任务…它只适用于深度任务抱歉,但我在这段代码中看不到任何明显的问题。首先绘制skybox,绘制sybox时,深度测试始终处于禁用状态。感谢您的回复:)我也在想问题出在哪里:(关于在末尾绘制skybox呢?有什么建议吗?我建议您在应用程序中查找错误。一般来说,您的方法是正确的。如果不起作用,您的应用程序中就有错误。无论如何,您可以在结尾绘制skybox。深度测试必须启用,深度函数必须是
GL_LEQUAL
()你必须用z坐标为1.0绘制天空盒。矩阵必须是单位矩阵(GL\u MODELVIEW
和GL\u PROJECTION
),我会试试的,谢谢
int main (int argc, char * argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGB);
glutInitWindowSize(550, 550);
glutInitWindowPosition(100, 75);
glutCreateWindow("Cube");
initGraphics();
glutDisplayFunc(display);
glutReshapeFunc(resize);
glutKeyboardFunc(asciiKey);
glutSpecialFunc(specialKey);
glutIdleFunc(idleRoutine);
glutTimerFunc(timerMSecs,timer,0);
glutMainLoop();
/* Should never get here, but keeps compiler happy */
return 0;
}