PhysX3 User Guide 05 - Scene Queries
时间:2011-06-04 来源:CR苏杭
有两种方式查询场景中的碰撞collision:批处理batched和非批处理non-batched。非批处理查询又称single shot queries,使用PxScene类的接口,是PxScene的一项常规功能。批处理查询是使用PxBatchQuery对象,PS3上只有批处理查询一种方式。
Raycast queries
查询中用户定义的射线ray会与整个场景相交intersected with the whole scene。PhysX有三种射线:
- raycastAny
- raycastSingle
- raycastMultiple
查询碰撞collision时,返回的最主要的信息是一个布尔是非值,表示碰没碰上,若需获取更多信息,比如射线是不是穿过了什么之类的,就可以用raycastAny。至于交点的确切信息、相交的是个啥形状,这些都不是raycastAny关心的内容,它只关心一件事,是不是有击中发生(there was a hit)。人工智能中的视线查询(line-of-sight queries)就是一个典型应用。
raycastSingle比raycastAny先进一些,通过它可以知道第一个被击中的是个嘛。譬如说子弹击中的情形。
raycastMultiple是最高级的。ray会hit到的所有物体都可以得到。好比说穿甲子弹。
注意:* solid物体(sphere, capsule, box, convex)是封闭的closed(即它们包括它们的边界boundaries)
* plane是封闭的半空间 closed halfspace
* heightfield也是封闭的,并且是solid物体。
射线投射在solid物体上,射线是有终点的。射线ray和solid物体的相交intersection会引发一个击中报告hit report。
下表显示了不同物体对射线是否会产生hit report报告的反应是不同的。比如只要起点位于plane内部,即平面以下,无论射线终点在哪儿,也不会有plane被hit的report返回。
Sweep Queries
Queries中Shape会以一指定的方向扫sweep过去,并报告是否与场景Scene有碰撞collision。也有三种sweep方式:
- sweepAny
- sweepSingle
- sweepMultiple
它们的区别也和3种ray之间的区别一样。
目前支持sweep的形状Shape有box, sphere和capsule。
Overlap Queries
这种query是用