模板测试

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. pytorch 指定卡1_[原创][深度][PyTorch] DDP系列第一篇:入门教程
  2. 3、CSS 边框border
  3. crawler碎碎念5 豆瓣爬取操作之登录练习
  4. [Web 前端 ] 还在用浮动吗?CSS flex布局你了解多少?
  5. android webviewclient 点击事件,Android Api WebViewClient 详细解析
  6. HTTP状态码415 springboot项目
  7. logon oracle 密码 用户名_PLSQL自动登录,记住用户名密码日常使用技巧
  8. Zabbix(五)利用Zabbix部署onealert云告警平台
  9. 用幼儿园所学拆解美国总统网络安全行政令(含软件供应链安全)
  10. C++学习网站——www.cplusplus.com
  11. Java面试题超详细讲解系列之六【网络协议篇】
  12. 测试耳机的噪音测试软件,测试你的耳机音效,听这十首歌就够了
  13. 项目管理-软件:国内外知名IT项目管理工具【Worktile、PingCode、Jira、Clarizen、禅道】
  14. 微信小程序----实现YDUI的ScrollTab(滚动选项卡)
  15. CSS样式实现雷达扫描动效
  16. 警惕面试过程中的 PUA
  17. win7为什么安装不了python_【如何在win7下安装Python及配置】电脑无法安装python
  18. 【标题】视频标注软件DARKLABEL V2.4 主页中英对照图
  19. 生兔子问题(递归算法)
  20. Graph Self-Supervised Learning: A Survey

热门文章

  1. Redis存储购物车
  2. 图解Fiddler如何抓手机APP数据包【超详细】
  3. R 数据四舍五入函数教程
  4. 人脸识别门禁在安防弱电系统中的具体方案
  5. 人身险信息库大数据开闸 消费者可货比三家
  6. IDEA mybatis 用户-订单-订单详情 → 互查
  7. 刷屏器!简单!快速!稳定!可控制速度!
  8. [HTML] HTML常见的元素
  9. PPT卡片排版技巧,快来收藏
  10. GO语言数据结构之队列