我正在尝试运行OpenGL代码,但没有在glClear()中清除GL_DEPTH_BUFFER_BIT,因此我无法渲染场景。我添加了这一点,并渲染了场景。为什么需要使用此清除位?
我可能知道原因,要清除GPU先前使用的深度缓冲区值,但我只想确认一下。
深度缓冲区保存场景中像素的“深度”。当OpenGL渲染几何图形时,会将每个片段(像素)与深度缓冲区的值进行比较。如果该片段的z值小于缓冲区中的z值,则它将变为新的最低值,从而成为要渲染的像素。如果没有,请不要渲染它-有更近的东西阻止了它。这就是要点-您可以自己阅读详细信息。
现在,当场景改变时会发生什么?您想清除屏幕以便重绘所有内容,但同时您也想清除深度缓冲区。为什么?因为否则将所有新像素与前一帧的深度值进行比较。那没有道理-应该将它们与所在的框架进行比较!你的推理是正确的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句