我目前正在构建一个机器人仿真软件。我正在使用bullet物理来执行碰撞检测和机器人刚体动力学。
我能够成功地检测到两个三角形碰撞网格何时相互碰撞。现在我想通过在碰撞发生时将网格的颜色更改为红色来突出显示碰撞对。为此,我需要知道哪两个网格正在碰撞。是否有办法在Bullet中返回碰撞中的碰撞对?
我已经浏览了Bullet物理文档,但找不到任何有用的东西。
发布于 2019-11-08 22:02:00
在创建碰撞对象时,您可以将CollisionObject.UserObject设置为id、名称、...或者网格本身。
如果您使用的是自定义ContactResultCallback,您将获得碰撞对象和碰撞点作为AddSingleResult()方法的参数。现在,先前设置的用户对象可以帮助您识别碰撞的网格:
/// <inheritdoc cref="ContactResultCallback"/>
public override double AddSingleResult(ManifoldPoint manifoldPoint,
CollisionObjectWrapper collisionObjectWrapper1,
int partId1,
int index1,
CollisionObjectWrapper collisionObjectWrapper2,
int partId2,
int index2)
{
var mesh1 = collisionObjectWrapper1.CollisionObject.UserObject as Mesh;
var mesh2 = collisionObjectWrapper2.CollisionObject.UserObject as Mesh;
// ...
return 0;
}如果您正在使用CollisionWorld.StepSimulate(...)和CollisionWorld.SetInternalTickCallback(OnSimualtionTick)进行“实时”碰撞检测,您还将获得用户对象:
private void OnSimualtionTick(DynamicsWorld world, float timeStep)
{
for (int i = 0; i < world.Dispatcher.NumManifolds; i++)
{
PersistentManifold contactManifold = world.Dispatcher.GetManifoldByIndexInternal(i);
var mesh1 = contactManifold.Body0.UserObject as Mesh;
var mesh2 = contactManifold.Body1.UserObject as Mesh;
// ...
}
// ...
}https://stackoverflow.com/questions/57049797
复制相似问题