示例#1
0
        public override void ShootBox(Vector3 camPos, Vector3 destination)
        {
            if (World != null)
            {
                const float mass = 1.0f;

                if (shootBoxShape == null)
                {
                    shootBoxShape = new BoxShape(1.0f);
                    shootBoxShape.InitializePolyhedralFeatures();
                }

                RigidBody body = LocalCreateRigidBody(mass, Matrix.Translation(camPos), shootBoxShape);
                body.LinearFactor = new Vector3(1, 1, 1);
                //body->setRestitution(1);

                Vector3 linVel = destination - camPos;
                linVel.Normalize();
                body.LinearVelocity             = linVel * shootBoxInitialSpeed;
                body.AngularVelocity            = Vector3.Zero;
                body.ContactProcessingThreshold = 1e30f;

                // when using m_ccdMode, disable regular CCD
                if (ccdMode)
                {
                    body.CcdMotionThreshold   = 0.0001f;
                    body.CcdSweptSphereRadius = 0.4f;
                }
            }
        }
示例#2
0
        public virtual void ShootBox(Vector3 camPos, Vector3 destination)
        {
            if (_world == null)
            {
                return;
            }

            float mass = 1.0f;

            if (shootBoxShape == null)
            {
                shootBoxShape = new BoxShape(1.0f);
                shootBoxShape.InitializePolyhedralFeatures();
            }

            RigidBody body = LocalCreateRigidBody(mass, Matrix.Translation(camPos), shootBoxShape);

            body.LinearFactor = new Vector3(1, 1, 1);
            //body.Restitution = 1;

            Vector3 linVel = destination - camPos;

            linVel.Normalize();

            body.LinearVelocity       = linVel * shootBoxInitialSpeed;
            body.CcdMotionThreshold   = 0.5f;
            body.CcdSweptSphereRadius = 0.9f;
        }
        public void ShootBox(Vector3 camPos, Vector3 destination)
        {
            const float mass = 1.0f;

            if (_shootBoxShape == null)
            {
                _shootBoxShape = new BoxShape(0.5f);
                _shootBoxShape.InitializePolyhedralFeatures();
            }

            RigidBody body = PhysicsHelper.CreateBody(mass, Matrix.Translation(camPos), _shootBoxShape, World);

            body.LinearFactor = new Vector3(0.5f);
            //body.Restitution = 1;

            Vector3 linVel = destination - camPos;

            linVel.Normalize();
            body.LinearVelocity             = linVel * ShootBoxInitialSpeed;
            body.AngularVelocity            = Vector3.Zero;
            body.ContactProcessingThreshold = 1e30f;

            // when using CCD mode, disable regular CCD
            if (_ccdEnabled)
            {
                body.CcdMotionThreshold   = 0.00005f;
                body.CcdSweptSphereRadius = 0.2f;
            }
        }
        private void CreateGround()
        {
            var ground = new BoxShape(100, 0.5f, 100);

            ground.InitializePolyhedralFeatures();
            RigidBody body = PhysicsHelper.CreateStaticBody(Matrix.Identity, ground, World);

            body.Friction = 0.5f;
            //body.RollingFriction = 0.3f;
            body.UserObject = "Ground";
        }
示例#5
0
        private void CreateGround()
        {
            BoxShape ground = new BoxShape(200, 1, 200);

            ground.InitializePolyhedralFeatures();
            RigidBody body = LocalCreateRigidBody(0, Matrix.Identity, ground);

            body.Friction = 0.5f;
            //body.RollingFriction = 0.3f;
            body.UserObject = "Ground";
        }
示例#6
0
        protected override void OnInitializePhysics()
        {
            int i;

            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);

            BoxShape ground = new BoxShape(200, 1, 200);

            ground.InitializePolyhedralFeatures();
            CollisionShapes.Add(ground);
            RigidBody body = LocalCreateRigidBody(0, Matrix.Identity, ground);

            body.Friction = 0.5f;
            //body.RollingFriction = 0.3f;
            body.UserObject = "Ground";

            //CollisionShape shape = new CylinderShape(CubeHalfExtents, CubeHalfExtents, CubeHalfExtents);
            CollisionShape shape = new BoxShape(CubeHalfExtents, CubeHalfExtents, CubeHalfExtents);

            CollisionShapes.Add(shape);

            const int numObjects = 120;

            for (i = 0; i < numObjects; i++)
            {
                //stack them
                const int colsize = 10;
                int       row     = (int)((i * CubeHalfExtents * 2) / (colsize * 2 * CubeHalfExtents));
                int       row2    = row;
                int       col     = (i) % (colsize) - colsize / 2;

                if (col > 3)
                {
                    col   = 11;
                    row2 |= 1;
                }

                Matrix trans = Matrix.Translation(col * 2 * CubeHalfExtents + (row2 % 2) * CubeHalfExtents,
                                                  row * 2 * CubeHalfExtents + CubeHalfExtents + ExtraHeight, 0);

                body = LocalCreateRigidBody(1, trans, shape);
                body.SetAnisotropicFriction(shape.AnisotropicRollingFrictionDirection, AnisotropicFrictionFlags.AnisotropicRollingFriction);
                body.Friction = 0.5f;
                //body.RollingFriction = 0.3f;

                if (ccdMode)
                {
                    body.CcdMotionThreshold   = 1e-7f;
                    body.CcdSweptSphereRadius = 0.9f * CubeHalfExtents;
                }
            }
        }