• 什么是模板缓冲(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缓冲。

  • 相关阅读:
    [置顶] 深入理解android之IPC机制与Binder框架
    cdn加速对门户网站产生的影响
    极客技术专题【007期】:jQuery初学者入门
    linux 下信号处理命令trap && linux下各种信号的意义
    利用ACE 自己实现的线程池
    漫谈开发前奏之编译器
    jar,war,ear区别及java基础杂七八
    java出现no XXX in java.library.path的解决办法及eclipse配置
    Windows下GNU之gcc体验方法
    防asp木马运行
  • 原文地址:https://www.cnblogs.com/jacktu/p/1765173.html
Copyright © 2020-2023  润新知