Ejemplo n.º 1
0
        protected override void OnInitializePhysics()
        {
            // collision configuration contains default setup for memory, collision setup
            using (var cci = new DefaultCollisionConstructionInfo()
            {
                DefaultMaxPersistentManifoldPoolSize = 32768
            })
            {
                CollisionConf = new DefaultCollisionConfiguration(cci);
            }

            Dispatcher = new CollisionDispatcher(CollisionConf);
            Dispatcher.DispatcherFlags = DispatcherFlags.DisableContactPoolDynamicAllocation;

            // the maximum size of the collision world. Make sure objects stay within these boundaries
            // Don't make the world AABB size too large, it will harm simulation quality and performance
            Vector3 worldAabbMin = new Vector3(-1000, -1000, -1000);
            Vector3 worldAabbMax = new Vector3(1000, 1000, 1000);

            Broadphase = new AxisSweep3(worldAabbMin, worldAabbMax, 3500);
            //Broadphase = new DbvtBroadphase();

            Solver = new SequentialImpulseConstraintSolver();

            World         = new DiscreteDynamicsWorld(Dispatcher, Broadphase, Solver, CollisionConf);
            World.Gravity = new Vector3(0, -10, 0);
            World.SolverInfo.SolverMode   |= SolverModes.EnableFrictionDirectionCaching;
            World.SolverInfo.NumIterations = 5;

            _scenes[SceneIndex]();
        }
Ejemplo n.º 2
0
        public void SetUp()
        {
            conf       = new DefaultCollisionConfiguration();
            dispatcher = new CollisionDispatcher(conf);
            broadphase = new AxisSweep3(new Vector3(-1000, -1000, -1000), new Vector3(1000, 1000, 1000));
            world      = new DiscreteDynamicsWorld(dispatcher, broadphase, null, conf);

            // Initialize TriangleIndexVertexArray with float array
            indexVertexArray = new TriangleIndexVertexArray(TorusMesh.Indices, TorusMesh.Vertices);
            gImpactMeshShape = new GImpactMeshShape(indexVertexArray);
            gImpactMeshShape.CalculateLocalInertia(1.0f);
            gImpactMesh = CreateBody(1.0f, gImpactMeshShape, Vector3.Zero);


            // Initialize TriangleIndexVertexArray with Vector3 array
            Vector3[] torusVertices = new Vector3[TorusMesh.Vertices.Length / 3];
            for (int i = 0; i < torusVertices.Length; i++)
            {
                torusVertices[i] = new Vector3(
                    TorusMesh.Vertices[i * 3],
                    TorusMesh.Vertices[i * 3 + 1],
                    TorusMesh.Vertices[i * 3 + 2]);
            }
            indexVertexArray2 = new TriangleIndexVertexArray(TorusMesh.Indices, torusVertices);
            triangleMeshShape = new BvhTriangleMeshShape(indexVertexArray2, true);
            // CalculateLocalInertia must fail for static shapes (shapes based on TriangleMeshShape)
            //triangleMeshShape.CalculateLocalInertia(1.0f);
            triangleMesh = CreateBody(0.0f, triangleMeshShape, Vector3.Zero);
        }
Ejemplo n.º 3
0
        protected override void OnInitializePhysics()
        {
            // collision configuration contains default setup for memory, collision setup
            CollisionConf = new DefaultCollisionConfiguration();
            Dispatcher    = new CollisionDispatcher(CollisionConf);

            Vector3 worldAabbMin = new Vector3(-10000, -10000, -10000);
            Vector3 worldAabbMax = new Vector3(10000, 10000, 10000);

            Broadphase = new AxisSweep3(worldAabbMin, worldAabbMax);

            Solver = new SequentialImpulseConstraintSolver();

            World         = new DiscreteDynamicsWorld(Dispatcher, Broadphase, Solver, CollisionConf);
            World.Gravity = new Vector3(0, -10, 0);
            World.SetInternalTickCallback(MotorPreTickCallback, this, true);

            // create the ground
            CollisionShape groundShape = new BoxShape(200, 10, 200);

            CollisionShapes.Add(groundShape);
            CollisionObject ground = LocalCreateRigidBody(0, Matrix.Translation(0, -10, 0), groundShape);

            ground.UserObject = "Ground";

            fCyclePeriod    = 2000.0f;
            fMuscleStrength = 0.5f;
            m_Time          = 0;

            SpawnTestRig(new Vector3(1, 0.5f, 0), false);
            SpawnTestRig(new Vector3(-2, 0.5f, 0), true);
        }
Ejemplo n.º 4
0
        public ConvexDecompositionDemoSimulation(bool enableSat)
        {
            _enableSat = enableSat;

            CollisionConfiguration = new DefaultCollisionConfiguration();
            Dispatcher             = new CollisionDispatcher(CollisionConfiguration);
            Broadphase             = new AxisSweep3(new Vector3(-10000, -10000, -10000), new Vector3(10000, 10000, 10000));
            World = new DiscreteDynamicsWorld(Dispatcher, Broadphase, null, CollisionConfiguration);

            CreateGround();

            ManifoldPoint.ContactAdded += MyContactCallback;
            //CompoundCollisionAlgorithm.CompoundChildShapePairCallback = MyCompoundChildShapeCallback;

            string path           = Path.Combine("data", "file.obj");
            var    wavefrontModel = WavefrontObj.Load(path);

            if (wavefrontModel.Indices.Count == 0)
            {
                return;
            }

            var localScaling = new Vector3(6, 6, 6);

            _triangleMesh = CreateTriangleMesh(wavefrontModel.Indices, wavefrontModel.Vertices, localScaling);

            // Convex hull approximation
            ConvexHullShape convexShape = CreateHullApproximation(_triangleMesh);
            float           mass        = 1.0f;

            PhysicsHelper.CreateBody(mass, Matrix.Translation(0, 2, 14), convexShape, World);

            // Non-moving body
            var        objectOffset    = new Vector3(10, 0, 0);
            const bool useQuantization = true;
            var        concaveShape    = new BvhTriangleMeshShape(_triangleMesh, useQuantization);

            PhysicsHelper.CreateStaticBody(Matrix.Translation(objectOffset), concaveShape, World);


            Hacd hacd = ComputeHacd(wavefrontModel);

            hacd.Save("output.wrl", false);

            var compoundShape = CreateCompoundShape(hacd, localScaling);

            mass         = 10.0f;
            objectOffset = new Vector3(-10, 0, -6);
            var body2 = PhysicsHelper.CreateBody(mass, Matrix.Translation(objectOffset), compoundShape, World);

            body2.CollisionFlags |= CollisionFlags.CustomMaterialCallback;

            objectOffset.Z       += 6;
            body2                 = PhysicsHelper.CreateBody(mass, Matrix.Translation(objectOffset), compoundShape, World);
            body2.CollisionFlags |= CollisionFlags.CustomMaterialCallback;

            objectOffset.Z       += 6;
            body2                 = PhysicsHelper.CreateBody(mass, Matrix.Translation(objectOffset), compoundShape, World);
            body2.CollisionFlags |= CollisionFlags.CustomMaterialCallback;
        }
Ejemplo n.º 5
0
        public BenchmarkDemoSimulation()
        {
            using (var cci = new DefaultCollisionConstructionInfo()
            {
                DefaultMaxPersistentManifoldPoolSize = 32768
            })
            {
                CollisionConfiguration = new DefaultCollisionConfiguration(cci);
            }

            Dispatcher = new CollisionDispatcher(CollisionConfiguration);
            Dispatcher.DispatcherFlags = DispatcherFlags.DisableContactPoolDynamicAllocation;

            // The maximum size of the collision world. Make sure objects stay within these boundaries
            // Don't make the world AABB size too large, it will harm simulation quality and performance
            var worldAabbMin = new Vector3(-1000, -1000, -1000);
            var worldAabbMax = new Vector3(1000, 1000, 1000);

            Broadphase = new AxisSweep3(worldAabbMin, worldAabbMax, 3500);
            //Broadphase = new DbvtBroadphase();

            World = new DiscreteDynamicsWorld(Dispatcher, Broadphase, null, CollisionConfiguration);
            World.SolverInfo.SolverMode   |= SolverModes.EnableFrictionDirectionCaching;
            World.SolverInfo.NumIterations = 5;

            _scenes = new Action[] {
                Create3KBoxes, CreateStructures, CreateTaruStack, CreateShapesGravity, CreateTaruGravity
            };
            _scenes[_scene]();
        }
Ejemplo n.º 6
0
        protected override void OnInitializePhysics()
        {
            // collision configuration contains default setup for memory, collision setup
            CollisionConf = new SoftBodyRigidBodyCollisionConfiguration();
            Dispatcher    = new CollisionDispatcher(CollisionConf);

            Broadphase = new AxisSweep3(new Vector3(-1000, -1000, -1000),
                                        new Vector3(1000, 1000, 1000), maxProxies);

            // the default constraint solver.
            Solver = new SequentialImpulseConstraintSolver();

            softBodyWorldInfo = new SoftBodyWorldInfo
            {
                AirDensity   = 1.2f,
                WaterDensity = 0,
                WaterOffset  = 0,
                WaterNormal  = Vector3.Zero,
                Gravity      = new Vector3(0, -10, 0),
                Dispatcher   = Dispatcher,
                Broadphase   = Broadphase
            };
            softBodyWorldInfo.SparseSdf.Initialize();

            World         = new SoftRigidDynamicsWorld(Dispatcher, Broadphase, Solver, CollisionConf);
            World.Gravity = new Vector3(0, -10, 0);
            World.DispatchInfo.EnableSpu = true;

            World.SetInternalTickCallback(PickingPreTickCallback, this, true);

            InitializeDemo();
        }
Ejemplo n.º 7
0
        public Physics()
        {
            demos = new DemoConstructor[] { Init_Cloth, Init_Pressure, Init_Volume, Init_Ropes, Init_RopeAttach,
                                            Init_ClothAttach, Init_Sticks, Init_Collide, Init_Collide2, Init_Collide3, Init_Impact, Init_Aero,
                                            Init_Aero2, Init_Friction, Init_Torus, Init_TorusMatch, Init_Bunny, Init_BunnyMatch, Init_Cutting1,
                                            Init_ClusterDeform, Init_ClusterCollide1, Init_ClusterCollide2, Init_ClusterSocket, Init_ClusterHinge,
                                            Init_ClusterCombine, Init_ClusterCar, Init_ClusterRobot, Init_ClusterStackSoft, Init_ClusterStackMixed,
                                            Init_TetraCube, Init_TetraBunny };

            // collision configuration contains default setup for memory, collision setup
            CollisionConf = new SoftBodyRigidBodyCollisionConfiguration();
            Dispatcher    = new CollisionDispatcher(CollisionConf);

            Broadphase = new AxisSweep3(new Vector3(-1000, -1000, -1000),
                                        new Vector3(1000, 1000, 1000), maxProxies);

            // the default constraint solver.
            Solver = new SequentialImpulseConstraintSolver();

            softBodyWorldInfo              = new SoftBodyWorldInfo();
            softBodyWorldInfo.AirDensity   = 1.2f;
            softBodyWorldInfo.WaterDensity = 0;
            softBodyWorldInfo.WaterOffset  = 0;
            softBodyWorldInfo.WaterNormal  = Vector3.Zero;
            softBodyWorldInfo.Gravity      = new Vector3(0, -10, 0);
            softBodyWorldInfo.Dispatcher   = Dispatcher;
            softBodyWorldInfo.Broadphase   = Broadphase;
            softBodyWorldInfo.SparseSdf.Initialize();

            World         = new SoftRigidDynamicsWorld(Dispatcher, Broadphase, Solver, CollisionConf);
            World.Gravity = new Vector3(0, -10, 0);
            World.DispatchInfo.EnableSpu = true;

            InitializeDemo();
        }
Ejemplo n.º 8
0
        protected override void OnInitializePhysics()
        {
            // collision configuration contains default setup for memory, collision setup
            CollisionConf = new DefaultCollisionConfiguration();
            Dispatcher    = new CollisionDispatcher(CollisionConf);

            Broadphase = new AxisSweep3(new Vector3(-10000, -10000, -10000), new Vector3(10000, 10000, 10000));
            Solver     = new SequentialImpulseConstraintSolver();

            World         = new DiscreteDynamicsWorld(Dispatcher, Broadphase, Solver, CollisionConf);
            World.Gravity = new Vector3(0, -10, 0);

            //World.DispatchInfo.UseConvexConservativeDistanceUtil = true;
            //World.DispatchInfo.ConvexConservativeDistanceThreshold = 0.01f;

            // Setup a big ground box
            CollisionShape groundShape     = new BoxShape(100, 10, 100);
            Matrix         groundTransform = Matrix.Translation(0, -10, 0);

            RigidBody ground = LocalCreateRigidBody(0, groundTransform, groundShape);

            ground.UserObject = "Ground";

            // Spawn one ragdoll
            SpawnRagdoll(new Vector3(1, 0.5f, 0));
            SpawnRagdoll(new Vector3(-1, 0.5f, 0));
        }
Ejemplo n.º 9
0
        public void SetUp()
        {
            conf       = new DefaultCollisionConfiguration();
            dispatcher = new CollisionDispatcher(conf);
            broadphase = new AxisSweep3(new Vector3(-1000, -1000, -1000), new Vector3(1000, 1000, 1000));
            world      = new DiscreteDynamicsWorld(dispatcher, broadphase, null, conf);

            groundShape            = new BoxShape(30, 1, 30);
            ground                 = CreateBody(0, Matrix.Translation(0, -5, 0), groundShape);
            ground.CollisionFlags |= CollisionFlags.CustomMaterialCallback;

            compoundShape = new CompoundShape();
            boxShape      = new BoxShape(1, 1, 1);
            compoundShape.AddChildShape(Matrix.Identity, boxShape);
            boxShape2 = new BoxShape(1, 1, 1);
            compoundShape.AddChildShape(Matrix.Translation(0, -1, 0), boxShape2);
            boxShape3 = new BoxShape(1, 1, 1);
            compoundShape.AddChildShape(Matrix.Translation(0, -2, 0), boxShape3);

            compoundShape2 = new CompoundShape();
            compoundShape2.AddChildShape(Matrix.Identity, compoundShape);

            compound = CreateBody(1, Matrix.Translation(0, 0, 0), compoundShape2);

            ManifoldPoint.ContactAdded += ContactAdded;
        }
Ejemplo n.º 10
0
        /*
         * void MyContactCallback(object sender, ContactAddedEventArgs e)
         * {
         *  if (e.CollisionObject0Wrapper.CollisionObject.CollisionShape.ShapeType == BroadphaseNativeType.CompoundShape)
         *  {
         *      CompoundShape compound = e.CollisionObject0Wrapper.CollisionObject.CollisionShape as CompoundShape;
         *      CollisionShape childShape = compound.GetChildShape(e.Index0);
         *  }
         *
         *  if (e.CollisionObject1Wrapper.CollisionObject.CollisionShape.ShapeType == BroadphaseNativeType.CompoundShape)
         *  {
         *      CompoundShape compound = e.CollisionObject1Wrapper.CollisionObject.CollisionShape as CompoundShape;
         *      CollisionShape childShape = compound.GetChildShape(e.Index1);
         *  }
         *
         *  e.IsContactModified = true;
         * }
         */

        public void SetupEmptyDynamicsWorld()
        {
            // collision configuration contains default setup for memory, collision setup
            CollisionConf = new DefaultCollisionConfiguration();
            Dispatcher    = new CollisionDispatcher(CollisionConf);

            CompoundCollisionAlgorithm.CompoundChildShapePairCallback = MyCompoundChildShapeCallback;

            convexDecompositionObjectOffset = new Vector3(10, 0, 0);

            Broadphase = new AxisSweep3(new Vector3(-10000, -10000, -10000), new Vector3(10000, 10000, 10000));
            //Broadphase = new SimpleBroadphase();

            Solver = new SequentialImpulseConstraintSolver();
            World  = new DiscreteDynamicsWorld(Dispatcher, Broadphase, Solver, CollisionConf);

            // create the ground
            CollisionShape groundShape = new BoxShape(30, 2, 30);

            CollisionShapes.Add(groundShape);
            CollisionObject ground = LocalCreateRigidBody(0, Matrix.Translation(0, -4.5f, 0), groundShape);

            ground.UserObject = "Ground";

            // create a few dynamic rigidbodies
            float mass = 1.0f;

            CollisionShape colShape = new BoxShape(1);

            CollisionShapes.Add(colShape);
            Vector3 localInertia = colShape.CalculateLocalInertia(mass);
        }
Ejemplo n.º 11
0
 public void SetupEmptyDynamicsWorld()
 {
     // collision configuration contains default setup for memory, collision setup
     CollisionConf = new DefaultCollisionConfiguration();
     Dispatcher    = new CollisionDispatcher(CollisionConf);
     Broadphase    = new AxisSweep3(new Vector3(-10000, -10000, -10000), new Vector3(10000, 10000, 10000));
     Solver        = new SequentialImpulseConstraintSolver();
     World         = new DiscreteDynamicsWorld(Dispatcher, Broadphase, Solver, CollisionConf);
 }
Ejemplo n.º 12
0
        private void SetupEmptyDynamicsWorld()
        {
            CollisionConf = new DefaultCollisionConfiguration();
            Dispatcher    = new CollisionDispatcher(CollisionConf);
            Broadphase    = new AxisSweep3(new Vector3(-10000, -10000, -10000), new Vector3(10000, 10000, 10000));
            World         = new DiscreteDynamicsWorld(Dispatcher, Broadphase, null, CollisionConf);

            CreateGround();
        }
Ejemplo n.º 13
0
        public override void Run()
        {
            var conf       = new DefaultCollisionConfiguration();
            var dispatcher = new CollisionDispatcher(conf);
            var broadphase = new AxisSweep3(new Vector3(-1000, -1000, -1000), new Vector3(1000, 1000, 1000));

            world = new DiscreteDynamicsWorld(dispatcher, broadphase, null, conf);

            var indexVertexArray = new TriangleIndexVertexArray(TorusMesh.Indices, TorusMesh.Vertices);

            foreach (var indexedMesh in indexVertexArray.IndexedMeshArray)
            {
                indexedMesh.ToString();
            }
            AddToDisposeQueue(indexVertexArray);

            var     gImpactMesh = new GImpactMeshShape(indexVertexArray);
            Vector3 aabbMin, aabbMax;

            gImpactMesh.GetAabb(Matrix.Identity, out aabbMin, out aabbMax);
            CreateBody(1.0f, gImpactMesh, Vector3.Zero);
            AddToDisposeQueue(gImpactMesh);
            gImpactMesh = null;

            var triangleMesh = new BvhTriangleMeshShape(indexVertexArray, true);

            triangleMesh.CalculateLocalInertia(1.0f);
            triangleMesh.GetAabb(Matrix.Identity, out aabbMin, out aabbMax);
            CreateBody(1.0f, triangleMesh, Vector3.Zero);
            AddToDisposeQueue(triangleMesh);
            triangleMesh = null;

            indexVertexArray = null;


            AddToDisposeQueue(conf);
            AddToDisposeQueue(dispatcher);
            AddToDisposeQueue(broadphase);
            AddToDisposeQueue(world);

            //conf.Dispose();
            conf = null;
            //dispatcher.Dispose();
            dispatcher = null;
            //broadphase.Dispose();
            broadphase = null;
            for (int i = 0; i < 600; i++)
            {
                world.StepSimulation(1.0f / 60.0f);
            }
            world.Dispose();
            world = null;

            ForceGC();
            TestWeakRefs();
            ClearRefs();
        }
Ejemplo n.º 14
0
        private void SetAxisSweepBroadphaseInfo(AxisSweep3 axisSweepBroadphase, TreeNode broadphaseNode)
        {
            broadphaseNode.Nodes.Clear();

            for (int i = 0; i < axisSweepBroadphase.NumHandles; i++)
            {
                // axisSweepBroadphase.GetHandle(i);
                broadphaseNode.Nodes.Add("Handle");
            }
        }
Ejemplo n.º 15
0
        public void SetUp()
        {
            conf       = new DefaultCollisionConfiguration();
            dispatcher = new CollisionDispatcher(conf);
            broadphase = new AxisSweep3(new Vector3(-1000, -1000, -1000), new Vector3(1000, 1000, 1000));
            world      = new DiscreteDynamicsWorld(dispatcher, broadphase, null, conf);

            broadphase.OverlappingPairUserCallback = new AxisSweepUserCallback();

            boxShape = new BoxShape(1);
        }
Ejemplo n.º 16
0
        public void SetUp()
        {
            conf       = new DefaultCollisionConfiguration();
            dispatcher = new CollisionDispatcher(conf);
            broadphase = new AxisSweep3(new Vector3(-1000, -1000, -1000), new Vector3(1000, 1000, 1000));
            world      = new DiscreteDynamicsWorld(dispatcher, broadphase, null, conf);

            broadphase.OverlappingPairUserCallback = new AxisSweepUserCallback();

            body1 = CreateBody(10.0f, new SphereShape(1.0f), new Vector3(2, 2, 0));
            body2 = CreateBody(1.0f, new SphereShape(1.0f), new Vector3(0, 2, 0));
        }
Ejemplo n.º 17
0
        public void SetUp()
        {
            conf       = new SoftBodyRigidBodyCollisionConfiguration();
            dispatcher = new CollisionDispatcher(conf);
            broadphase = new AxisSweep3(new Vector3(-1000, -1000, -1000),
                                        new Vector3(1000, 1000, 1000));
            solver = new DefaultSoftBodySolver();
            world  = new SoftRigidDynamicsWorld(dispatcher, broadphase, null, conf, solver);

            softBodyWorldInfo = new SoftBodyWorldInfo();
            softBody          = new SoftBody(softBodyWorldInfo);
            world.AddSoftBody(softBody);
        }
Ejemplo n.º 18
0
        public CollisionManager(Program debug)
        {
            var defaultCollisionConfiguration = new DefaultCollisionConfiguration( );
            var collisionDispatcher           = new CollisionDispatcher(defaultCollisionConfiguration);
            var broadphase = new AxisSweep3(new Vector3(-100, -100, -100), new Vector3(100, 100, 100));

            World = new CollisionWorld(collisionDispatcher, broadphase, defaultCollisionConfiguration);

            if (debug != null)
            {
                this.World.DebugDrawer = new BulletDebugDrawer(debug);
            }
        }
Ejemplo n.º 19
0
        protected override void OnInitializePhysics()
        {
            // collision configuration contains default setup for memory, collision setup
            CollisionConf = new DefaultCollisionConfiguration();
            Dispatcher    = new CollisionDispatcher(CollisionConf);

            Broadphase = new AxisSweep3(new Vector3(-1000, -1000, -1000), new Vector3(1000, 1000, 1000));
            Solver     = new SequentialImpulseConstraintSolver();

            World = new DiscreteDynamicsWorld(Dispatcher, Broadphase, Solver, CollisionConf);
            World.DispatchInfo.AllowedCcdPenetration = 0.0001f;
            //World.Gravity = Freelook.Up * -10.0f;

            Matrix startTransform = Matrix.Translation(10.210098f, -1.6433364f, 16.453260f);

            ghostObject = new PairCachingGhostObject();
            ghostObject.WorldTransform = startTransform;
            Broadphase.OverlappingPairCache.SetInternalGhostPairCallback(new GhostPairCallback());

            const float characterHeight = 1.75f;
            const float characterWidth  = 1.75f;
            ConvexShape capsule         = new CapsuleShape(characterWidth, characterHeight);

            ghostObject.CollisionShape = capsule;
            ghostObject.CollisionFlags = CollisionFlags.CharacterObject;

            const float stepHeight = 0.35f;

            character = new KinematicCharacterController(ghostObject, capsule, stepHeight);

            BspLoader bspLoader = new BspLoader();

            //string filename = UnityEngine.Application.dataPath + "/BulletUnity/Examples/Scripts/BulletSharpDemos/CharacterDemo/data/BspDemo.bsp";
            UnityEngine.TextAsset bytes      = (UnityEngine.TextAsset)UnityEngine.Resources.Load("BspDemo");
            System.IO.Stream      byteStream = new System.IO.MemoryStream(bytes.bytes);
            bspLoader.LoadBspFile(byteStream);
            BspConverter bsp2Bullet = new BspToBulletConverter(this);

            bsp2Bullet.ConvertBsp(bspLoader, 0.1f);

            World.AddCollisionObject(ghostObject, CollisionFilterGroups.CharacterFilter, CollisionFilterGroups.StaticFilter | CollisionFilterGroups.DefaultFilter);

            World.AddAction(character);

            Vector3 v1 = new Vector3(0f, 0f, 0f);
            Vector3 v2 = new Vector3(0f, 0f, 0f);

            convexResultCallback = new ClosestConvexResultCallback(ref v1, ref v2);
            convexResultCallback.CollisionFilterMask = (short)CollisionFilterGroups.StaticFilter;
            cameraSphere = new SphereShape(0.2f);
        }
Ejemplo n.º 20
0
        public void SetUp()
        {
            conf       = new DefaultCollisionConfiguration();
            dispatcher = new CollisionDispatcher(conf);
            broadphase = new AxisSweep3(new Vector3(-1000, -1000, -1000), new Vector3(1000, 1000, 1000));
            world      = new DiscreteDynamicsWorld(dispatcher, broadphase, null, conf);

            action = new Action();
            world.AddAction(action);
            world.AddAction(action);
            world.RemoveAction(action);
            world.RemoveAction(action);
            world.AddAction(action);
        }
Ejemplo n.º 21
0
        public RagdollDemoSimulation()
        {
            CollisionConfiguration = new DefaultCollisionConfiguration();
            Dispatcher             = new CollisionDispatcher(CollisionConfiguration);
            Broadphase             = new AxisSweep3(new Vector3(-10000, -10000, -10000), new Vector3(10000, 10000, 10000));
            World = new DiscreteDynamicsWorld(Dispatcher, Broadphase, null, CollisionConfiguration);

            //World.DispatchInfo.UseConvexConservativeDistanceUtil = true;
            //World.DispatchInfo.ConvexConservativeDistanceThreshold = 0.01f;

            CreateGround();

            SpawnRagdoll(new Vector3(1, 0.5f, 0));
            SpawnRagdoll(new Vector3(-1, 0.5f, 0));
        }
Ejemplo n.º 22
0
        protected override void OnInitializePhysics()
        {
            // collision configuration contains default setup for memory, collision setup
            CollisionConf = new DefaultCollisionConfiguration();
            Dispatcher    = new CollisionDispatcher(CollisionConf);

            Broadphase = new AxisSweep3(new Vector3(-1000, -1000, -1000), new Vector3(1000, 1000, 1000));

            World         = new DiscreteDynamicsWorld(Dispatcher, Broadphase, null, CollisionConf);
            World.Gravity = new Vector3(0, -10, 0);

            var groundShape = new BoxShape(30, 1, 30);
            var ground      = LocalCreateRigidBody(0, Matrix.Translation(0, -5, 0), groundShape);

            ground.UserObject = "metal.wav";
            ground            = LocalCreateRigidBody(0, Matrix.Translation(0, 0, 0) * Matrix.RotationZ((float)-Math.PI / 4), groundShape);
            ground.UserObject = "metal.wav";
            var groundShape2 = new BoxShape(5, 1, 30);

            ground            = LocalCreateRigidBody(0, Matrix.Translation(25, -3, 0), groundShape2);
            ground.UserObject = "metal.wav";

            var boxShape = new BoxShape(1, 0.5f, 2);

            for (int i = 0; i < 4; i++)
            {
                var box = LocalCreateRigidBody(1, Matrix.Translation(i * 1.5f, i * 3 + 10, i * 3), boxShape);
                box.UserObject = "metal.wav";
            }

            var sphereShape = new SphereShape(1);

            for (int i = 0; i < 4; i++)
            {
                var sphere = LocalCreateRigidBody(1, Matrix.Translation(i, i * 3 + 20, 0), sphereShape);
                sphere.UserObject = "rubber.wav";
            }

            var cylinderShape = new CylinderShape(0.5f, 1, 0.5f);

            for (int i = 0; i < 4; i++)
            {
                var cylinder = LocalCreateRigidBody(1, Matrix.Translation(i, i * 3 + 20, 3), cylinderShape);
                cylinder.UserObject = "can.wav";
            }

            ManifoldPoint.ContactAdded += ContactAdded;
        }
        public ConcaveRaycastDemoSimulation()
        {
            CollisionConfiguration = new DefaultCollisionConfiguration();
            Dispatcher             = new CollisionDispatcher(CollisionConfiguration);

            Broadphase = new AxisSweep3(_worldMin, _worldMax);

            World = new DiscreteDynamicsWorld(Dispatcher, Broadphase, null, CollisionConfiguration);
            World.SolverInfo.SplitImpulse = 1;

            _raycastBar = new RaycastBar(4000.0f, 0.0f, -1000.0f, 10);
            //_raycastBar = new RaycastBar(true, 40.0f, -50.0f, 50.0f);

            CreateBoxes();
            CreateGround();
        }
Ejemplo n.º 24
0
        public static void CreateInstance()
        {
            var CollisionConfiguration = new DefaultCollisionConfiguration();
            var Dispatcher             = new CollisionDispatcher(CollisionConfiguration);
            var Broadphase             = new AxisSweep3(new Vector3(-10000, -10000, -10000), new Vector3(10000, 10000, 10000));
            var World = new DiscreteDynamicsWorld(Dispatcher, Broadphase, null, CollisionConfiguration);

            World.Gravity = new Vector3(0, 0, -9.8f);

            //set debug draw
            World.DebugDrawer           = new PhysicsDebugDraw(new OpenGLDrawContext());
            World.DebugDrawer.DebugMode = DebugDrawModes.All;
            Debug.LogLine("Debug Draw Mode: {0}", World.DebugDrawer.DebugMode.ToString());

            Instance = World;
        }
        public ConcaveConvexCastDemoSimulation()
        {
            CollisionConfiguration = new DefaultCollisionConfiguration();
            Dispatcher             = new CollisionDispatcher(CollisionConfiguration);

            Broadphase = new AxisSweep3(_worldMin, _worldMax);

            World = new DiscreteDynamicsWorld(Dispatcher, Broadphase, null, CollisionConfiguration);
            World.SolverInfo.SplitImpulse = 1;

            _convexcastBatch = new ConvexcastBatch(40.0f, 0.0f, -10.0f, 80.0f);
            _callback        = new ClosestConvexResultCallback();

            CreateGround();
            CreateBoxes();
        }
Ejemplo n.º 26
0
        public VehicleDemoSimulation()
        {
            CollisionConfiguration = new DefaultCollisionConfiguration();
            Dispatcher             = new CollisionDispatcher(CollisionConfiguration);

            Vector3 worldMin = new Vector3(-10000, -10000, -10000);
            Vector3 worldMax = new Vector3(10000, 10000, 10000);

            Broadphase = new AxisSweep3(worldMin, worldMax);
            //Broadphase = new DbvtBroadphase();

            World = new DiscreteDynamicsWorld(Dispatcher, Broadphase, null, CollisionConfiguration);
            World.SetInternalTickCallback(PickingPreTickCallback, this, true);

            CreateScene();
        }
        protected override void OnInitializePhysics()
        {
            // collision configuration contains default setup for memory, collision setup
            CollisionConf = new DefaultCollisionConfiguration();
            Dispatcher    = new CollisionDispatcher(CollisionConf);

            Broadphase = new AxisSweep3(new Vector3(-1000, -1000, -1000), new Vector3(1000, 1000, 1000));
            Solver     = new SequentialImpulseConstraintSolver();

            World = new DiscreteDynamicsWorld(Dispatcher, Broadphase, Solver, CollisionConf);
            World.DispatchInfo.AllowedCcdPenetration = 0.0001f;
            //World.Gravity = Freelook.Up * -10.0f;

            Matrix startTransform = Matrix.Translation(10.210098f, -1.6433364f, 16.453260f);

            ghostObject = new PairCachingGhostObject();
            ghostObject.WorldTransform = startTransform;
            Broadphase.OverlappingPairCache.SetInternalGhostPairCallback(new GhostPairCallback());

            const float characterHeight = 1.75f;
            const float characterWidth  = 1.75f;
            ConvexShape capsule         = new CapsuleShape(characterWidth, characterHeight);

            ghostObject.CollisionShape = capsule;
            ghostObject.CollisionFlags = CollisionFlags.CharacterObject;

            const float stepHeight = 0.35f;

            character = new KinematicCharacterController(ghostObject, capsule, stepHeight);

            BspLoader bspLoader = new BspLoader();

            bspLoader.LoadBspFile("data/BspDemo.bsp");
            BspConverter bsp2Bullet = new BspToBulletConverter(this);

            bsp2Bullet.ConvertBsp(bspLoader, 0.1f);

            World.AddCollisionObject(ghostObject, CollisionFilterGroups.CharacterFilter, CollisionFilterGroups.StaticFilter | CollisionFilterGroups.DefaultFilter);

            World.AddAction(character);

            Vector3 zero = Vector3.Zero;

            convexResultCallback = new ClosestConvexResultCallback(ref zero, ref zero);
            convexResultCallback.CollisionFilterMask = (short)CollisionFilterGroups.StaticFilter;
            cameraSphere = new SphereShape(0.2f);
        }
Ejemplo n.º 28
0
        /*
         * void MyContactCallback(object sender, ContactAddedEventArgs e)
         * {
         *  if (e.CollisionObject0Wrapper.CollisionObject.CollisionShape.ShapeType == BroadphaseNativeType.CompoundShape)
         *  {
         *      CompoundShape compound = e.CollisionObject0Wrapper.CollisionObject.CollisionShape as CompoundShape;
         *      CollisionShape childShape = compound.GetChildShape(e.Index0);
         *  }
         *
         *  if (e.CollisionObject1Wrapper.CollisionObject.CollisionShape.ShapeType == BroadphaseNativeType.CompoundShape)
         *  {
         *      CompoundShape compound = e.CollisionObject1Wrapper.CollisionObject.CollisionShape as CompoundShape;
         *      CollisionShape childShape = compound.GetChildShape(e.Index1);
         *  }
         *
         *  e.IsContactModified = true;
         * }
         */

        public void SetupEmptyDynamicsWorld()
        {
            // collision configuration contains default setup for memory, collision setup
            CollisionConf = new DefaultCollisionConfiguration();
            Dispatcher    = new CollisionDispatcher(CollisionConf);
            Broadphase    = new AxisSweep3(new Vector3(-10000, -10000, -10000), new Vector3(10000, 10000, 10000));
            Solver        = new SequentialImpulseConstraintSolver();
            World         = new DiscreteDynamicsWorld(Dispatcher, Broadphase, Solver, CollisionConf);

            // create the ground
            CollisionShape groundShape = new BoxShape(30, 2, 30);

            CollisionShapes.Add(groundShape);
            CollisionObject ground = LocalCreateRigidBody(0, Matrix.Translation(0, -4.5f, 0), groundShape);

            ground.UserObject = "Ground";
        }
Ejemplo n.º 29
0
        protected override void OnInitializePhysics()
        {
            // collision configuration contains default setup for memory, collision setup
            CollisionConf = new DefaultCollisionConfiguration();
            Dispatcher    = new CollisionDispatcher(CollisionConf);

            Broadphase = new AxisSweep3(
                new Vector3(-1000, -1000, -1000),
                new Vector3(1000, 1000, 1000));

            World         = new DiscreteDynamicsWorld(Dispatcher, Broadphase, null, CollisionConf);
            World.Gravity = new Vector3(0, -10, 0);

            renderCallback = new DrawingResult(World);

            var boxA = new BoxShape(1.0f)
            {
                Margin = 0
            };
            var boxB = new BoxShape(0.5f)
            {
                Margin = 0
            };

            CollisionShapes.Add(boxA);
            CollisionShapes.Add(boxB);

            Quaternion rotA = new Quaternion(0.739f, -0.204f, 0.587f, 0.257f);

            rotA.Normalize();

            objectA = new CollisionObject
            {
                CollisionShape = boxA,
                WorldTransform = Matrix.RotationQuaternion(rotA) * Matrix.Translation(0, 3, 0)
            };
            objectB = new CollisionObject
            {
                CollisionShape = boxB,
                WorldTransform = Matrix.Translation(0, 4.248f, 0)
            };

            //World.AddCollisionObject(objectA);
            World.AddCollisionObject(objectB);
        }
Ejemplo n.º 30
0
        public MotorDemoSimulation()
        {
            CollisionConfiguration = new DefaultCollisionConfiguration();
            Dispatcher             = new CollisionDispatcher(CollisionConfiguration);

            var worldAabbMin = new Vector3(-10000, -10000, -10000);
            var worldAabbMax = new Vector3(10000, 10000, 10000);

            Broadphase = new AxisSweep3(worldAabbMin, worldAabbMax);

            World = new DiscreteDynamicsWorld(Dispatcher, Broadphase, null, CollisionConfiguration);
            World.SetInternalTickCallback(MotorPreTickCallback, this, true);

            CreateGround();

            SpawnTestRig(new Vector3(1, 0.5f, 0), false);
            SpawnTestRig(new Vector3(-2, 0.5f, 0), true);
        }