//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); }
//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); }
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 ); }
InplaceSolverIslandCallback( InplaceSolverIslandCallback other ) { Debug.Assert( false ); //(void)other; //return *this; }