15

我试图运行 OpenGL 代码,它没有在 glClear() 中清除GL_DEPTH_BUFFER_BIT,因此我无法渲染我的场景。我添加了这一点,并且渲染了场景。为什么需要使用这个清除位?

我可能知道原因,清除 GPU 之前使用的深度缓冲区值,但我只是想确认一下。

4

1 回答 1

26

深度缓冲区保存场景中像素的“深度”。当 OpenGL 渲染你的几何图形时,每个片段(像素)都会与深度缓冲区在该点的值进行比较。如果该片段的 z 值低于缓冲区中的值,则它将成为新的最低值,从而成为要渲染的像素。如果没有,请不要渲染它 - 有更接近的东西阻止它。这就是它的要点——你可以自己阅读细节。

现在,当场景改变时会发生什么?您想清除屏幕以便重绘所有内容,但您还想清除深度缓冲区。为什么?因为否则所有新像素都将与前一帧的深度值进行比较。那没有意义——它们应该与它们所在的框架中的那些进行比较!你的推理是正确的。

于 2013-10-19T18:06:12.247 回答