【问题标题】:When exactly is glClear(GL_DEPTH_BUFFER_BIT) and glClear(GL_COLOR_BUFFER_BIT) necessary?什么时候需要 glClear(GL_DEPTH_BUFFER_BIT) 和 glClear(GL_COLOR_BUFFER_BIT)?
【发布时间】:2014-04-17 06:11:25
【问题描述】:

简而言之,什么时候应该清除颜色缓冲区,什么时候应该清除深度缓冲区?它总是在当前场景/帧的绘制开始处吗?是否有时您会在不清除这些帧的情况下绘制下一帧?还有其他时候你会清除这些吗?

【问题讨论】:

  • 这有点像问“我什么时候应该擦我的白板”......每当你想将深度缓冲区或颜色缓冲区重置为统一值时。如果您正在执行通常在每一帧开头的经典单通道 OpenGL 绘图,是的。
  • 这有点离题了,但是既然您在谈论清除缓冲区...如果您清除深度缓冲区和模板缓冲区,您将获得更多更好的性能同时(假设你同时拥有它们)。

标签: opengl buffer


【解决方案1】:

哎呀……虽然是个简单的问题,但解释起来有点困难^^

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

Color Buffer 顾名思义是一个缓冲区,存储计算的颜色数据。为了更好地理解,想象你在一张纸上画画。纸上的每个点都知道上面画的是哪种颜色 - 基本上就是全部了。

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

回顾一下,颜色缓冲区存储要在屏幕上绘制的图片,深度缓冲区决定将原始图元的一部分绘制在该位置的天气。 因此,为新场景清除缓冲区基本上就是将 Paper 更改为在顶部绘制。如果您想弄乱旧图片,请保留它,但它在显示器上(或在墙上^^)更好地掌握。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 2012-08-26
    • 1970-01-01
    • 2015-06-12
    相关资源
    最近更新 更多