<a href="http://projects.blender.org/tracker/?func=detail&amp;aid=18446&amp;group_id=9&amp;atid=127">http://projects.blender.org/tracker/?func=detail&amp;aid=18446&amp;group_id=9&amp;atid=127</a><br><br>This ( ^^^) is a patch that does a doVersion to handle the recent Bullet updates.<br>
<br>I considered that every time damping or rdamping are originally 0.0 or 1.0 the result should be consistent.<br>Therefore I set up a test file (in the above link) and got these results:<br><br>ob-&gt;damping *= 0.635f;<br>
ob-&gt;rdamping = 0.1 + (0.59f * ob-&gt;rdamping);<br><br>Erwin, is this ok? (I assigned to you indeed).<br><br>Cheers,<br>Dalai<br><br><a href="http://blenderecia.orgfree.com">http://blenderecia.orgfree.com</a><br><br><div class="gmail_quote">
2009/3/16 Campbell Barton <span dir="ltr">&lt;<a href="mailto:ideasman42@gmail.com">ideasman42@gmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Note, one of the updates to blender in the last 2 weeks (probably this<br>
one?), made dampening work differently.<br>
<br>
With the current blender svn YoFrankie hangs in the air and wont move.<br>
It looks like this is because dampening now works properly, Frankies<br>
dampening was 1.0, committed change to YF svn.<br>
<br>
But if we want to have files from the GameKit working, do_versions<br>
could halve the dampening.<br>
--<br>
- Campbell<br>
<br>
On Sun, Mar 8, 2009 at 9:21 PM, Erwin Coumans &lt;<a href="mailto:blender@erwincoumans.com">blender@erwincoumans.com</a>&gt; wrote:<br>
&gt; Revision: 19230<br>
&gt;          <a href="http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&amp;root=bf-blender&amp;revision=19230" target="_blank">http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&amp;root=bf-blender&amp;revision=19230</a><br>

&gt; Author:   erwin<br>
&gt; Date:     2009-03-09 05:21:28 +0100 (Mon, 09 Mar 2009)<br>
&gt;<br>
&gt; Log Message:<br>
&gt; -----------<br>
&gt; upgrade to latest Bullet trunk, fix related to vehicle anti-roll, added constraint visualization.<br>
&gt; This commit doesn&#39;t add new functionality, but more updates are planned before Blender 2.49 release.<br>
&gt;<br>
&gt; Modified Paths:<br>
&gt; --------------<br>
&gt;    trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.cpp<br>
&gt;    trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h<br>
&gt;    trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSolverBody.h<br>
&gt;    trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btTypedConstraint.h<br>
&gt;    trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/btContinuousDynamicsWorld.cpp<br>
&gt;    trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.cpp<br>
&gt;    trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h<br>
&gt;    trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/btDynamicsWorld.h<br>
&gt;    trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/btRigidBody.cpp<br>
&gt;    trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/btRigidBody.h<br>
&gt;    trunk/blender/extern/bullet2/src/BulletDynamics/Vehicle/btRaycastVehicle.cpp<br>
&gt;    trunk/blender/extern/bullet2/src/BulletDynamics/Vehicle/btRaycastVehicle.h<br>
&gt;    trunk/blender/extern/bullet2/src/LinearMath/btConvexHull.cpp<br>
&gt;    trunk/blender/source/gameengine/Converter/KX_BlenderSceneConverter.cpp<br>
&gt;    trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp<br>
&gt;<br>
&gt; Added Paths:<br>
&gt; -----------<br>
&gt;    trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/btActionInterface.h<br>
&gt;<br>
&gt; Modified: trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.cpp<br>
&gt; ===================================================================<br>
&gt; --- trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.cpp    2009-03-08 17:23:36 UTC (rev 19229)<br>
&gt; +++ trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.cpp    2009-03-09 04:21:28 UTC (rev 19230)<br>
&gt; @@ -76,8 +76,8 @@<br>
&gt;        __m128 upperMinApplied = _mm_sub_ps(upperLimit1,cpAppliedImp);<br>
&gt;        deltaImpulse = _mm_or_ps( _mm_and_ps(resultUpperLess, deltaImpulse), _mm_andnot_ps(resultUpperLess, upperMinApplied) );<br>
&gt;        c.m_appliedImpulse = _mm_or_ps( _mm_and_ps(resultUpperLess, c.m_appliedImpulse), _mm_andnot_ps(resultUpperLess, upperLimit1) );<br>
&gt; -       __m128  linearComponentA = _mm_mul_ps(c.m_contactNormal.mVec128,_mm_set1_ps(body1.m_invMass));<br>
&gt; -       __m128  linearComponentB = _mm_mul_ps((c.m_contactNormal).mVec128,_mm_set1_ps(body2.m_invMass));<br>
&gt; +       __m128  linearComponentA = _mm_mul_ps(c.m_contactNormal.mVec128,body1.m_invMass.mVec128);<br>
&gt; +       __m128  linearComponentB = _mm_mul_ps((c.m_contactNormal).mVec128,body2.m_invMass.mVec128);<br>
&gt;        __m128 impulseMagnitude = deltaImpulse;<br>
&gt;        body1.m_deltaLinearVelocity.mVec128 = _mm_add_ps(body1.m_deltaLinearVelocity.mVec128,_mm_mul_ps(linearComponentA,impulseMagnitude));<br>
&gt;        body1.m_deltaAngularVelocity.mVec128 = _mm_add_ps(body1.m_deltaAngularVelocity.mVec128 ,_mm_mul_ps(c.m_angularComponentA.mVec128,impulseMagnitude));<br>
&gt; @@ -114,9 +114,7 @@<br>
&gt;        {<br>
&gt;                c.m_appliedImpulse = sum;<br>
&gt;        }<br>
&gt; -       if (body1.m_invMass)<br>
&gt;                body1.applyImpulse(c.m_contactNormal*body1.m_invMass,c.m_angularComponentA,deltaImpulse);<br>
&gt; -       if (body2.m_invMass)<br>
&gt;                body2.applyImpulse(-c.m_contactNormal*body2.m_invMass,c.m_angularComponentB,deltaImpulse);<br>
&gt;  }<br>
&gt;<br>
&gt; @@ -138,8 +136,8 @@<br>
&gt;        __m128 lowMinApplied = _mm_sub_ps(lowerLimit1,cpAppliedImp);<br>
&gt;        deltaImpulse = _mm_or_ps( _mm_and_ps(resultLowerLess, lowMinApplied), _mm_andnot_ps(resultLowerLess, deltaImpulse) );<br>
&gt;        c.m_appliedImpulse = _mm_or_ps( _mm_and_ps(resultLowerLess, lowerLimit1), _mm_andnot_ps(resultLowerLess, sum) );<br>
&gt; -       __m128  linearComponentA = _mm_mul_ps(c.m_contactNormal.mVec128,_mm_set1_ps(body1.m_invMass));<br>
&gt; -       __m128  linearComponentB = _mm_mul_ps((c.m_contactNormal).mVec128,_mm_set1_ps(body2.m_invMass));<br>
&gt; +       __m128  linearComponentA = _mm_mul_ps(c.m_contactNormal.mVec128,body1.m_invMass.mVec128);<br>
&gt; +       __m128  linearComponentB = _mm_mul_ps((c.m_contactNormal).mVec128,body2.m_invMass.mVec128);<br>
&gt;        __m128 impulseMagnitude = deltaImpulse;<br>
&gt;        body1.m_deltaLinearVelocity.mVec128 = _mm_add_ps(body1.m_deltaLinearVelocity.mVec128,_mm_mul_ps(linearComponentA,impulseMagnitude));<br>
&gt;        body1.m_deltaAngularVelocity.mVec128 = _mm_add_ps(body1.m_deltaAngularVelocity.mVec128 ,_mm_mul_ps(c.m_angularComponentA.mVec128,impulseMagnitude));<br>
&gt; @@ -169,10 +167,8 @@<br>
&gt;        {<br>
&gt;                c.m_appliedImpulse = sum;<br>
&gt;        }<br>
&gt; -       if (body1.m_invMass)<br>
&gt; -               body1.applyImpulse(c.m_contactNormal*body1.m_invMass,c.m_angularComponentA,deltaImpulse);<br>
&gt; -       if (body2.m_invMass)<br>
&gt; -               body2.applyImpulse(-c.m_contactNormal*body2.m_invMass,c.m_angularComponentB,deltaImpulse);<br>
&gt; +       body1.applyImpulse(c.m_contactNormal*body1.m_invMass,c.m_angularComponentA,deltaImpulse);<br>
&gt; +       body2.applyImpulse(-c.m_contactNormal*body2.m_invMass,c.m_angularComponentB,deltaImpulse);<br>
&gt;  }<br>
&gt;<br>
&gt;<br>
&gt; @@ -224,14 +220,14 @@<br>
&gt;<br>
&gt;        if (rb)<br>
&gt;        {<br>
&gt; -               solverBody-&gt;m_invMass = rb-&gt;getInvMass();<br>
&gt; +               solverBody-&gt;m_invMass = btVector3(rb-&gt;getInvMass(),rb-&gt;getInvMass(),rb-&gt;getInvMass())*rb-&gt;getLinearFactor();<br>
&gt;                solverBody-&gt;m_originalBody = rb;<br>
&gt;                solverBody-&gt;m_angularFactor = rb-&gt;getAngularFactor();<br>
&gt;        } else<br>
&gt;        {<br>
&gt; -               solverBody-&gt;m_invMass = 0.f;<br>
&gt; +               solverBody-&gt;m_invMass.setValue(0,0,0);<br>
&gt;                solverBody-&gt;m_originalBody = 0;<br>
&gt; -               solverBody-&gt;m_angularFactor = 1.f;<br>
&gt; +               solverBody-&gt;m_angularFactor.setValue(1,1,1);<br>
&gt;        }<br>
&gt;  }<br>
&gt;<br>
&gt; @@ -394,6 +390,10 @@<br>
&gt;                solverBodyIdB = getOrInitSolverBody(*colObj1);<br>
&gt;        }<br>
&gt;<br>
&gt; +       ///avoid collision response between two static objects<br>
&gt; +       if (!solverBodyIdA &amp;&amp; !solverBodyIdB)<br>
&gt; +               return;<br>
&gt; +<br>
&gt;        btVector3 rel_pos1;<br>
&gt;        btVector3 rel_pos2;<br>
&gt;        btScalar relaxation;<br>
&gt; @@ -490,13 +490,13 @@<br>
&gt;<br>
&gt;<br>
&gt;                                ///warm starting (or zero if disabled)<br>
&gt; -                               if (infoGlobal.m_solverMode &amp; SOLVER_USE_WARMSTARTING)<br>
&gt; +                               if (0)//infoGlobal.m_solverMode &amp; SOLVER_USE_WARMSTARTING)<br>
&gt;                                {<br>
&gt;                                        solverConstraint.m_appliedImpulse = cp.m_appliedImpulse * infoGlobal.m_warmstartingFactor;<br>
&gt;                                        if (rb0)<br>
&gt; -                                               m_tmpSolverBodyPool[solverConstraint.m_solverBodyIdA].applyImpulse(solverConstraint.m_contactNormal*rb0-&gt;getInvMass(),solverConstraint.m_angularComponentA,solverConstraint.m_appliedImpulse);<br>

&gt; +                                               m_tmpSolverBodyPool[solverConstraint.m_solverBodyIdA].applyImpulse(solverConstraint.m_contactNormal*rb0-&gt;getInvMass()*rb0-&gt;getLinearFactor(),solverConstraint.m_angularComponentA,solverConstraint.m_appliedImpulse);<br>

&gt;                                        if (rb1)<br>
&gt; -                                               m_tmpSolverBodyPool[solverConstraint.m_solverBodyIdB].applyImpulse(solverConstraint.m_contactNormal*rb1-&gt;getInvMass(),-solverConstraint.m_angularComponentB,-solverConstraint.m_appliedImpulse);<br>

&gt; +                                               m_tmpSolverBodyPool[solverConstraint.m_solverBodyIdB].applyImpulse(solverConstraint.m_contactNormal*rb1-&gt;getInvMass()*rb1-&gt;getLinearFactor(),-solverConstraint.m_angularComponentB,-solverConstraint.m_appliedImpulse);<br>

&gt;                                } else<br>
&gt;                                {<br>
&gt;                                        solverConstraint.m_appliedImpulse = 0.f;<br>
&gt; @@ -583,9 +583,9 @@<br>
&gt;                                                        {<br>
&gt;                                                                frictionConstraint1.m_appliedImpulse = cp.m_appliedImpulseLateral1 * infoGlobal.m_warmstartingFactor;<br>
&gt;                                                                if (rb0)<br>
&gt; -                                                                       m_tmpSolverBodyPool[solverConstraint.m_solverBodyIdA].applyImpulse(frictionConstraint1.m_contactNormal*rb0-&gt;getInvMass(),frictionConstraint1.m_angularComponentA,frictionConstraint1.m_appliedImpulse);<br>

&gt; +                                                                       m_tmpSolverBodyPool[solverConstraint.m_solverBodyIdA].applyImpulse(frictionConstraint1.m_contactNormal*rb0-&gt;getInvMass()*rb0-&gt;getLinearFactor(),frictionConstraint1.m_angularComponentA,frictionConstraint1.m_appliedImpulse);<br>

&gt;                                                                if (rb1)<br>
&gt; -                                                                       m_tmpSolverBodyPool[solverConstraint.m_solverBodyIdB].applyImpulse(frictionConstraint1.m_contactNormal*rb1-&gt;getInvMass(),-frictionConstraint1.m_angularComponentB,-frictionConstraint1.m_appliedImpulse);<br>

&gt; +                                                                       m_tmpSolverBodyPool[solverConstraint.m_solverBodyIdB].applyImpulse(frictionConstraint1.m_contactNormal*rb1-&gt;getInvMass()*rb1-&gt;getLinearFactor(),-frictionConstraint1.m_angularComponentB,-frictionConstraint1.m_appliedImpulse);<br>

&gt;                                                        } else<br>
&gt;                                                        {<br>
&gt;                                                                frictionConstraint1.m_appliedImpulse = 0.f;<br>
&gt;<br>
&gt; Modified: trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h<br>
&gt; ===================================================================<br>
&gt; --- trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h      2009-03-08 17:23:36 UTC (rev 19229)<br>
&gt; +++ trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h      2009-03-09 04:21:28 UTC (rev 19230)<br>
&gt; @@ -24,10 +24,7 @@<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; -///The btSequentialImpulseConstraintSolver uses a Propagation Method and Sequentially applies impulses<br>
&gt; -///The approach is the 3D version of Erin Catto&#39;s GDC 2006 tutorial. See <a href="http://www.gphysics.com" target="_blank">http://www.gphysics.com</a><br>
&gt; -///Although Sequential Impulse is more intuitive, it is mathematically equivalent to Projected Successive Overrelaxation (iterative LCP)<br>
&gt; -///Applies impulses for combined restitution and penetration recovery and to simulate friction<br>
&gt; +///The btSequentialImpulseConstraintSolver is a fast SIMD implementation of the Projected Gauss Seidel (iterative LCP) method.<br>
&gt;  class btSequentialImpulseConstraintSolver : public btConstraintSolver<br>
&gt;  {<br>
&gt;  protected:<br>
&gt;<br>
&gt; Modified: trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSolverBody.h<br>
&gt; ===================================================================<br>
&gt; --- trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSolverBody.h     2009-03-08 17:23:36 UTC (rev 19229)<br>
&gt; +++ trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSolverBody.h     2009-03-09 04:21:28 UTC (rev 19230)<br>
&gt; @@ -110,8 +110,8 @@<br>
&gt;        BT_DECLARE_ALIGNED_ALLOCATOR();<br>
&gt;        btVector3               m_deltaLinearVelocity;<br>
&gt;        btVector3               m_deltaAngularVelocity;<br>
&gt; -       btScalar                m_angularFactor;<br>
&gt; -       btScalar                m_invMass;<br>
&gt; +       btVector3               m_angularFactor;<br>
&gt; +       btVector3               m_invMass;<br>
&gt;        btScalar                m_friction;<br>
&gt;        btRigidBody*    m_originalBody;<br>
&gt;        btVector3               m_pushVelocity;<br>
&gt; @@ -162,7 +162,7 @@<br>
&gt;<br>
&gt;        void    writebackVelocity(btScalar timeStep=0)<br>
&gt;        {<br>
&gt; -               if (m_invMass)<br>
&gt; +               if (m_originalBody)<br>
&gt;                {<br>
&gt;                        m_originalBody-&gt;setLinearVelocity(m_originalBody-&gt;getLinearVelocity()+m_deltaLinearVelocity);<br>
&gt;                        m_originalBody-&gt;setAngularVelocity(m_originalBody-&gt;getAngularVelocity()+m_deltaAngularVelocity);<br>
&gt;<br>
&gt; Modified: trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btTypedConstraint.h<br>
&gt; ===================================================================<br>
&gt; --- trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btTypedConstraint.h        2009-03-08 17:23:36 UTC (rev 19229)<br>
&gt; +++ trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btTypedConstraint.h        2009-03-09 04:21:28 UTC (rev 19230)<br>
&gt; @@ -30,7 +30,6 @@<br>
&gt;        HINGE_CONSTRAINT_TYPE,<br>
&gt;        CONETWIST_CONSTRAINT_TYPE,<br>
&gt;        D6_CONSTRAINT_TYPE,<br>
&gt; -       VEHICLE_CONSTRAINT_TYPE,<br>
&gt;        SLIDER_CONSTRAINT_TYPE<br>
&gt;  };<br>
&gt;<br>
&gt;<br>
&gt; Added: trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/btActionInterface.h<br>
&gt; ===================================================================<br>
&gt; --- trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/btActionInterface.h                                (rev 0)<br>
&gt; +++ trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/btActionInterface.h        2009-03-09 04:21:28 UTC (rev 19230)<br>
&gt; @@ -0,0 +1,39 @@<br>
&gt; +/*<br>
&gt; +Bullet Continuous Collision Detection and Physics Library<br>
&gt; +Copyright (c) 2003-2006 Erwin Coumans  <a href="http://continuousphysics.com/Bullet/" target="_blank">http://continuousphysics.com/Bullet/</a><br>
&gt; +<br>
&gt; +This software is provided &#39;as-is&#39;, without any express or implied warranty.<br>
&gt; +In no event will the authors be held liable for any damages arising from the use of this software.<br>
&gt; +Permission is granted to anyone to use this software for any purpose,<br>
&gt; +including commercial applications, and to alter it and redistribute it freely,<br>
&gt; +subject to the following restrictions:<br>
&gt; +<br>
&gt; +1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.<br>

&gt;<br>
&gt; @@ Diff output truncated at 10240 characters. @@<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; Bf-blender-cvs mailing list<br>
&gt; <a href="mailto:Bf-blender-cvs@blender.org">Bf-blender-cvs@blender.org</a><br>
&gt; <a href="http://lists.blender.org/mailman/listinfo/bf-blender-cvs" target="_blank">http://lists.blender.org/mailman/listinfo/bf-blender-cvs</a><br>
&gt;<br>
_______________________________________________<br>
Bf-committers mailing list<br>
<a href="mailto:Bf-committers@blender.org">Bf-committers@blender.org</a><br>
<a href="http://lists.blender.org/mailman/listinfo/bf-committers" target="_blank">http://lists.blender.org/mailman/listinfo/bf-committers</a><br>
</blockquote></div><br>