首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PhysX:冲突onContact不工作

PhysX:冲突onContact不工作
EN

Stack Overflow用户
提问于 2016-01-01 22:24:46
回答 1查看 550关注 0票数 1

我使用的是PhysX.NET (PhysX的C#包装器),并且试图使用SimulationEventCallBack中的onContact获得两个领域之间的冲突通知。

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

//创建子类

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

//创建场景

代码语言:javascript
复制
scene = engine.CreateScene(sceneDesc);
scene.SetSimulationEventCallback(myContactCallback,0);

还有什么需要考虑的吗?有什么要设置的旗帜吗?我很抱歉,如果这是一个非常天真的问题,但我花了一整天的时间为一些似乎相当简单的事情而工作,我无法把我的头围绕在它上面。

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2021-03-14 11:03:09

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

要使滤镜着色器工作,必须定义一个冲突组和掩码。见PxSetGroupPxSetGroupsMask。这个组只是介于0-31之间的一个数字ID。掩码是一个4短路(PxU16)位集,它定义了“对于每个组,我应该与谁碰撞”。现在这个团体面具有点挑剔。后面的数学是..。烦人..。但是,您可以使用组掩码中的输入数据,使用更简单的冲突过滤来实现自己的冲突过滤。在PhysX代码和文档中有关于如何这样做的示例。请参阅碰撞滤波

同样,我是一个C++的答案,我确信在C#包装器中也有类似的东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34560653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档