关于Z(Depth 深度)和Stencil(模板)两种测试对后台缓存的影响次序

本文介绍了在图形渲染中,深度测试与模板测试的执行流程。首先进行模板测试,根据当前模板缓存值、参考值和掩码执行相应操作。若模板测试通过,则进行深度测试,若深度测试通过,则将像素写入后台缓存。深度测试只在模板测试通过或关闭时执行。这对于理解3D图形渲染中的缓存管理至关重要。
摘要由CSDN通过智能技术生成

http://www.gamedev.net/topic/451617-how-the-stencil-buffer-works/

 

The order of operations goes like this (assuming the stencil test is enabled):
1) Perform stencil test. If failed, perform StencilFail operation and discard pixel. If passed, go to step 2.
2) Perform depth test. If failed, perform StencilZFail operation and discard pixel. If passed, perform StencilPass operation and write pixel color/depth.
So to answer your questions, the stencil test is based solely on the current value in the stencil buffer, the stencil reference value, and the stencil mask. It has to be, since it's done first. The depth test is performed only if the stencil test passes or is disabled.
The DX documentation can provide more details. 

 

深度缓存和模板缓存操作顺序如下(假定模板缓存开启)

     (1)执行模板测试,如果失败,执行模板测试失败的操作并且丢弃

在OpenGL ES(GLES)中,深度缓冲区和模板缓冲区是两种不同的缓冲区,通常需要分开创建。 深度缓冲区用于存储每个像素的深度值,以便进行深度测试。它在绘制过程中记录了每个像素离相机的距离。深度缓冲区需要使用特定的格式和精度,以确保正确的深度测试结果,例如GL_DEPTH_COMPONENT和GL_DEPTH_COMPONENT16。创建深度缓冲区时,可以使用glRenderbufferStorage或glTexImage2D函数分配存储空间。 模板缓冲区用于存储每个像素的模板值,通常用于实现诸如遮罩(masking)和抠图(stenciling)等技术。它记录了每个像素的特定标识,可以用于后续的渲染操作。模板缓冲区同样需要使用特定的格式和精度,例如GL_STENCIL_INDEX和GL_STENCIL_INDEX8。创建模板缓冲区时,可以使用glRenderbufferStorage或glTexImage2D函数分配存储空间。 虽然深度缓冲区和模板缓冲区可以分别创建,但它们也可以共享同一个缓冲区。这意味着可以使用同一个缓冲区来记录像素的深度值和模板值,以减少内存占用和渲染操作的开销。在这种情况下,创建缓冲区时需要使用包括GL_DEPTH_STENCIL或GL_DEPTH24_STENCIL8在内的特殊格式。 总而言之,GLES中的深度缓冲区和模板缓冲区通常需要分开创建,但也可以共享同一个缓冲区来实现更高效的渲染。具体使用哪种方式取决于特定的应用需求和硬件支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值