zoukankan      html  css  js  c++  java
  • 什么是模板缓冲(Stencil Buffer)

    模板缓冲类似于深度缓冲。事实上,它使用深度缓冲的一部分(因此,深度缓冲常常被称做depth-stencil缓冲)。深度缓冲让程序员可以设置一个模板函数测试"reference(参考)"模板值-一个全局值 – 每次当这个值仍然在模板缓冲时像素才会被绘制。

    模板测试的结果决定了像素的颜色值是否要被写入到渲染目标,像素的深度值是否要被写入深度缓冲。

    例如,当参考模板值为0时将一些物体绘制到场景中,而此时模板缓冲已经清除为1,那么当绘制这些物体时模板缓冲就会为0。如果接着将参考值设置为1,而且StencilFunction设置为 CompareFunction.LessEqual,那么只有那些模板值不为0的对应区域的像素会被绘制。这是使用模板缓冲创建一个限制当前绘制区域的基本用法。

    模板缓冲还有许多更高级的用法。指定StencilOperations除了可以进行替换或抛弃操作,还可以在每次模板测试后减少或增加模板缓冲,这可以和StencilMask值组合起来保证模板测试只作用在模板缓冲的一部分区域上。

    要使用模板缓冲,DepthFormat必须保留一些字节用于模板缓冲。DepthFormat.Depth24Stencil8深度格式使用了8位用于一个模板缓冲。当你将这个格式与RenderState.StencilMask属性组合起来时,它可以提供8个不同的模板缓冲。Depth24Stencil4 深度格式使用4位用于模板缓冲,而DepthFormat.Depth15Stencil1格式只允许1位。可以将ClearOptions.StencilBuffer传递到GraphicsDevice.Clear方法单独清除模板缓冲。

    你可以使用DepthStencilBuffer类创建自己的depth-stencil缓冲。当创建一个自定义渲染目标时你需要创建自己的depth-stencil缓冲。

  • 相关阅读:
    Redis 集群方案
    Redis集群搭建
    Java并发问题--乐观锁与悲观锁以及乐观锁的一种实现方式-CAS
    为什么分布式一定要有Redis?
    如何准备Java初级和高级的技术面试
    SpringBoot自动配置原理
    高德地图-- 云图管理台
    GeoJSON格式规范说明
    webGis概念
    npm压缩js文件
  • 原文地址:https://www.cnblogs.com/jacktu/p/1765173.html
Copyright © 2011-2022 走看看