Collision节点 |
||
Collision { | ||
children | [ ] | # exposed field MFNode |
collide | TRUE | # exposed field SFBool |
proxy | NULL | # SFNode |
bboxCenter | 0 0 0 | # SFVec3f |
bboxSize | -1 -1 -1 | # SFVec3f |
} | ||
域 | ||
children | 包含作碰撞检测的节点或节点组。如果提供了碰撞代体,则以它替代进行碰撞检测。 | |
collide | 指明本节点的子节点是(TRUE)否(FALSE)要接收碰撞检查。 | |
proxy | 取代children域中对象进行碰撞检测的物体。 | |
bboxCenter | 包围Collision节点的所有子节点的包围盒的中心。 | |
bboxSize | 包围Collision节点的所有子节点的包围盒在x、y、z方向上的尺寸。 | |
事件 | ||
addChildren | eventIn
MFNode 将指定节点加入到Collision节点的子节点列表中。如果指定节点已经在子节点列表中,则忽略。 |
|
removeChildren | eventIn
MFNode 将指定节点从Collision节点的子节点列表中删除。如果指定节点不在子节点列表中,则忽略。 |
|
collideTime | eventOut SFTime 指明检测到的碰撞发生的时间。 |
|
说明 | ||
Collision组节点允许对某些物体关闭碰撞检测,或者用一个简单形状的替代物加快检测的速度。 缺省的情况下,认为场景中的所有物体都有可能被碰撞。如果在一个场景中没有指定Collision节点,在进行浏览时浏览器将检测用户是否要与某个物体发生碰撞。例如,这一检测可以预防用户穿过建筑物的墙壁,或者限制用户浏览场景中的特定区域。当碰撞发生时会有什么反应将由浏览器定义。例如,当用户跑入一物体中,浏览器可能将用户弹出此物体或者简单的停止其运动过程。 由于对任意复杂的几何形体进行碰撞检测的计算量相当大,一个提高运行性能的方法是另外定义一个碰撞代体(proxy)完成碰撞检测。这个proxy域中定义的代体可以是任意合法的VRML组或子节点。在碰撞检测时,仅用代体参与检测,所有Collision节点的子节点完全的被忽略掉。一个代体可以简单到时一个包围盒或包围球。 如果children域为空,collide域为TRUE,且已指定一个代体,那么尽管什么也没有显示,碰撞检测仍将针对代体进行。这是一种针对不可见几何形体进行的碰撞检测。 proxy和children可以包含嵌套的Collision节点。如果一个子Collision节点检测到一次碰撞并且发出一个Collision输出事件,它的所有的父Collision节点也会发出一个与它的collideTime值相同的collision输出事件。 如果collide的值为FALSE,将不会对本节点的子节点、碰撞代体或本节点的任何深层子节点进行碰撞检测。如果一个场景中的根节点是一个collide域被设为FALSE的Collision节点,那么不管深层Collision节点的collide域是否设为TRUE,整个场景都不会进行碰撞检测。 |