2015-07-03 91 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