PhysX 3.2中碰撞过滤的实现

本文详细介绍了PhysX 3.2中碰撞过滤的实现机制,包括FilterShader函数、物体的Attribute和FilterData,以及碰撞回调函数。通过定义碰撞规则,设置物体的FilterData,并在FilterShader中实施过滤逻辑,可以有效控制物体间不必要的碰撞和碰撞事件报告。文中还以SampleParticles中的代码为例进行了说明。
摘要由CSDN通过智能技术生成

之前,我们在从PhysX2.8升级到PhysX3.2(4) 中就说到了,在PhysX 3.2中,物体之间的碰撞过滤都利用一个新增的FilterShader函数中实现。在模拟时,SDK在判断两个物体是否需要碰撞的是时候,会用这一对物体的相关信息来调用FilterShader。这一篇中,我们就具体介绍实现方式。

关于SDK里面碰撞过滤的设计和实现,有几个概念要明确:

a. 碰撞过滤函数的定义:也就是你定义的 FilterShader 函数。这个函数在模拟时,SDK根据检测到的相互有碰撞的物体对的信息来调用,传入的信息有这一对物体中各自的Attribute和FilterData (请注意这只是建议使用的数据,还有constantBlack等,但是由于涉及到内存读取,并且这个函数是性能攸关的函数,因此一般情况下不建议使用),传出的信息有两个:一个是返回值PxFilterFlags,一个是引用传出值pairFlags。

b. 物体的 Attribute和FilterData:Attribute在选择创建哪种对象的时候就确定了,不能更改;但FilterData是设置到物体的PxShape之上的,并且是可以修改的。这两个参数,在filterShader函数被调用时,会被传入。

c. 碰撞过滤回调函数: 如果a 不够用(也就是说,不光要控制物体间的碰撞,还要知道碰撞的更多信息用于进一步处理),还可以定义一个回调函数来进

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值