模板测试

1. 模板测试实现过程

如前所述,我们可以使用模板缓冲区来阻止像素片段渲染到后台缓冲区的某些区域。判断一个特定像素是否可以写入后台缓冲区的操作称为模板测试(stencil test),其实现过程为:

if( StencilRef & StencilReadMask  ⊴  Value &StencilReadMask)accept pixel
elsereject pixel

模板测试是在像素光栅化时(即输出合并阶段)进行的。在启用模板功能之后,每个光栅化像素都要与下面的两个操作数进行模板测试:

1.左操作数(LHS)由应用程序指定的一个模板参考值(StencilRef)和一个模板掩码(StencilReadMask)进行按位与运算得到。

2.右操作数(RHS)由当前像素在模板缓冲区中的对应值(Value)和一个模板掩码(StencilReadMask)进行按位与运算得到。

注意,LHS和RHS中的StencilReadMask是相同的。

然后,通过应用程序指定的比较函数⊴对LHS和RHS进行比较,返回true或false。当测试结果为true时,说明该像素可以写入后台缓冲区(假设深度测试也通过)。当测试结果为false时,说明应该丢弃该像素,不把它写入后台缓冲区。当然,如果一个像素未能通过模板测试,那么它的深度值也不会被写入深度缓冲区。

运算符⊴可以是D3D11_COMPARISON_FUNC枚举类型定义的任何一个函数:

typedef enum D3D11_COMPARISON_FUNC
{D3D11_COMPARISON_NEVER = 1,D3D11_COMPARISON_LESS = 2,D3D11_COMPARISON_EQUAL = 3,D3D11_COMPARISON_LESS_EQUAL = 4,D3D11_COMPARISON_GREATER = 5,D3D11_COMPARISON_NOT_EQUAL = 6,D3D11_COMPARISON_GREATER_EQUAL = 7,D3D11_COMPARISON_ALWAYS = 8,
} D3D11_COMPARISON_FUNC;

1.D3D11_COMPARISON_NEVER:始终返回false。

2.D3D11_COMPARISON_LESS:用<运算符代替⊴。

3.D3D11_COMPARISON_EQUAL:用==运算符代替⊴。

4.D3D11_COMPARISON_LESS_EQUAL:用≤运算符代替⊴。

5.D3D11_COMPARISON_GREATER:用>运算符代替⊴。

6.D3D11_COMPARISON_NOT_EQUAL:用!=运算符代替⊴。

7.D3D11_COMPARISON_GREATER_EQUAL:用≥运算符代替⊴。

8.D3D11_COMPARISON_ALWAYS:始终返回true。

DirectX11 模板测试相关推荐

  1. opengl模板测试实例

    在opengl中, 可以开启模板测试功能,来限定某一部分是可画的,某一部分是不可画的.这可通过设置模板模式来控制哪部分是可画的, 有点类似在墙上喷字. 虽说剪刀测试也可以限定蓝屏的某一部分可画,但不适 ...

  2. Opengl-深度测试模板测试

    ###深度测试 深度缓冲:用来存储深度信息的,可以这么理解,在你屏幕上最后留下的裁剪区域你看到的东西其实是有深度的,就像现实世界里一样,有远近这样.然后这个远近的程度信息就存储在了深度缓冲里 深度测试 ...

  3. OpenGL stencil test模板测试的实例

    OpenGL stencil test模板测试 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include <glad/glad.h> #incl ...

  4. OpenGL模板测试通俗理解

    看书籍或资料往往还是云里雾里的,这里写一下自己的理解.希望对需要的人有帮助. 简而言之: 模板缓冲区和帧缓冲区一样大 模板缓冲区初始状态是什么? 在glClearBuffer的时候清空,所以初始状态是 ...

  5. (zt)OpenGL中的Alpha测试,深度测试,模板测试,裁减测试

    转自http://www.cppblog.com/flashboy/archive/2009/09/01/94974.html 大家好.现在因为参加工作的关系,又是长时间没有更新.趁着国庆的空闲,总算 ...

  6. UnityShader29:模板测试

    一.什么是模板测试 OpenGL基础30:模板测试 Unity官方文档:https://docs.unity3d.com/Manual/SL-Stencil.html 一个很经典的模板测试例子就是 U ...

  7. OpenGL基础30:模板测试

    前置:OpenGL基础29:深度测试 一.模板测试 前面一章提到过:深度缓冲测试在片段着色器运行.以及模板测试(Stencil Testing)之后,那么这下知道模板测试是在什么时候了吧,模板测试和深 ...

  8. 【Unity3D】基于模板测试和顶点膨胀的描边方法

    1 前言 选中物体描边特效 中介绍了基于模板纹理模糊膨胀的描边方法,该方法实现了软描边,效果较好,但是为了得到模糊纹理,对屏幕像素进行了多次渲染,效率欠佳.本文将介绍另一种描边方法:基于模板测试和顶点 ...

  9. Unity中使用模板测试模拟Mask组件效果

    本文分享Unity中使用模板测试模拟Mask组件效果 在上一篇文章中, 我们分享了模板测试的基础知识, 在今天的分享中, 我们会尝试使用模板测试来模拟遮罩效果. Unity中使用模板测试模拟Mask组 ...

最新文章

  1. 一文看懂95%置信区间
  2. 魔兽世界怀旧服最新服务器开发时间,怀旧服开70最新消息汇总 魔兽怀旧服TBC开放时间几个阶段?...
  3. python练习2 购物车程序
  4. 8.2 高斯分布模型-机器学习笔记-斯坦福吴恩达教授
  5. 互联网金融售前心得数据脱敏分析 | PMCAFF微分享
  6. (一)操作系统概论复习要点笔记
  7. 只用一次+ 求三个整数之和
  8. Neo4j: 迁移MySQL的数据到Neo4j
  9. MyBatis 实际使用案例-核心对象的生命周期
  10. java分布式对象(RMI+部署使用RMI的程序)
  11. python import from class_彻底搞懂Python 中的 import 与 from import
  12. 概率论与数理统计大纲
  13. C语言回溯算法求幂集,回溯求幂集算法
  14. 学生端极域课堂万能密码
  15. STM32单片机基础知识总结(二)
  16. C 语言 —— 命名规则
  17. DirectX是什么
  18. 奇数分频电路—5分频(verilog实现)
  19. An unexpected error prevented the server from fulfill your request.(HTTP500)
  20. 【计算机网络】python——socket编程(TCP/UDP)

热门文章

  1. 工业互联网+5G 发展策略研究
  2. 计算机硬盘 打开很慢,电脑硬盘运行速度慢如何解决 电脑硬盘运行速度慢解决方法【介绍】...
  3. 支付二维码整合 - 三码合一支持支付宝、QQ、微信
  4. 关于MVC控制器导出Excel时MemoryStream流已关闭的问题
  5. 个人/团队/企业/组织申请计算机软件著作权的流程
  6. 基于神经网络的文字识别,神经网络如何识别图像
  7. (转)实用Word使用技巧大全
  8. Python爬虫实战,简单的爬虫案例,以及爬取百度贴吧网页原码和360翻译
  9. Google入股百度!
  10. Android 画中画(图片)