首页 > 其他分享 >3.1 模板测试与深度测试(Stencil Test & Z Test)

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

时间:2023-10-25 19:07:08浏览次数:36  
标签:Stencil 缓冲区 测试 Test 操作 255 模板 stencilBufferValue


一、模板测试(Stencil Test)

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

3.1 模板测试与深度测试(Stencil Test & Z Test)_像素点

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

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

3.1 模板测试与深度测试(Stencil Test & Z Test)_游戏_04

3.1 模板测试与深度测试(Stencil Test & Z Test)_游戏_05

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

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

3.1 模板测试与深度测试(Stencil Test & Z Test)_游戏_08

1.是什么

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

3.1 模板测试与深度测试(Stencil Test & Z Test)_像素点_09

②从书面概念上理解

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

3.1 模板测试与深度测试(Stencil Test & Z Test)_游戏_10

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

3.1 模板测试与深度测试(Stencil Test & Z Test)_游戏_11

2.语法表示

3.1 模板测试与深度测试(Stencil Test & Z Test)_游戏_12

  • 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 //深度测试失败后的处理

3.1 模板测试与深度测试(Stencil Test & Z Test)_像素点_13

ComparisionFunction

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

StencilBufferValue(Pass,Fail,ZFail)

3.模板测试流程

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

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阴影渲染
  • 等等

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

3.1 模板测试与深度测试(Stencil Test & Z Test)_像素点_17

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

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

3.1 模板测试与深度测试(Stencil Test & Z Test)_像素点_20

视频代码 Stencil-Test

StencilMask

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

3.1 模板测试与深度测试(Stencil Test & Z Test)_游戏_22

ToonLitStencilMasked

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

3.1 模板测试与深度测试(Stencil Test & Z Test)_游戏_24

3.1 模板测试与深度测试(Stencil Test & Z Test)_游戏_25

标签:Stencil,缓冲区,测试,Test,操作,255,模板,stencilBufferValue
From: https://blog.51cto.com/u_136836/8023718

相关文章

  • 一篇了解springboot3请求参数种类及接口测试
    SpringBoot3数据请求:原始数据请求://原始方式@RequestMapping("/simpleParam")publicStringsimpleParam(HttpServletRequestrequest){//获取请求参数Stringname=request.getParameter("name");Stringage=request.getParame......
  • 接口自动化--postman(7)批量运行测试用例,Postman参数化和数据驱动
    批量运行测试用例Postman参数化和数据驱动参数化:把数据用参数来代替,从而进行测试的过程。参数化是实现数据驱动测试的前置技术数据驱动:把测试数据和测试脚本分离,用数据来驱动测试用例的执行。简单的说,就是一条数据对应一条测试用例。  Postman实现数据驱动--支持的......
  • pytest报错UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc3 in position 1
    报错UnicodeDecodeError:'utf-8'codeccan'tdecodebyte0xc3inposition11:invalidcontinuationbyte代码运行时,报错 可以看出是编码的问题,根据提示,有可能是__init__.py文件的问题,通过查看源代码:尝试改变"utf-8"为“gbk"路径:C:\python3.8\Lib\site-packages\inic......
  • 软件测试|pycharm关联GitHub的详细步骤
    简介GitHub是全球最大的开源代码托管平台之一,而PyCharm是一款强大的Python集成开发环境。将两者结合使用,可以提高团队协作和代码管理的效率。本文将详细介绍如何在PyCharm中管理GitHub账号,包括如何设置GitHub账号、创建新仓库、克隆现有仓库、提交和推送代码等。环境准......
  • 软件测试|Python数据可视化神器——pyecharts教程(十)
    使用pyecharts绘制漏斗图简介漏斗图(FunnelChart)是一种用于可视化数据流程或转化率的图表类型。它通常由一系列阶段组成,每个阶段都有一个名称和一个值,表示在该阶段的转化量或数据流程的进展情况。漏斗图的名称来源于其外观,类似于实际的漏斗形状,它的顶部较宽,底部较窄,符合数据逐渐减......
  • 软件兼容性测试对软件产品起到什么作用?CMA、CNAS软件测评中心分享
    软件兼容性测试是指检查软件之间能否正确地进行交互和共享信息。随着用户对来自各种类型软件之间共享数据能力和充分利用空间同时执行多个程序能力的要求,测试软件之间能否协作变得越来越重要。软件兼容性测试工作的目标是保证软件按照用户期望的方式进行交互。1、提高软件......
  • 软件系统测试和验收测试有什么联系和区别?湖南软件测评公司推荐
    卓码软件测评作为一家专业的软件测试服务提供商,我们深知软件系统测试和验收测试在软件开发过程中的重要性。本文将从多个角度出发,详细描述这两个测试的含义、联系和区别。一、什么是软件系统测试?软件系统测试是指对整个软件系统进行全面、全局的功能和性能验证的过程......
  • Python - 单元测试
    总结 一、如何进行单元测试注意点:importunittest需要创建一个类TestSort,继承类‘unittest.TestCase’然后,在这个类TestSort中定义相应的测试函数test_sort(),进行测试。注意,测试函数要以‘test’开头而测试函数的内部,通常使用assertEqual()、assertTrue()、assertFalse......
  • 基于WPF的windows程序UI自动化测试总结
    一、框架工具说明工具说明使用pytest框架开源自动化测试框架批量或者指定用例运行Pytest框架支持此功能生成html测试报告使用allure库用例设计和结果分离PO模式用户登录封装用pytest的setup和teardown截图功能使用UIAuto......
  • 接口测试
    如何设计接口压力测试方案: 1.如何确定并发数可以通过尝试的方式。第一次压测时,可以设置自己预期接口需要达到的并发数,进行压力测试。然后通过二分法进行调整。举例:如果期望的并发数是100,第一次压测并发数设置为100,如果系统没有压力,第二次并发就尝试设置为200。如果系统......