//protected void SolveNonContactConstraints(ContactSolverInfo solverInfo)
        //{
        //    //constraint preparation: building jacobians
        //    for (int i = 0; i < _constraints.Count; i++)
        //    {
        //        TypedConstraint constraint = _constraints[i];
        //        constraint.BuildJacobian();
        //    }

        //    //solve the regular non-contact constraints (point 2 point, hinge, generic d6)
        //    for (int g = 0; g < solverInfo.IterationsCount; g++)
        //    {
        //        for (int i = 0; i < _constraints.Count; i++)
        //        {
        //            TypedConstraint constraint = _constraints[i];
        //            constraint.SolveConstraint(solverInfo.TimeStep);
        //        }
        //    }
        //}

        //protected void SolveContactConstraints(ContactSolverInfo solverInfo)
        //{
        //    InplaceSolverIslandCallback solverCallback = new InplaceSolverIslandCallback(solverInfo, _constraintSolver, _debugDrawer);

        //    // solve all the contact points and contact friction
        //    _islandManager.BuildAndProcessIslands(Dispatcher, CollisionObjects, solverCallback);
        //}

        protected void SolveConstraints(ContactSolverInfo solverInfo)
        {
            //sorted version of all btTypedConstraint, based on islandId
            List <TypedConstraint> sortedConstraints = new List <TypedConstraint>(ConstraintsCount);

            for (int i = 0; i < ConstraintsCount; i++)
            {
                sortedConstraints.Add(_constraints[i]);
            }

            sortedConstraints.Sort(new Comparison <TypedConstraint>(TypedConstraint.SortConstraintOnIslandPredicate));
            List <TypedConstraint> constraintsPtr = ConstraintsCount != 0 ? sortedConstraints : new List <TypedConstraint>();

            InplaceSolverIslandCallback solverCallback = new InplaceSolverIslandCallback(solverInfo, _constraintSolver, constraintsPtr, _debugDrawer);

            // solve all the constraints for this island
            _islandManager.BuildAndProcessIslands(CollisionWorld.Dispatcher, CollisionWorld.CollisionObjects, solverCallback);
        }
Пример #2
0
        //protected void SolveNonContactConstraints(ContactSolverInfo solverInfo)
        //{
        //    //constraint preparation: building jacobians
        //    for (int i = 0; i < _constraints.Count; i++)
        //    {
        //        TypedConstraint constraint = _constraints[i];
        //        constraint.BuildJacobian();
        //    }
        //    //solve the regular non-contact constraints (point 2 point, hinge, generic d6)
        //    for (int g = 0; g < solverInfo.IterationsCount; g++)
        //    {
        //        for (int i = 0; i < _constraints.Count; i++)
        //        {
        //            TypedConstraint constraint = _constraints[i];
        //            constraint.SolveConstraint(solverInfo.TimeStep);
        //        }
        //    }
        //}
        //protected void SolveContactConstraints(ContactSolverInfo solverInfo)
        //{
        //    InplaceSolverIslandCallback solverCallback = new InplaceSolverIslandCallback(solverInfo, _constraintSolver, _debugDrawer);
        //    // solve all the contact points and contact friction
        //    _islandManager.BuildAndProcessIslands(Dispatcher, CollisionObjects, solverCallback);
        //}
        protected void SolveConstraints(ContactSolverInfo solverInfo)
        {
            //sorted version of all btTypedConstraint, based on islandId
            List<TypedConstraint> sortedConstraints = new List<TypedConstraint>(ConstraintsCount);

            for (int i = 0; i < ConstraintsCount; i++)
            {
                sortedConstraints.Add(_constraints[i]);
            }

            sortedConstraints.Sort(new Comparison<TypedConstraint>(TypedConstraint.SortConstraintOnIslandPredicate));
            List<TypedConstraint> constraintsPtr = ConstraintsCount != 0 ? sortedConstraints : new List<TypedConstraint>();

            InplaceSolverIslandCallback solverCallback = new InplaceSolverIslandCallback(solverInfo, _constraintSolver, constraintsPtr,  _debugDrawer);

            // solve all the constraints for this island
            _islandManager.BuildAndProcessIslands(CollisionWorld.Dispatcher, CollisionWorld.CollisionObjects, solverCallback);
        }
Пример #3
0
		internal void Initialize( btDispatcher dispatcher, btBroadphaseInterface pairCache, btConstraintSolver constraintSolver, btCollisionConfiguration collisionConfiguration )
		{
			base.Initialize( dispatcher, pairCache, collisionConfiguration );
			m_solverIslandCallback = null;
			m_constraintSolver = ( constraintSolver );
			m_gravity = new btVector3( 0, -10, 0 );
			m_localTime = ( 0 );
			m_fixedTimeStep = ( 0 );
			m_synchronizeAllMotionStates = ( false );
			m_applySpeculativeContactRestitution = ( false );
			m_latencyMotionStateInterpolation = ( true );

			if( m_constraintSolver == null )
			{
				m_constraintSolver = new btSequentialImpulseConstraintSolver();
				m_ownsConstraintSolver = true;
			}
			else
			{
				m_ownsConstraintSolver = false;
			}

			m_islandManager = new btSimulationIslandManager();

			m_ownsIslandManager = true;

			m_solverIslandCallback = new InplaceSolverIslandCallback( m_constraintSolver, dispatcher );
		}
Пример #4
0
			InplaceSolverIslandCallback( InplaceSolverIslandCallback other )
			{
				Debug.Assert( false );
				//(void)other;
				//return *this;

			}