4.5the Culing Pass
在 WM4 中, culling pass 和 drawing pass 是分开的,负责该流程的三个核心类是 VisibleObject , VisibleSet , Culler 。下面一一详述。
一, VisibleObject
该类实际上是一个结构类,有两个 public 成员: Spatial* Object 和 Effect* GlobalEffect
前者用于存储单个的潜在可见的物体,后者用于存储与 Node 节点相关联的 global effect 。(在绘制中大有作为)。
二, VisibleSet 。
该类用于存储潜在可见物体的集合,并建立一个索引表用于绘制,详见 p197.
Public :
Void Insert ( Spatial* pkObject , Effect* pkGlobalEffect );
// 如果要插入的是 Geometry ,那么 Effect 指针设为空,如果要插入的是 Node ,并且关联了 global effect ,那么 effect 指针指向那个 Global Effect 。
带有 global effect 的 Node 类,是一种特殊信号,标记了 global effect 的起始点,而一旦该 Node 子节点的遍历结束,另一个符号被加入 VisibleSet ,用于标记 global effect 的终点。
三, Culler
该类用于( 1 )管理对场景图的剔除( 2 )管理对潜在 visible set 的存储。(如 insert )
Culler 类中维护了一个 VisibleSet ,用于存储剔除后得到的物体。
首先将指向整个场景的 Spatial 指针传给 Culler ,然后 Culler 类调用 Spatial 接口并将该 Culler 类传给接口,遍历过程由 Spatial 实现,但其中会用到 Culler 中的剔除函数。
Spatial 与 Culler 互相依赖,紧密结合。
Spatia :: OnGetVisibleSet() 调用 GetVisibleSet ,如果调用者是 Node , GetVisibleSet 中会继续调用 OnGetVisibleSet (对每一个节点),形成递归。
关于 PlaneState ,适用于标识该平面是否被激活,若检测到一个节点完全位于平面外,则节点下的每一个子节点均不需要检测,因此将 PlaneState 设为未激活,只需继承父节点的检测结果即可。
总结 :递归的结构基本分为两种( 1 )自身调用自身。
( 2 ) A 调用 B , B 调用 A , …….. 直到 A 返回。(有的 A 并不调用 B ,直接返回,通过多态性实现)。
递归函数体 分为三大块:( 1 )递归前的准备
( 2 )递归(循环调用)
( 3 )递归后准备。
( 1 )( 3 )可能没有,但( 2 )一定有,( 1 )和( 3 )往往相互呼应。
Culler 的核心函数是 IsVisible() ,待研究!!!
另外,在按空间关系结束 cull 后,可以再进行 RenderState 排序,然后 draw 。
另外,也可在 Cull 的过程中进行某种规则的排序(重载 GetVisible 即可)。
例如,以后要介绍的 Portal System 。
4.5the Culing Pass相关推荐
- pass基础架构分析
pass基础架构分析 Relay 和 TVM IR,包含一系列优化passes,可提高模型的性能指标,如平均推理,内存占用,或特定设备的功耗.有一套标准优化,及特定机器学习的优化,包括常量折叠,死代码 ...
- 将编译器pass添加到Relay
将编译器pass添加到Relay 编译器pass是扩展Relay功能集和对Relay程序执行优化的主要接口.通过编写编译器pass,可以修改AST或收集有关AST的信息,具体取决于目标.事实上,Rel ...
- AI中pass架构设计优化
AI中pass架构设计优化 Relay 和 TVM IR,包含一系列优化passes,可提高模型的性能指标,例如平均推理,内存占用,或特定设备的功耗.有一套标准优化,及特定机器学习的优化,包括常量折叠 ...
- TVM,Relay,Pass
TVM,Relay,Pass Relay介绍 主要结合TVM的文档(https://tvm.apache.org/docs/dev/relay_intro.html),介绍一下NNVM的第二代Rela ...
- Pass算子python 函数
Pass算子python 函数 函数 • 函数是代码的一种组织形式 • 函数应该能完成一项特定的工作,而且一般一个函数只完成一项工作 • 有些语言,分函数和过程两个概念,通俗解释是,有返回结果的是函数 ...
- AI基础架构Pass Infrastructure
AI基础架构Pass Infrastructure • Operation Pass o OperationPass : Op-Specific o OperationPass : Op-Agnost ...
- 如何使用TVM Pass Relay
如何使用TVM Pass Relay 随着Relay / tir中优化遍数的增加,执行并手动维护其依赖关系变得很棘手.引入了一个基础结构来管理优化过程,将其应用于TVM堆栈中IR的不同层. Relay ...
- Pass Infrastructure基础架构(下)
Pass Infrastructure基础架构(下) pass注册 PassRegistration该类在示例中简要显示了各种pass类型的定义 .该机制允许注册pass类,以便可以在文本pass管道 ...
- Pass Infrastructure基础架构(上)
Pass Infrastructure基础架构(上) Operation Pass OperationPass Op-Specific OperationPass Op-Agnostic Depend ...
最新文章
- elasticsearch 基础语句
- python小项目实例流程-python——房价预测案例(完整项目流程)
- Windows Server 2008常用优化设置
- springboot 单元测试
- Nginx uWsgi Django环境搭建
- Python: zip()的使用
- mysql 删除用户变量_MySql安装与MySQL添加用户、删除用户与授权
- 405 宝塔钩子_宝塔面板webhook配合gitlab完成git钩子的搭建
- ap设置 维盟660g_New丨维盟双频百兆11ac入墙AP:WAP-3018穿墙效果不一样!
- 面对人口塌方式下降,必须把房子转移到省会以上级别城市的理由
- 计算机信息机房,计算机信息中心机房建设标准
- SQL-SERVER触发器
- linux下安卓刷机,linux下安卓刷机脚本
- html怎么让一行文字有滚动的效果,HTML标签marquee实现滚动效果
- matlab中如何对一个小数取整,学习笔记153—matlab中小数如何取整?
- matlab中停止调试快捷键,matlab停止运行快捷键
- 动态代理的中介出租房屋
- 荣耀手机鸿蒙系统手机,4部荣耀手机可升为鸿蒙系统,有你的手机吗?花粉的春天来了!...
- 【HTTP】协议格式、请求
- JMeter与其它工具对比