在我添加天框之前,深度缓冲一直工作得很好,现在它隐藏了我所有的世界(场景),并且只在hiddenDepth=False时渲染天框。问题很明显是因为我删除了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();
}这是我的Skybox
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 )
if (hiddenDepth)
{
// Now do z buffer
glEnable(GL_DEPTH_TEST);
glDepthRange(nearPlane,farPlane);
glClearDepth(farPlane);
}InitGrapics
static void initGraphics (void)
{
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}Main函数
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;
}发布于 2020-10-19 19:31:38
已修复!问题是我在Skybox中同时使用Depth_Test和DepthMask Function...it只适用于DepthMask
https://stackoverflow.com/questions/64404144
复制相似问题