PhysX:碰撞onContact不起作用

时间:2016-01-01 22:24:46

标签: c# physx physx.net

我正在使用PhysX.NET(PhysX的C#包装器),我正在尝试使用SimulationEventCallBack中的onContact获取两个球体之间的碰撞通知。

我为SimulationEventCallback创建了一个新的子类,并重写了OnContact方法,以便在发生碰撞时给我一条消息。然后我将场景的simulationEventCallback设置为我的子类的实例。即使两个球体(刚性动态)明显碰撞,这也不起作用。以下是我的代码:

//创建子类

public class robotCollision : SimulationEventCallback
    {
        public override void OnContact(ContactPairHeader pairHeader, ContactPair[] pairs)
        {
            base.OnContact(pairHeader, pairs);        
            Rhino.RhinoApp.Write("Contact!");
        }
     }

//创建场景

scene = engine.CreateScene(sceneDesc);
scene.SetSimulationEventCallback(myContactCallback,0);

还有其他需要考虑的事项吗?要设置的任何标志? 我很抱歉,如果这是一个非常天真的问题,但我已经在这一天工作了一整天似乎非常简单,我无法绕过它。

提前致谢。

1 个答案:

答案 0 :(得分:0)

我是 PhysX C++ 用户,所以我不会将此标记为解决方案。 通常,您需要使用 PxSimulationFilterShaderPxSimulationFilterCallback 定义两个参与者之间的联系。 后者是您需要实现的特定回调,所以我怀疑您是否愿意这样做。 将提供默认的 PxSimulationFilterShader,因此无需担心。

为了使过滤器着色器工作,您必须为角色定义碰撞组和遮罩。请参阅 PxSetGroupPxSetGroupsMask。 该组只是一个介于 0-31 之间的数字 ID。 掩码是 4 个短裤 (PxU16) 位集,定义了“对于每个组,我应该与谁发生冲突”。 现在组掩码有点挑剔.. 背后的数学是.. 烦人... 但是您可以使用更简单的方法实现自己的碰撞过滤,使用组掩码中的输入数据。 PhysX 代码和文档中提供了有关如何执行此操作的示例。见Collision Filtering

再说一次,我是一个 C++ 答案,我确定 C# 包装器中有类似的东西。