2am*_*2am 10 c++ opengl depth-buffer
我试图运行一个OpenGL代码,它没有在glClear()中清除GL_DEPTH_BUFFER_BIT,因为我无法渲染我的场景.我添加了这个位,然后渲染了场景.为什么有必要使用这个清除位?
我可能知道这个的原因,以清除之前GPU使用的深度缓冲区值,但我只是想确认一下.
Gra*_*her 19
深度缓冲区保持场景中像素的"深度".当OpenGL渲染几何体时,每个片段(像素)将与该点处的深度缓冲区值进行比较.如果该片段的az值低于缓冲区中的值,则它将成为新的最低值,从而成为要渲染的像素.如果没有,请不要渲染它 - 有更接近的东西阻挡它.这就是它的要点 - 你可以自己阅读具体细节.
现在,当场景发生变化时会发生什么?您想清除屏幕以重绘所有内容,但您还想清除深度缓冲区.为什么?因为否则所有新像素将与前一帧的深度值进行比较.这没有意义 - 他们应该与他们所在框架中的人进行比较!你的推理是正确的.