2015-07-03 1 views
0

Я использую BulletSharp для интеграции Bullet в приложение WPF. Моя сцена включает в себя 2 экземпляра CollisionObject, CollisionShape которого представляет собой BvhTriangleMeshShape() и сферу.Mesh-mesh обнаружение столкновения пули

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 советует пользователям использовать выпуклую декомпозицию для динамических объектов и использовать btCompoundShape, состоящую из btConvexHullShapes.

+0

Спасибо @Eivithari. Под «статическими» вы подразумеваете объекты, трансформация которых не изменяется или объекты, которые не перемещаются физическим движком? – Nic

+1

По статике я подразумеваю, что преобразование не может измениться. BvhTriangleMeshShape не предназначен для любых преобразований, поскольку треугольники хранятся в оптимизированной структуре. Что-то вроде дерева AABB, если я правильно нарисую. Для его преобразования потребовались бы постоянные пересчеты, которые были бы совершенно бессмысленными. Также не существует алгоритма обнаружения столкновений для двух BvhTriangleMeshShapes. – Elvithari