Я использую 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.
ВОПРОС: Объекты сферы по умолчанию имеют разную маску? Существует ли другая конфигурация, позволяющая выявлять столкновение сетки-сетки?
Спасибо @Eivithari. Под «статическими» вы подразумеваете объекты, трансформация которых не изменяется или объекты, которые не перемещаются физическим движком? – Nic
По статике я подразумеваю, что преобразование не может измениться. BvhTriangleMeshShape не предназначен для любых преобразований, поскольку треугольники хранятся в оптимизированной структуре. Что-то вроде дерева AABB, если я правильно нарисую. Для его преобразования потребовались бы постоянные пересчеты, которые были бы совершенно бессмысленными. Также не существует алгоритма обнаружения столкновений для двух BvhTriangleMeshShapes. – Elvithari