Opengl 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);

在我添加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);
}

        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;
}