DirectX11 模板测试
2015-10-04 12:21
239 查看
模板测试
1. 模板测试实现过程
如前所述,我们可以使用模板缓冲区来阻止像素片段渲染到后台缓冲区的某些区域。判断一个特定像素是否可以写入后台缓冲区的操作称为模板测试(stencil test),其实现过程为:if( StencilRef & StencilReadMask ⊴ Value &StencilReadMask) accept pixel else reject 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。
相关文章推荐
- POJ 2251 Dungeon Master
- hibernate 异常
- 树的最小表示
- Uncaught TypeError: Cannot read property 'call' of undefined jquery.validate.min.js:28
- [263]Ugly Number
- 六种异常处理的陋习
- Linux - SVN下载项目
- iOS讲解迷惑深入浅出之开启子线程请求网络
- 多线程和多进程的区别(小结)
- Android Material Design Dialog
- C/C++中sizeof关键字总结
- AndroidUI 侧滑菜单 DrawerLayout的使用
- AndroidUI 侧滑菜单 DrawerLayout的使用
- DirectX11 模板
- JAVA IO处理流
- 不容忽视的网络安全
- linux 下 异步IO
- MeteoInfoLab脚本示例:创建netCDF文件(合并文件)
- 项目经验
- 无题(三):键值对的操作(运用指针)