4.5the Culing Pass
来源:互联网 发布:移动电玩城源码 编辑:程序博客网 时间:2024/06/11 02:04
在WM4中,culling pass和 drawing pass是分开的,负责该流程的三个核心类是VisibleObject,VisibleSet,Culler。下面一一详述。
一,VisibleObject
该类实际上是一个结构类,有两个public成员:Spatial*Object和Effect*GlobalEffect
前者用于存储单个的潜在可见的物体,后者用于存储与Node节点相关联的globaleffect。(在绘制中大有作为)。
二,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
- 4.6the Drawing Pass
- Pass-the-Hash is Dead: Long Live Pass-the-Hash
- 域渗透——Pass The Hash & Pass The Key
- Pass the Hash Attack (Metasploit)
- pass on to the entire
- Pass
- Pass
- pass
- DataStage Certification - how to pass the exam
- Video Tutorial: Pass-The-Hash Toolkit
- UVALive 3938 "Ray, Pass me the dishes!"
- UVa-1400 - "Ray, Pass me the dishes!"
- LA 3938 "Ray, Pass me the dishes!"
- 1400 - "Ray, Pass me the dishes!"
- UVALive - 3938 "Ray, Pass me the dishes!"
- Pass Google Fast - 100x The Traffic!
- UVA1400 - "Ray, Pass me the dishes!"
- 猛料真相大白:云计算 梦幻的泡影
- 4.2 Geometric State及其更新
- BlackBerry模拟器中文转换
- 4.3RenderState及其更新
- log4j 1.2 配置 xml
- 4.5the Culing Pass
- BlackBerry资源网站
- win7开机黑屏开计算机无桌面图标任务栏
- interface ---接口 的简单应用
- 4.6the Drawing Pass
- 关于停车场管理的问题
- 4.7 Scene Graph Compilers
- 写一个简单的linq查询语句
- C&&C++群