【问题标题】:Opengl Skybox Depth Buffer Hides the sceneOpengl Skybox Depth Buffer 隐藏场景
【发布时间】:2020-10-17 15:27:53
【问题描述】:

深度缓冲区工作正常,直到我添加了天空盒,现在它隐藏了我所有的世界(场景)并且只在 hiddenDepth=False 时渲染天空盒... 问题显然是天空盒,因为我通过删除天空盒来检查它......

下方显示功能

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

隐藏的深度调用(true,false on key press)

if (hiddenDepth)
  {
    // Now do z buffer
    glEnable(GL_DEPTH_TEST);
    glDepthRange(nearPlane,farPlane);
    glClearDepth(farPlane);
  }

初始化图形

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

【问题讨论】:

  • 抱歉,我在这段代码中看不到任何明显的问题。先绘制天空盒,绘制sybox时始终禁用深度测试。
  • 感谢您的回复 :) 我也在想是什么问题 :(
  • 最后画天空盒怎么样?有什么建议吗?
  • 我建议在您的应用程序中找到错误。一般来说,您的方法是正确的。如果它不起作用,则说明您的应用程序中存在错误。无论如何你可以在最后绘制天空盒深度测试必须启用,深度功能必须是GL_LEQUALglDepthFunc(GL_LEQUAL))并且你必须绘制z坐标为1.0的天空盒。矩阵必须是恒等矩阵(GL_MODELVIEWGL_PROJECTION)。
  • 我会试试的,谢谢

标签: opengl depth-buffer skybox depth-testing


【解决方案1】:

已修复!!!问题是我在 Skybox 函数中同时使用 Depth_Test 和 DepthMask ...它仅适用于 DepthMask

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多