Revision: 20442
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20442
Author:   erwin
Date:     2009-05-27 03:29:41 +0200 (Wed, 27 May 2009)

Log Message:
-----------
"Motor at limit" jitter fixed for btGeneric6Dof constraint, fix taken from 
Bullet SVN repo.

Now we need some cool constraint limit/motor/spring demos, such as a Forklift 
demo, moving robots, ragdolls etc. for Blender 2.49!

Modified Paths:
--------------
    
trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.cpp
    
trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.h

Modified: 
trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.cpp
===================================================================
--- 
trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.cpp
        2009-05-27 00:07:03 UTC (rev 20441)
+++ 
trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.cpp
        2009-05-27 01:29:41 UTC (rev 20442)
@@ -420,6 +420,7 @@
 bool btGeneric6DofConstraint::testAngularLimitMotor(int axis_index)
 {
        btScalar angle = m_calculatedAxisAngleDiff[axis_index];
+       m_angularLimits[axis_index].m_currentPosition = angle;
        //test limits
        m_angularLimits[axis_index].testLimitValue(angle);
        return m_angularLimits[axis_index].needApplyTorques();
@@ -544,6 +545,7 @@
                { // re-use rotational motor code
                        limot.m_bounce = btScalar(0.f);
                        limot.m_currentLimit = m_linearLimits.m_currentLimit[i];
+                       limot.m_currentPosition = 
m_linearLimits.m_currentLinearDiff[i];
                        limot.m_currentLimitError  = 
m_linearLimits.m_currentLimitError[i];
                        limot.m_damping  = m_linearLimits.m_damping;
                        limot.m_enableMotor  = m_linearLimits.m_enableMotor[i];
@@ -696,6 +698,7 @@
        m_calculatedLinearDiff = m_calculatedTransformA.getBasis().inverse() * 
m_calculatedLinearDiff;
        for(int i = 0; i < 3; i++)
        {
+               m_linearLimits.m_currentLinearDiff[i] = 
m_calculatedLinearDiff[i];
                m_linearLimits.testLimitValue(i, m_calculatedLinearDiff[i]);
        }
 }
@@ -740,16 +743,21 @@
         }
         // if we're limited low and high simultaneously, the joint motor is
         // ineffective
-        if (limit && (limot->m_loLimit == limot->m_hiLimit)) 
-                       powered = 0;
-
+        if (limit && (limot->m_loLimit == limot->m_hiLimit)) powered = 0;
         info->m_constraintError[srow] = btScalar(0.f);
         if (powered)
         {
             info->cfm[srow] = 0.0f;
-            if(!limit)
+//            if(!limit)
             {
-                info->m_constraintError[srow] += limot->m_targetVelocity;
+                               btScalar tag_vel = rotational ? 
limot->m_targetVelocity : -limot->m_targetVelocity;
+
+                               btScalar mot_fact = getMotorFactor(     
limot->m_currentPosition, 
+                                                                               
                        limot->m_loLimit,
+                                                                               
                        limot->m_hiLimit, 
+                                                                               
                        tag_vel, 
+                                                                               
                        info->fps * info->erp);
+                               info->m_constraintError[srow] += mot_fact * 
limot->m_targetVelocity;
                 info->m_lowerLimit[srow] = -limot->m_maxMotorForce;
                 info->m_upperLimit[srow] = limot->m_maxMotorForce;
             }
@@ -831,6 +839,7 @@
 
 
 
+
 btGeneric6DofSpringConstraint::btGeneric6DofSpringConstraint(btRigidBody& rbA, 
btRigidBody& rbB, const btTransform& frameInA, const btTransform& frameInB 
,bool useLinearReferenceFrameA)
        : btGeneric6DofConstraint(rbA, rbB, frameInA, frameInB, 
useLinearReferenceFrameA)
 {

Modified: 
trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.h
===================================================================
--- 
trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.h
  2009-05-27 00:07:03 UTC (rev 20441)
+++ 
trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.h
  2009-05-27 01:29:41 UTC (rev 20442)
@@ -54,6 +54,7 @@
     //! temp_variables
     //!...@{
     btScalar m_currentLimitError;//!  How much is violated this limit
+    btScalar m_currentPosition;     //!  current value of angle 
     int m_currentLimit;//!< 0=free, 1=at lo limit, 2=at hi limit
     btScalar m_accumulatedImpulse;
     //!...@}
@@ -134,6 +135,7 @@
     btVector3  m_targetVelocity;//!< target motor velocity
     btVector3  m_maxMotorForce;//!< max force on motor
     btVector3  m_currentLimitError;//!  How much is violated this limit
+    btVector3  m_currentLinearDiff;//!  Current relative offset of constraint 
frames
     int                        m_currentLimit[3];//!< 0=free, 1=at lower 
limit, 2=at upper limit
 
     btTranslationalLimitMotor()
@@ -478,6 +480,16 @@
 };
 
 
+/// Generic 6 DOF constraint that allows to set spring motors to any 
translational and rotational DOF
+
+/// DOF index used in enableSpring() and setStiffness() means:
+/// 0 : translation X
+/// 1 : translation Y
+/// 2 : translation Z
+/// 3 : rotation X (3rd Euler rotational around new position of X axis, range 
[-PI+epsilon, PI-epsilon] )
+/// 4 : rotation Y (2nd Euler rotational around new position of Y axis, range 
[-PI/2+epsilon, PI/2-epsilon] )
+/// 5 : rotation Z (1st Euler rotational around Z axis, range [-PI+epsilon, 
PI-epsilon] )
+
 class btGeneric6DofSpringConstraint : public btGeneric6DofConstraint
 {
 protected:
@@ -494,4 +506,5 @@
        virtual void getInfo2 (btConstraintInfo2* info);
 };
 
+
 #endif //GENERIC_6DOF_CONSTRAINT_H


_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to