Frame Buffer
Frame Buffer: 是一块buffer(即内存),存储了一帧的buffer数据。
从数据结构的角度来看,此处的Frame Buffer并不是一个真正意义上的buffer,其存了一些指针,分别指向Depth Buffer、Color Buffer、Stencil Buffer、Texture、RBO(Render Buffer Object)等。
Wiki中的解释:https://www.khronos.org/opengl/wiki/Framebuffer_Object
Depth Buffer
Depth Buffer:深度缓存区。
工作原理如下:
- 在图形渲染过程中,对于每个像素,渲染管线会计算出其在观察空间中的深度值。
- 当一个像素需要进行渲染时,会将其深度值与深度缓冲区中对应像素的深度值进行比较。
- 如果当前像素的深度值小于深度缓冲区中的深度值,说明当前像素位于前面,它将被认为是可见的,并将其深度值写入深度缓冲区。
- 如果当前像素的深度值大于深度缓冲区中的深度值,说明当前像素被前面的物体遮挡,它将被认为是不可见的,深度缓冲区中的深度值不做更新。
深度缓冲区的主要作用是进行深度测试(Depth Test),即通过比较像素的深度值来确定像素的可见性。它可以有效解决遮挡关系,避免对被遮挡像素进行不必要的渲染,从而提高图形渲染的效率。
Color Buffer
Color Buffer:颜色缓存区
OpenGL中的颜色缓冲区(Color Buffer)是一个用于存储渲染结果的内存区域。当我们通过OpenGL渲染场景时,渲染的结果会被存储到颜色缓冲区中。通常情况下,颜色缓冲区是一个二维数组,每个元素代表屏幕上的一个像素点,存储着该像素点的颜色信息。
在OpenGL中,颜色缓冲区可以包括一个或多个颜色缓冲区。例如,我们可以创建一个双缓冲区(Double Buffer),其中包括前缓冲区和后缓冲区,用于实现平滑的动画效果。
当我们完成一次渲染后,OpenGL会将颜色缓冲区中的像素值发送到帧缓冲区(Frame Buffer),并在屏幕上显示出来。我们也可以使用OpenGL的一些API函数对颜色缓冲区进行读写操作,例如修改像素的颜色、清空颜色缓冲区等。
Stencil Buffer
Stencil Buffer:模板缓存区
为屏幕上的每一个像素保存一个8位的无符号整数,跟模板缓冲区进行比较并决定是否保留像素称为模板测试
模板测试发生在透明度测试之后,深度测试之前
模板缓冲区默认值为0(测试得到),并且我推测模板缓冲区每帧执行完会进行一个刷新
要加模板测试,就在Shader的Pass开头写Stencil{ }结构体。如果每个Pass都用,则可以提到外面。
参考连接:
Stencil Buffer:https://www.cnblogs.com/FlyingZiming/p/12937642.html
Stencil Buffer:https://www.jianshu.com/p/f79f0da90103
Depth Buffer:https://zhuanlan.zhihu.com/p/638266570
Color Buffer: https://www.cnblogs.com/errorman/p/17222536.html
Frame Buffer: https://blog.csdn.net/alexhu2010q/article/details/101436270
OpenGL Frame Buffer: https://zhuanlan.zhihu.com/p/631073748
标签:Stencil,OpenGL,Buffer,像素,深度,缓冲区 From: https://www.cnblogs.com/ArsenalfanInECNU/p/18001468