2015-07-03 92 views
0

我使用BulletSharpBullet集成到一个WPF应用程序。我的场景包括CollisionShape是BvhTriangleMeshShape()的CollisionObject的2个实例,以及一个球体。网目子弹碰撞检测

DefaultCollisionConfiguration collisionConf = new DefaultCollisionConfiguration(); 
     CollisionDispatcher dispatcher = new CollisionDispatcher(collisionConf); 
     CollisionWorld world; 
     world = new CollisionWorld(dispatcher, broadphase, collisionConf); 

     CollisionFilterGroups myGroup = (CollisionFilterGroups) 1; 
     CollisionFilterGroups collideMask = (CollisionFilterGroups) 4; 

     foreach(var ob in obstacles) 
      world.AddCollisionObject(ob.BulletObj.ColObj); 

     CollisionObject sphere_A = new CollisionObject(); 
     double radius_A = 700; 
     Point3D ptA = new Point3D(3000, -200, 2800); 
     BulletSharp.Matrix tr_A = new BulletSharp.Matrix(); 
     tr_A.set_Rows(0, new Vector4(1, 0, 0, 0)); 
     tr_A.set_Rows(1, new Vector4(0, 1, 0, 0)); 
     tr_A.set_Rows(2, new Vector4(0, 0, 1, 0)); 
     tr_A.set_Rows(3, new Vector4((float)ptA.X, (float)ptA.Y, (float)ptA.Z, 1)); 
     sphere_A.WorldTransform = tr_A; 

     SphereShape sphere_shape_A = new SphereShape((float)radius_A); 

     //Set the shape of the sphere 
     sphere_A.CollisionShape = sphere_shape_A; 
     world.AddCollisionObject(sphere_A); 


     world.PerformDiscreteCollisionDetection(); 

球面网格碰撞在两个模型上都能正常工作。但是,当我尝试检查网格物体碰撞检测时,它不起作用。我看到这可能是更多的Bullet问题,而不是BulletSharp问题。

问题:你球体对象的默认到不同的面具组?是否有不同的配置来启用网状网格碰撞检测? enter image description here

回答

1

问题是BvhTriangleMeshShape只支持静态对象。三角网格没有适当的碰撞处理。相反,Bullet建议用户对动态对象使用凸分解,并使用由btConvexHullShapes组成的btCompoundShape。

+0

谢谢@Eivithari。通过“静态”,你是指其变换未被修改的对象或物理引擎未移动的对象? – Nic

+1

静态我的意思是转换不能改变。 BvhTriangleMeshShape不适用于任何转换,因为三角形存储在优化结构中。如果我记得正确,就像AABB树。改造它将需要不断的重新计算,这是完全没有意义的。对于两个BvhTriangleMeshShapes也没有碰撞检测算法。 – Elvithari