physx学习手记,NxUserContactReport,NxUserTriggerReport,NxUserContactModify

这三个类是physx里常用的3个回调函数

NxUserContactReport:报告物体碰撞时的数据,用户可以在这里得到碰撞的具体信息

NxUserTriggerReport:是触发器,物体穿过、进入、离开触发器都会调用

NxUserContactModify:是physx提供的一个强大的在碰撞瞬间的修改机会,但是消耗量巨大,sdk中说推荐只有在极为重要的地方使用它,比如主角,另外如果使用硬件加速,将导致硬件返回执行,使硬件处于等待状态,另外这个函数还必须是reentrant函数。

 

今天主要研究的是NxUserContactReport。

 

NxUserContactReport只有一个函数用来被physx调用:onContactNotify,他有2个参数,一个NxContactPair,一个是事件类型。

 

目前这个函数只支持6个事件,另外3个未实现

NX_NOTIFY_ON_START_TOUCH:接触开始

NX_NOTIFY_ON_END_TOUCH:接触结束

NX_NOTIFY_ON_TOUCH:正在接触

 

NX_NOTIFY_ON_START_TOUCH_FORCE_THRESHOLD

NX_NOTIFY_ON_END_TOUCH_FORCE_THRESHOLD

NX_NOTIFY_ON_TOUCH_FORCE_THRESHOLD

 

threshold的意思是进入另一个物体x,才被认为是接触,NxActor::setContactReportThreshold函数用来设置这个值,默认是无限大,也就是说如果不设置的话,threshold的事件永远不会触发。

 

如果想要使事件生效,必须设置NxScene::setUserContactReport,然后为我们感兴趣的Shape,actor,actorGroup三个层面上任意设置NxContactPairFlag标志,只要有任意一个设置了,事件都会发生。

 

注意:Kinematic物体不会和kinematic物体产生这个事件。

 

 

下面进入NxContactPair参数:

Actors是一对发生碰撞的actor

isDeletedActor是标记这一对actor是否已经被删除。,如果是真,就不要使用这个actor了,他只是为了构造这个数据结构的。

stream是一个很强大的数据索引,有专门的迭代器NxContactStreamIterator访问它

sumFrictionForce是物体接触点的摩擦力总和

sumNormalForce是物体接触点法线反弹力的总和

 

 

如果用户想知道到底有那些位置接触,可以迭代stream查看

 

physx提供了一个很方便的迭代器NxContactStreamIterator

使用方法参见NxContactStreamIterator的帮助,写的很详细了。

你可能感兴趣的:(数据结构,Stream,actor)