3.1 模板测试与深度测试(Stencil Test Z Test)

news/2024/11/25 2:34:31/

一、模板测试(Stencil Test)

模板测试可以实现的一些效果图

1.是什么

①从渲染管线出发:模板测试是在逐片源操作阶段,透明测试之后,深度测试之前的位置。

②从书面概念上理解

说到模板测试,就要先说道模板缓冲区。模板缓冲区与颜色缓冲区和深度缓冲区类似,模板缓冲区可以为屏幕上的每个像素点保存一个无符号证书值(通常的话是个8位整数)。这个值的具体一一视程序的具体应用而定。在渲染的过程中,可以用这个值与一个预先设定的参考值相比较,根据比较的结果来决定是否更新相应的像素点的颜色值。这个比较的过程被称为模板测试。模板测试发生在透明测试之后,深度测试之前。如果模板测试通过,则相应的像素点更新,否则不更新。

③从逻辑上理解:通过一些逻辑判断,针对当前像素进行取舍,如下图。stencilBufferValue是模板缓存中的值,其它由我们定义

2.语法表示

  • Ref referenceValue //参考值
  • ReadMask readMask //读取掩码,取值范围也是0~255的整数,默认255,二进制11111111,即读取的时候不对referenceValue和stencilBufferValue产生效果,读取的还是原始值
  • WriteMask writeMask //输出掩码,当写入模板缓冲时进行掩码操作(按位与【&】),writeMask取值范围是0~255的整数,默认值也是255,即当修改stencilBufferValue值时写入的仍是原始值
  • Comp comparisionFunction //比较方式,关键字见下图
  • Pass stencilOperation //条件满足后的处理
  • Fail stencilOperation //条件不满足后的处理
  • ZFail stencilOperation //深度测试失败后的处理

ComparisionFunction

StencilBufferValue(Pass,Fail,ZFail)

3.模板测试流程

4.模板测试总结

  • 使用模板缓冲区最重要的两个值:当前模板缓冲之(stencilBufferValue)和模板参考值(referenceValue)
  • 模板测试主要就是对这两个值使用特定的比较操作:Never,Always,Less,LEqual,Greater,Equal等等
  • 模板测试之后要对模板缓冲区的值(stencilBufferValue)进行更新操作,更新操作包括:Keep,Zero,Replace,IncrSat,DecrSat,Invert等等
  • 模板测试之后可以根据结果对模板缓冲区做不同的更新操作,比如模板测试成功操作Pass,模板测试失败操作Fail,深度测试失败操作ZFail,还有针对正面和背面精确更新操作PassBack,PassFront,FailBack等等

5.模板测试扩展

  • 描边
  • 多边形填充
  • 反射区域控制
  • shadow volume阴影渲染
  • 等等

视频代码 Stencil-Test

StencilMask

ToonLitStencilMasked


http://www.ppmy.cn/news/1155402.html

相关文章

游游的字母串 (环形数组两点之间的位置)

题目链接:登录—专业IT笔试面试备考平台_牛客网 题目: 样例: 输入 yab 输出 3 思路: 暴力枚举,全部变成对应的26个字母字符需要的操作步数,取最少的一个操作步数, 这里的操作步数&#xff0…

【Vue面试题二十三】、你了解vue的diff算法吗?说说看

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:你了解vue的diff算法吗&…

SQL RDBMS 概念

SQL RDBMS 概念 RDBMS是关系数据库管理系统(Relational Database Management System)的缩写。 RDBMS是SQL的基础,也是所有现代数据库系统(如MS SQL Server、IBMDB2、Oracle、MySQL和MicrosoftAccess)的基础。 关系数据库管理系统(Relational Database Management Sy…

01_51单片机软件安装和使用

step1:keil软件安装 安装keil5:安装keil5 新用户进入官网下载需要先注册 官网:官网 嵌入式51开发资源百度网盘:江协科技 网盘地址:网盘地址 提取码:gdzf 桌面上出现该图标表示安装完成 双击图标打开对软件进行破…

【Ubuntu】Ubuntu18.04终端卡顿问题

博主您好,我也遇到了类似的问题,但我找到了问题的原因: 在gnome-terminal中,按tab补全是默认开启了“咚咚咚”音效的,在gnome-terminal里把音效关掉就好了,主要是因为按tab时,NVIDIA的视频信号和…

【C++初阶(二)缺省参数与函数重载】

本专栏内容为:C学习专栏,分为初阶和进阶两部分。 通过本专栏的深入学习,你可以了解并掌握C。 💓博主csdn个人主页:小小unicorn ⏩专栏分类:C 🚚代码仓库:小小unicorn的代码仓库&…

LabVIEW生产者消费者架构

LabVIEW生产者消费者架构 生产者/消费者模式可以轻松地同时处理多个进程,同时还能以不同速率迭代。 缓冲通信 当多个进程以不同速度运行时,就适合采用进程间缓冲通信。有了足够大的缓冲区后,生产者循环可以以快于消费者循环的速度运行&…

04-spring配置文件加载过程

文章目录 1.问题:BeanFactory是如何解析xml文件和BeanDefinition是如何注册到BeanFactory?2 入口代码3. XmlBeanDefinitionReader3.1 类图3.2 关键变量4. ResourceEntityResolver4.1 关键代码5. BeanDefinitionDocumentReader6. BeanDefinition注册到BeanFactory1.问题:Bean…