碰撞节点检测空间中观察者与造型接近和碰撞的时间,其发生在观察者碰撞到造型时 Collision节点在检测观察者的碰撞时做两件事:通过 CollideTime域(eventOut出事件)输出当前的绝对时间;提示浏览者。
Collision节点是组节点,类似于 Group节点,碰撞节点有一个在它的 children域中的子节点,目的是当观察者碰到一个特定造型时(如墙)能感知。也可用节点的 collide域来关闭组中所有造型的碰撞检测,这样不会改变子节点的外形,但观察者可自由地穿越它们,这就可以创建观察者可穿越的造型。
检测观察者是否已经与一个造型发生碰撞,对于VRML浏览器来说将是非常费时的工作提供一个代理造型在 Collision节点的 proxy域中能帮助加速浏览器对碰撞的检测。代理造型是一个由 Collision节点的子节点所创建的一种简单代替复杂的造型。例如,如果组的子节点描述一架钢琴和它的键。那么一个代理造型就可以用一个简单的长方体来模拟钢琴的形体和尺寸。当VRML浏览器检测到观察者与代理物碰撞时,长方体就代替了钢琴来检测碰撞。
当 Collision节点提示浏览器一个碰撞发生时浏览器检测当前往 Navigation节点指定的导航类型。如果当前的导航类型是“EXAMINE”或“NONE”,那么观察者在与造型发生碰撞时。浏览器不作任何操作。如果当前导航类型是“WALK”和“FLY”,通常情况下,浏览器就停止观察者的动作。这样就可以防止观察者走进或飞入一个空间中的实心造型,以增加真实感。
内容来源:李新晖《虚拟现实技术与应用》