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的帮助,写的很详细了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值