コード例 #1
0
        public PhysicsEngine()
        {
            //CreateSchedulers();
            //NextTaskScheduler();
            using (var collisionConfigurationInfo = new DefaultCollisionConstructionInfo
            {
                DefaultMaxPersistentManifoldPoolSize = 800,
                DefaultMaxCollisionAlgorithmPoolSize = 800
            })
            {
                collisionConf = new DefaultCollisionConfiguration(collisionConfigurationInfo);
            };
            dispatcher = new CollisionDispatcher(collisionConf);
            broadphase = new DbvtBroadphase();
            var solver = new SequentialImpulseConstraintSolver();

            //var Solver = new NncgConstraintSolver();
            //DiscreteDynamicsWorldMultiThreaded(dispatcher, broadphase, Solver, collisionConf);
            World = new DiscreteDynamicsWorld(dispatcher, broadphase, solver, collisionConf);

            //dispatcher = new CollisionDispatcherMultiThreaded(collisionConf);
            //Solver = new ConstraintSolverPoolMultiThreaded(MaxThreadCount);
            //World = new DiscreteDynamicsWorldMultiThreaded(dispatcher, broadphase, Solver, null, collisionConf);
            //World.SolverInfo.SolverMode = SolverModes.Simd | SolverModes.UseWarmStarting;

            //World = new DiscreteDynamicsWorldMultiThreaded(dispatcher, broadphase, cspm, csM, collisionConf);
            //World.Gravity = new Vector3(0, 0f, 0);
            // CreateFloor();
            //World.LatencyMotionStateInterpolation = false;

            //for character controllers
            broadphase.OverlappingPairCache.SetInternalGhostPairCallback(new GhostPairCallback());

            World.DebugDrawer = new PhysicsDebugDraw(World);
        }
コード例 #2
0
        public void Init(TgcSimpleTerrain terrain)
        {
            collisionConfiguration = new DefaultCollisionConfiguration();
            dispatcher             = new CollisionDispatcher(collisionConfiguration);
            GImpactCollisionAlgorithm.RegisterAlgorithm(dispatcher);
            constraintSolver      = new SequentialImpulseConstraintSolver();
            broadphaseInterface   = new DbvtBroadphase();
            dynamicsWorld         = new DiscreteDynamicsWorld(dispatcher, broadphaseInterface, constraintSolver, collisionConfiguration);
            dynamicsWorld.Gravity = gravity;

            var ballShape     = new SphereShape(50);
            var ballTransform = TGCMatrix.Identity;

            ballTransform.Origin = initialPosition;
            var ballMotionState = new DefaultMotionState(ballTransform.ToBsMatrix);
            var ballInertia     = ballShape.CalculateLocalInertia(1f);
            var ballInfo        = new RigidBodyConstructionInfo(1, ballMotionState, ballShape, ballInertia);

            RigidCamera = new RigidBody(ballInfo);
            RigidCamera.SetDamping(0.9f, 0.9f);

            //esto es para que no le afecte la gravedad al inicio de la partida
            //RigidCamera.ActivationState = ActivationState.IslandSleeping;
            dynamicsWorld.AddRigidBody(RigidCamera);

            var heighmapRigid = BulletRigidBodyFactory.Instance.CreateSurfaceFromHeighMap(terrain.getData());

            dynamicsWorld.AddRigidBody(heighmapRigid);
        }
コード例 #3
0
        public Physics()
        {
            CLStuff.InitCL();

            cloths = new Cloth[numFlags];
            for (int flagIndex = 0; flagIndex < numFlags; ++flagIndex)
            {
                cloths[flagIndex] = new Cloth();
                cloths[flagIndex].CreateBuffers(clothWidth, clothHeight);
            }


            gSolver        = new OpenCLSoftBodySolver(CLStuff.commandQueue, CLStuff.cxMainContext);
            softBodyOutput = new SoftBodySolverOutputCLToCpu();

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

            Broadphase = new DbvtBroadphase();
            Solver     = new SequentialImpulseConstraintSolver();

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

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

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

            ground.UserObject = "Ground";


            SoftWorld.WorldInfo.AirDensity   = 1.2f;
            SoftWorld.WorldInfo.WaterDensity = 0;
            SoftWorld.WorldInfo.WaterOffset  = 0;
            SoftWorld.WorldInfo.WaterNormal  = Vector3.Zero;
            SoftWorld.WorldInfo.Gravity      = new Vector3(0, -10, 0);


            CreateFlag(clothWidth, clothHeight, out flags);

            // Create output buffer descriptions for ecah flag
            // These describe where the simulation should send output data to
            for (int flagIndex = 0; flagIndex < flags.Count; ++flagIndex)
            {
                // flags[flagIndex].WindVelocity = new Vector3(0, 0, 15.0f);

                // In this case we have a DX11 output buffer with a vertex at index 0, 8, 16 and so on as well as a normal at 3, 11, 19 etc.
                // Copies will be performed GPU-side directly into the output buffer

                CpuVertexBufferDescriptor vertexBufferDescriptor = new CpuVertexBufferDescriptor(cloths[flagIndex].CpuBuffer, 0, 8, 3, 8);
                cloths[flagIndex].VertexBufferDescriptor = vertexBufferDescriptor;
            }

            gSolver.Optimize(SoftWorld.SoftBodyArray);

            World.StepSimulation(1.0f / 60.0f, 0);
        }
コード例 #4
0
ファイル: BspDemo.cs プロジェクト: nsaunders10/SoftBodyTests
        protected override void OnInitializePhysics()
        {
            // collision configuration contains default setup for memory, collision setup
            CollisionConf = new DefaultCollisionConfiguration();
            Dispatcher    = new CollisionDispatcher(CollisionConf);

            Broadphase = new DbvtBroadphase();
            Solver     = new SequentialImpulseConstraintSolver();

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

            BspLoader bspLoader = new BspLoader();

            //string[] args = Environment.GetCommandLineArgs();
            //if (args.Length == 1)
            //{
            UnityEngine.TextAsset bytes      = (UnityEngine.TextAsset)UnityEngine.Resources.Load("BspDemo");
            System.IO.Stream      byteStream = new System.IO.MemoryStream(bytes.bytes);
            bspLoader.LoadBspFile(byteStream);
            //}
            //else
            //{
            //    bspLoader.LoadBspFile(args[1]);
            //}
            BspConverter bsp2Bullet = new BspToBulletConverter(this);

            bsp2Bullet.ConvertBsp(bspLoader, 0.1f);
        }
コード例 #5
0
ファイル: BulletInit.cs プロジェクト: BigFun123/ParticleLab
        private void _worker_DoWork(object sender, DoWorkEventArgs e)
        {
            var conf       = new DefaultCollisionConfiguration();
            var dispatcher = new CollisionDispatcher(conf);
            var broadphase = new DbvtBroadphase();
            var Solver     = new SequentialImpulseConstraintSolver();

            //var Solver = new MultiBodyConstraintSolver();

            world         = new DiscreteDynamicsWorld(dispatcher, broadphase, Solver, conf);
            world.Gravity = new Vector3(0, 0, 0);
            world.SolverInfo.NumIterations   = 120;
            world.SolverInfo.SolverMode      = SolverModes.RandomizeOrder;
            world.DispatchInfo.UseContinuous = true;
            CreateParticles();
            CreateWalls();
            SetupDoubleSlit();

            while (_worker.CancellationPending == false)
            {
                world.StepSimulation(1.0f / 60.0f);

                for (int i = 0; i < Photons.Count; i++)
                {
                    RigidBody r = Photons[i];
                    r.ApplyCentralImpulse(new Vector3(5, 0, 0));
                }
            }
        }
コード例 #6
0
 /// <summary>
 /// コンストラクタ
 /// </summary>
 public DynamicsWorldFactory()
 {
     collisionConfiguration = new DefaultCollisionConfiguration();
     dispatcher             = new CollisionDispatcher(collisionConfiguration);
     overlappingPairCache   = new DbvtBroadphase();
     solver = new SequentialImpulseConstraintSolver();
 }
コード例 #7
0
        //----------------------------------------------------------------------------------------------


        public void InitialiseWorld(ref DiscreteDynamicsWorld world)
        {
            IndexedVector3       worldMin = new IndexedVector3(-1000, -1000, -1000);
            IndexedVector3       worldMax = -worldMin;
            IBroadphaseInterface bp       = new AxisSweep3Internal(ref worldMin, ref worldMax, 0xfffe, 0xffff, 16384, null, false);

            //m_broadphase = new DbvtBroadphase();
            IOverlappingPairCache pairCache = null;
            //pairCache = new SortedOverlappingPairCache();

            //m_broadphase = new SimpleBroadphase(1000, pairCache);

            ///the default constraint solver. For parallel processing you can use a different solver (see Extras/BulletMultiThreaded)
            SequentialImpulseConstraintSolver sol             = new SequentialImpulseConstraintSolver();
            DefaultCollisionConfiguration     collisionConfig = new DefaultCollisionConfiguration();

            ///use the default collision dispatcher. For parallel processing you can use a diffent dispatcher (see Extras/BulletMultiThreaded)
            CollisionDispatcher dispatcher = new CollisionDispatcher(collisionConfig);

            world = new DiscreteDynamicsWorld(dispatcher, bp, sol, collisionConfig);

            IndexedVector3 gravity = new IndexedVector3(0, -10, 0);

            world.SetGravity(ref gravity);
            world.SetDebugDrawer(BulletGlobals.gDebugDraw);
        }
コード例 #8
0
ファイル: Box2DDemo.cs プロジェクト: superowner/BulletSharp
        protected override void OnInitializePhysics()
        {
            // collision configuration contains default setup for memory, collision setup
            CollisionConf = new DefaultCollisionConfiguration();

            // Use the default collision dispatcher. For parallel processing you can use a diffent dispatcher.
            Dispatcher = new CollisionDispatcher(CollisionConf);

            var simplex  = new VoronoiSimplexSolver();
            var pdSolver = new MinkowskiPenetrationDepthSolver();

            var convexAlgo2D = new Convex2DConvex2DAlgorithm.CreateFunc(simplex, pdSolver);

            Dispatcher.RegisterCollisionCreateFunc(BroadphaseNativeType.Convex2DShape, BroadphaseNativeType.Convex2DShape, convexAlgo2D);
            Dispatcher.RegisterCollisionCreateFunc(BroadphaseNativeType.Box2DShape, BroadphaseNativeType.Convex2DShape, convexAlgo2D);
            Dispatcher.RegisterCollisionCreateFunc(BroadphaseNativeType.Convex2DShape, BroadphaseNativeType.Box2DShape, convexAlgo2D);
            Dispatcher.RegisterCollisionCreateFunc(BroadphaseNativeType.Box2DShape, BroadphaseNativeType.Box2DShape, new Box2DBox2DCollisionAlgorithm.CreateFunc());

            Broadphase = new DbvtBroadphase();

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

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

            CreateGround();
            Create2dBodies();
        }
コード例 #9
0
        public void Init(string MediaDir)
        {
            //Creamos el mundo fisico por defecto.
            collisionConfiguration = new DefaultCollisionConfiguration();
            dispatcher             = new CollisionDispatcher(collisionConfiguration);
            GImpactCollisionAlgorithm.RegisterAlgorithm(dispatcher);
            constraintSolver      = new SequentialImpulseConstraintSolver();
            overlappingPairCache  = new DbvtBroadphase(); //AxisSweep3(new BsVector3(-5000f, -5000f, -5000f), new BsVector3(5000f, 5000f, 5000f), 8192);
            dynamicsWorld         = new DiscreteDynamicsWorld(dispatcher, overlappingPairCache, constraintSolver, collisionConfiguration);
            dynamicsWorld.Gravity = new TGCVector3(0, -100f, 0).ToBulletVector3();

            //Creamos el terreno
            var meshRigidBody = BulletRigidBodyFactory.Instance.CreateSurfaceFromHeighMap(triangleDataVB);

            dynamicsWorld.AddRigidBody(meshRigidBody);

            //Creamos la esfera del dragon
            dragonBall = BulletRigidBodyFactory.Instance.CreateBall(30f, 0.75f, new TGCVector3(100f, 500f, 100f));
            dragonBall.SetDamping(0.1f, 0.5f);
            dragonBall.Restitution = 1f;
            dragonBall.Friction    = 1;
            dynamicsWorld.AddRigidBody(dragonBall);
            var textureDragonBall = TgcTexture.createTexture(D3DDevice.Instance.Device, MediaDir + @"Texturas\dragonball.jpg");

            sphereMesh = new TGCSphere(1, textureDragonBall, TGCVector3.Empty);
            sphereMesh.updateValues();
            director = new TGCVector3(1, 0, 0);
        }
コード例 #10
0
        public override void InitializeDemo()
        {
            //	std::cerr << "initializing...\n";

            m_nearClip = 1f;
            m_farClip  = 1000f;

            m_aspect      = m_glutScreenWidth / m_glutScreenHeight;
            m_perspective = IndexedMatrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(40.0f), m_aspect, m_nearClip, m_farClip);


            // set up basic state
            m_upAxis    = 1;                     // start with Y-axis as "up"
            m_type      = PHY_ScalarType.PHY_FLOAT;
            m_model     = eTerrainModel.eRadial; //eFractal;
            m_isDynamic = true;

            // set up the physics world
            m_collisionConfiguration = new DefaultCollisionConfiguration();
            m_dispatcher             = new CollisionDispatcher(m_collisionConfiguration);
            IndexedVector3 worldMin = new IndexedVector3(-1000, -1000, -1000);
            IndexedVector3 worldMax = new IndexedVector3(1000, 1000, 1000);

            //m_broadphase = new AxisSweep3Internal(ref worldMin,ref worldMax);
            m_broadphase = new AxisSweep3Internal(ref worldMin, ref worldMax, 0xfffe, 0xffff, 16384, null, false);

            m_constraintSolver = new SequentialImpulseConstraintSolver();
            m_dynamicsWorld    = new DiscreteDynamicsWorld(m_dispatcher, m_broadphase, m_constraintSolver, m_collisionConfiguration);

            // initialize axis- or type-dependent physics from here
            ClientResetScene();
        }
コード例 #11
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);
        }
コード例 #12
0
        ///this btDiscreteDynamicsWorld constructor gets created objects from the user, and will not delete those
        public DiscreteDynamicsWorld(IDispatcher dispatcher, IBroadphaseInterface pairCache, IConstraintSolver constraintSolver, ICollisionConfiguration collisionConfiguration)
            : base(dispatcher, pairCache, collisionConfiguration)
        {
            m_ownsIslandManager        = true;
            m_constraints              = new ObjectArray <TypedConstraint>();
            m_sortedConstraints        = new ObjectArray <TypedConstraint>();
            m_islandSortPredicate      = new SortConstraintOnIslandPredicate();
            m_islandQuickSortPredicate = new QuickSortConstraintOnIslandPredicate();
            m_actions = new List <IActionInterface>();
            m_nonStaticRigidBodies = new ObjectArray <RigidBody>();
            m_islandManager        = new SimulationIslandManager();
            m_constraintSolver     = constraintSolver;

            IndexedVector3 gravity = new IndexedVector3(0, -10, 0);

            SetGravity(ref gravity);
            m_localTime                  = 0f;
            m_profileTimings             = 0;
            m_synchronizeAllMotionStates = false;

            if (m_constraintSolver == null)
            {
                m_constraintSolver     = new SequentialImpulseConstraintSolver();
                m_ownsConstraintSolver = true;
            }
            else
            {
                m_ownsConstraintSolver = false;
            }
        }
コード例 #13
0
        public void Init()
        {
            #region MUNDO //Creamos el mundo fisico por defecto.

            collisionConfiguration = new DefaultCollisionConfiguration();
            dispatcher             = new CollisionDispatcher(collisionConfiguration);

            GImpactCollisionAlgorithm.RegisterAlgorithm(dispatcher);
            constraintSolver     = new SequentialImpulseConstraintSolver();
            overlappingPairCache = new DbvtBroadphase();
            dynamicsWorld        = new DiscreteDynamicsWorld(dispatcher, overlappingPairCache, constraintSolver, collisionConfiguration)
            {
                Gravity = new TGCVector3(0, -20f, 0).ToBsVector
            };

            #endregion

            #region PISO
            var d3dDevice = D3DDevice.Instance.Device;

            //El piso es un plano estatico se dice que si tiene masa 0 es estatico.
            var floorShape       = new StaticPlaneShape(TGCVector3.Up.ToBsVector, 0);
            var floorMotionState = new DefaultMotionState();// Matrix.Translation(0f, 200f, -700f));//esto puede ir sin parametro y funciona
            var floorInfo        = new RigidBodyConstructionInfo(0, floorMotionState, floorShape);
            floorBody = new RigidBody(floorInfo);
            dynamicsWorld.AddRigidBody(floorBody);

            //Cargamos objetos de render del framework.
            //var floorTexture = TgcTexture.createTexture(d3dDevice, GameModel.mediaDir + "texturas\\terrain\\TerrainTexture1.jpg");
            //floorMesh = new TgcPlane(new TGCVector3(0, 0, 0), new TGCVector3(400, 0f, 400), TgcPlane.Orientations.XZplane, floorTexture);
            #endregion
        }
コード例 #14
0
ファイル: MotorDemo.cs プロジェクト: diqost/bullet
        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);
        }
コード例 #15
0
        public FisicaMundo()
        {
            //Implementación Iniciales
            collisionConfiguration = new DefaultCollisionConfiguration();
            dispatcher             = new CollisionDispatcher(collisionConfiguration);
            GImpactCollisionAlgorithm.RegisterAlgorithm(dispatcher);
            constraintSolver     = new SequentialImpulseConstraintSolver();
            overlappingPairCache = new DbvtBroadphase();
            dynamicsWorld        = new DiscreteDynamicsWorld(dispatcher, overlappingPairCache, constraintSolver, collisionConfiguration)
            {
                Gravity = new TGCVector3(0, -10f, 0).ToBulletVector3()
            };


            var cuerpoPiso = new StaticPlaneShape(TGCVector3.Up.ToBulletVector3(), 0)
            {
                LocalScaling = new TGCVector3().ToBulletVector3()
            };
            MotionState movimientoPiso = new DefaultMotionState();

            piso = new RigidBody(new RigidBodyConstructionInfo(0, movimientoPiso, cuerpoPiso))
            {
                RollingFriction = 0.3f,
                Restitution     = 0.4f,
                UserObject      = "floorBody"
            };
            dynamicsWorld.AddRigidBody(piso);
        }
コード例 #16
0
ファイル: Physics.cs プロジェクト: diqost/bullet
        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();
        }
コード例 #17
0
        protected override void OnInitializePhysics()
        {
            shootBoxInitialSpeed = 4000;

            // collision configuration contains default setup for memory, collision setup
            CollisionConf = new DefaultCollisionConfiguration();

            Dispatcher = new CollisionDispatcher(CollisionConf);
            //Dispatcher.RegisterCollisionCreateFunc(BroadphaseNativeType.BoxShape, BroadphaseNativeType.BoxShape,
            //    CollisionConf.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.ConvexShape, BroadphaseNativeType.ConvexShape));

            Broadphase = new DbvtBroadphase();

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

            World = new DiscreteDynamicsWorld(Dispatcher, Broadphase, Solver, CollisionConf);
            World.SolverInfo.SolverMode |= SolverModes.Use2FrictionDirections | SolverModes.RandomizeOrder;
            //World.SolverInfo.SplitImpulse = 0;
            World.SolverInfo.NumIterations = 20;

            World.DispatchInfo.UseContinuous = ccdMode;

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

            CreateGround();
            CreateBoxStack();
        }
コード例 #18
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]();
        }
コード例 #19
0
        public override void InitializeDemo()
        {
            base.InitializeDemo();
            SetCameraDistance(SCALING * 50f);

            //string filename = @"C:\users\man\bullett\xna-largemesh-output.txt";
            //FileStream filestream = File.Open(filename, FileMode.Create, FileAccess.Write, FileShare.Read);
            //BulletGlobals.g_streamWriter = new StreamWriter(filestream);

            ///collision configuration contains default setup for memory, collision setup
            m_collisionConfiguration = new DefaultCollisionConfiguration();

            ///use the default collision dispatcher. For parallel processing you can use a diffent dispatcher (see Extras/BulletMultiThreaded)
            m_dispatcher = new CollisionDispatcher(m_collisionConfiguration);

            m_broadphase = new DbvtBroadphase();
            IOverlappingPairCache pairCache = null;
            //pairCache = new SortedOverlappingPairCache();

            //m_broadphase = new SimpleBroadphase(10000, pairCache);

            ///the default constraint solver. For parallel processing you can use a different solver (see Extras/BulletMultiThreaded)
            SequentialImpulseConstraintSolver sol = new SequentialImpulseConstraintSolver();

            m_constraintSolver = sol;

            m_dynamicsWorld = new DiscreteDynamicsWorld(m_dispatcher, m_broadphase, m_constraintSolver, m_collisionConfiguration);

            IndexedVector3 gravity = new IndexedVector3(0, -10, 0);

            m_dynamicsWorld.SetGravity(ref gravity);

            m_profileManager = new BasicProfileManager();
            BulletGlobals.g_profileManager = m_profileManager;
            m_profileIterator = m_profileManager.getIterator();

            ///create a few basic rigid bodies
            IndexedVector3 halfExtents = new IndexedVector3(50, 50, 50);
            //IndexedVector3 halfExtents = new IndexedVector3(10, 10, 10);
            //CollisionShape groundShape = new BoxShape(ref halfExtents);
            CollisionShape groundShape = new StaticPlaneShape(new IndexedVector3(0, 1, 0), 0);

            LocalCreateRigidBody(0f, IndexedMatrix.Identity, groundShape);
            //CollisionShape groundShape = BuildLargeMesh();
            m_collisionShapes.Add(groundShape);
            CollisionShape sphereShape = new SphereShape(0.2f);
            int            size        = 16;// 5; // 16

            for (int i = 0; i < size; ++i)
            {
                for (int j = 0; j < size; ++j)
                {
                    IndexedMatrix m  = IndexedMatrix.CreateTranslation(new IndexedVector3(i, 1, j));
                    RigidBody     rb = LocalCreateRigidBody(1f, m, sphereShape);
                    rb.SetActivationState(ActivationState.ISLAND_SLEEPING);
                }
            }

            ClientResetScene();
        }
コード例 #20
0
    //
    // Overridden Unity methods.
    //

    // Use this for initialization
    void Start()
    {
        // unity stepping params
        SetStepSize(simStepSize);
        SetTimeScale(simTimeScale);

        // set up members
        m_collisionShapes = new List <CollisionShape>();
        m_createdObjs     = new List <GameObject>();

        // set up the dynamics world
        // collision configuration contains default setup for memory, collision setup
        m_colConfig     = new DefaultCollisionConfiguration();
        m_colDispatcher = new CollisionDispatcher(m_colConfig);
        m_broadphase    = new DbvtBroadphase();
//		new AxisSweep3_32Bit(new Vector3(-10000, -10000, -10000), new Vector3(10000, 10000, 10000), 1024);
        m_solver = new SequentialImpulseConstraintSolver();

        m_world         = new DiscreteDynamicsWorld(m_colDispatcher, m_broadphase, m_solver, m_colConfig);
        m_world.Gravity = new BulletSharp.Math.Vector3(0, -9.8f, 0);

        // set up simulation
        InitSim();

        // Debug Draw for collision boundaries
        DebugDrawUnity m_debugDrawer = new DebugDrawUnity();

        m_debugDrawer.DebugMode = DebugDrawModes.DrawWireframe;
        m_world.DebugDrawer     = m_debugDrawer;
    }
コード例 #21
0
        protected override void OnInitializePhysics()
        {
            // collision configuration contains default setup for memory, collision setup
            CollisionConf = new DefaultCollisionConfiguration();
            Dispatcher    = new CollisionDispatcher(CollisionConf);

            Broadphase = new DbvtBroadphase();
            Solver     = new SequentialImpulseConstraintSolver();

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

            var bspLoader = new BspLoader();

            string[] args = Environment.GetCommandLineArgs();
            if (args.Length == 1)
            {
                bspLoader.LoadBspFile(Path.Combine("data", "BspDemo.bsp"));
            }
            else
            {
                bspLoader.LoadBspFile(args[1]);
            }
            BspConverter bsp2Bullet = new BspToBulletConverter(this);

            bsp2Bullet.ConvertBsp(bspLoader, 0.1f);
        }
コード例 #22
0
ファイル: SoftDemo.cs プロジェクト: superowner/BulletSharp
        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();
        }
コード例 #23
0
ファイル: RagdollDemo.cs プロジェクト: slavslav/BulletSharp
        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));
        }
コード例 #24
0
        public void Create()
        {
            if (created)
            {
                this.Destroy();
            }

            this.bodyindex = 0;
            this.cstindex  = 0;

            collisionConfiguration = new SoftBodyRigidBodyCollisionConfiguration();
            dispatcher             = new CollisionDispatcher(collisionConfiguration);
            solver = new SequentialImpulseConstraintSolver();
            overlappingPairCache = new DbvtBroadphase();
            dynamicsWorld        = new SoftRigidDynamicsWorld(dispatcher, overlappingPairCache, solver, collisionConfiguration);
            worldInfo            = new SoftBodyWorldInfo();
            worldInfo.Gravity    = dynamicsWorld.Gravity;
            worldInfo.Broadphase = overlappingPairCache;
            worldInfo.Dispatcher = dispatcher;
            worldInfo.SparseSdf.Initialize();
            this.created = true;

            if (this.WorldHasReset != null)
            {
                this.WorldHasReset();
            }
        }
コード例 #25
0
 public void CreateWorld()
 {
     colConf       = new DefaultCollisionConfiguration();
     colDispatcher = new CollisionDispatcher(colConf);
     broadPhase    = new DbvtBroadphase();
     solver        = new SequentialImpulseConstraintSolver();
     world         = new DiscreteDynamicsWorld(colDispatcher, broadPhase, solver, colConf);
 }
コード例 #26
0
 public void SetUp()
 {
     _conf       = new DefaultCollisionConfiguration();
     _dispatcher = new CollisionDispatcher(_conf);
     _broadphase = new DbvtBroadphase();
     _solver     = new SequentialImpulseConstraintSolver();
     _world      = new DiscreteDynamicsWorld(_dispatcher, _broadphase, _solver, _conf);
 }
コード例 #27
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);
 }
コード例 #28
0
        public void Create()
        {
            var bp         = new DbvtBroadphase();
            var conf       = new DefaultCollisionConfiguration();
            var dispatcher = new CollisionDispatcher(conf);
            var solver     = new SequentialImpulseConstraintSolver();

            world = new DiscreteDynamicsWorld(dispatcher, bp, solver, conf);
        }
コード例 #29
0
 void SetupEmptyDynamicsWorld()
 {
     CollisionConf = new DefaultCollisionConfiguration();
     Dispatcher    = new CollisionDispatcher(CollisionConf);
     Broadphase    = new DbvtBroadphase();
     Solver        = new SequentialImpulseConstraintSolver();
     World         = new DiscreteDynamicsWorld(Dispatcher, Broadphase, Solver, CollisionConf);
     World.Gravity = new Vector3(0, -10, 0);
 }
コード例 #30
0
        public override void InitializeDemo()
        {
            //string filename = @"C:\users\man\bullet\xna-motor-output.txt";
            //FileStream filestream = File.Open(filename, FileMode.Create, FileAccess.Write, FileShare.Read);
            //BulletGlobals.g_streamWriter = new StreamWriter(filestream);


            m_Time         = 0;
            m_fCyclePeriod = 2000.0f;             // in milliseconds

            // new SIMD solver for joints clips accumulated impulse, so the new limits for the motor
            // should be (numberOfsolverIterations * oldLimits)
            // currently solver uses 10 iterations, so:
            m_fMuscleStrength = 0.5f;

            SetCameraDistance(5.0f);

            m_collisionConfiguration = new DefaultCollisionConfiguration();

            m_dispatcher = new CollisionDispatcher(m_collisionConfiguration);

            m_broadphase = new DbvtBroadphase();
            IOverlappingPairCache pairCache = null;


            m_broadphase = new SimpleBroadphase(1000, pairCache);

            SequentialImpulseConstraintSolver sol = new SequentialImpulseConstraintSolver();

            m_constraintSolver = sol;

            m_dynamicsWorld = new DiscreteDynamicsWorld(m_dispatcher, m_broadphase, m_constraintSolver, m_collisionConfiguration);

            IndexedVector3 gravity = new IndexedVector3(0, -10, 0);

            m_dynamicsWorld.SetGravity(ref gravity);

            m_dynamicsWorld.SetInternalTickCallback(new MotorPreTickCallback(), this, true);


            // Setup a big ground box
            {
                CollisionShape groundShape = new BoxShape(new IndexedVector3(200.0f, 10.0f, 200.0f));
                m_collisionShapes.Add(groundShape);
                IndexedMatrix groundTransform = IndexedMatrix.CreateTranslation(0, -10, 0);
                LocalCreateRigidBody(0f, ref groundTransform, groundShape);
            }

            // Spawn one ragdoll
            IndexedVector3 startOffset = new IndexedVector3(1, 0.5f, 0);

            SpawnTestRig(ref startOffset, false);
            startOffset = new IndexedVector3(-2, 0.5f, 0);
            SpawnTestRig(ref startOffset, true);

            ClientResetScene();
        }