什么时候需要glClear(GL_DEPTH_BUFFER_BIT)和glClear(GL_COLOR_BUFFER_BIT)?

时间:2014-04-17 06:11:25

标签: opengl buffer clear

简而言之,何时应清除颜色缓冲区以及何时清除深度缓冲区?它总是在绘制当前场景/帧的开始吗?是否有时间在不清除它们的情况下绘制下一帧?还有其他时候你会清除它们吗?

1 个答案:

答案 0 :(得分:1)

Ouff ......即使这是一个简单的问题,但有点难以解释^^

在再次绘制场景之前应该清除它。是的,每次如果你想避免奇怪和几乎无法控制的效果。 当您将场景绑定到纹理()时,您不想在交换后清除两个缓冲区,但在此之后不再使用它。

Color Buffer就像名称所示的缓冲区一样,存储计算出的颜色数据。为了更好地理解,想象一下你在一张纸上画画。纸上的每个点都知道在它上面绘制了哪种颜色 - 而且基本上都是它。

但是:如果没有Depth Buffer,你的颜色缓冲区(除了一些特殊情况,比如FX效果的多个渲染通道)几乎无用。它就像第二张纸,但是灰度级。灰度的深度决定了最后绘制的像素离屏幕的距离(相对于zNear和zFar剪切平面)。 如果你指示OpenGl绘制另一个图元,它会逐像素地检查,像素将具有哪个深度值。如果它高于该像素的深度缓冲区中存储的值,它将在该位置绘制颜色缓冲区,如果该值较低则不执行任何操作。

总结一下,“颜色缓冲区”存储要在屏幕上绘制的图片,“深度缓冲区”决定在此位置绘制原始图像的一部分天气。 因此,为新场景清除缓冲区基本上是将纸张更改为顶部绘制。如果你想弄乱旧照片,那就保留它,但它更好地放在显示器上(或在墙上^^)。