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,整个场景都不会进行碰撞检测。

主页 节点说明 来信