在 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相关推荐

  1. pass基础架构分析

    pass基础架构分析 Relay 和 TVM IR,包含一系列优化passes,可提高模型的性能指标,如平均推理,内存占用,或特定设备的功耗.有一套标准优化,及特定机器学习的优化,包括常量折叠,死代码 ...

  2. 将编译器pass添加到Relay

    将编译器pass添加到Relay 编译器pass是扩展Relay功能集和对Relay程序执行优化的主要接口.通过编写编译器pass,可以修改AST或收集有关AST的信息,具体取决于目标.事实上,Rel ...

  3. AI中pass架构设计优化

    AI中pass架构设计优化 Relay 和 TVM IR,包含一系列优化passes,可提高模型的性能指标,例如平均推理,内存占用,或特定设备的功耗.有一套标准优化,及特定机器学习的优化,包括常量折叠 ...

  4. TVM,Relay,Pass

    TVM,Relay,Pass Relay介绍 主要结合TVM的文档(https://tvm.apache.org/docs/dev/relay_intro.html),介绍一下NNVM的第二代Rela ...

  5. Pass算子python 函数

    Pass算子python 函数 函数 • 函数是代码的一种组织形式 • 函数应该能完成一项特定的工作,而且一般一个函数只完成一项工作 • 有些语言,分函数和过程两个概念,通俗解释是,有返回结果的是函数 ...

  6. AI基础架构Pass Infrastructure

    AI基础架构Pass Infrastructure • Operation Pass o OperationPass : Op-Specific o OperationPass : Op-Agnost ...

  7. 如何使用TVM Pass Relay

    如何使用TVM Pass Relay 随着Relay / tir中优化遍数的增加,执行并手动维护其依赖关系变得很棘手.引入了一个基础结构来管理优化过程,将其应用于TVM堆栈中IR的不同层. Relay ...

  8. Pass Infrastructure基础架构(下)

    Pass Infrastructure基础架构(下) pass注册 PassRegistration该类在示例中简要显示了各种pass类型的定义 .该机制允许注册pass类,以便可以在文本pass管道 ...

  9. Pass Infrastructure基础架构(上)

    Pass Infrastructure基础架构(上) Operation Pass OperationPass Op-Specific OperationPass Op-Agnostic Depend ...

最新文章

  1. elasticsearch 基础语句
  2. python小项目实例流程-python——房价预测案例(完整项目流程)
  3. Windows Server 2008常用优化设置
  4. springboot 单元测试
  5. Nginx uWsgi Django环境搭建
  6. Python: zip()的使用
  7. mysql 删除用户变量_MySql安装与MySQL添加用户、删除用户与授权
  8. 405 宝塔钩子_宝塔面板webhook配合gitlab完成git钩子的搭建
  9. ap设置 维盟660g_New丨维盟双频百兆11ac入墙AP:WAP-3018穿墙效果不一样!
  10. 面对人口塌方式下降,必须把房子转移到省会以上级别城市的理由
  11. 计算机信息机房,计算机信息中心机房建设标准
  12. SQL-SERVER触发器
  13. linux下安卓刷机,linux下安卓刷机脚本
  14. html怎么让一行文字有滚动的效果,HTML标签marquee实现滚动效果
  15. matlab中如何对一个小数取整,学习笔记153—matlab中小数如何取整?
  16. matlab中停止调试快捷键,matlab停止运行快捷键
  17. 动态代理的中介出租房屋
  18. 荣耀手机鸿蒙系统手机,4部荣耀手机可升为鸿蒙系统,有你的手机吗?花粉的春天来了!...
  19. 【HTTP】协议格式、请求
  20. JMeter与其它工具对比

热门文章

  1. Camunda流程驳回至上一节点
  2. 陈天奇团队新研究:自动优化深度学习工作负载
  3. python秒数变分钟_将毫秒转换为小时、分钟和秒python
  4. 服务器2003系统经常死机,winserver 2003 频繁蓝屏死机
  5. 十二个“一”的角色形象设计
  6. 【java】【贪心算法】换零钱问题
  7. SnapdragonCamera源码分析
  8. 函数的递归调用举例之汉诺塔问题模型
  9. android静默卸载,android实现静默卸载
  10. 个推clientId老是获取不到几点解决办法