<a href="http://projects.blender.org/tracker/?func=detail&aid=18446&group_id=9&atid=127">http://projects.blender.org/tracker/?func=detail&aid=18446&group_id=9&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->damping *= 0.635f;<br>
ob->rdamping = 0.1 + (0.59f * ob->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"><<a href="mailto:ideasman42@gmail.com">ideasman42@gmail.com</a>></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 <<a href="mailto:blender@erwincoumans.com">blender@erwincoumans.com</a>> wrote:<br>
> Revision: 19230<br>
> <a href="http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19230" target="_blank">http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19230</a><br>
> Author: erwin<br>
> Date: 2009-03-09 05:21:28 +0100 (Mon, 09 Mar 2009)<br>
><br>
> Log Message:<br>
> -----------<br>
> upgrade to latest Bullet trunk, fix related to vehicle anti-roll, added constraint visualization.<br>
> This commit doesn't add new functionality, but more updates are planned before Blender 2.49 release.<br>
><br>
> Modified Paths:<br>
> --------------<br>
> trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.cpp<br>
> trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h<br>
> trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSolverBody.h<br>
> trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btTypedConstraint.h<br>
> trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/btContinuousDynamicsWorld.cpp<br>
> trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.cpp<br>
> trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h<br>
> trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/btDynamicsWorld.h<br>
> trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/btRigidBody.cpp<br>
> trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/btRigidBody.h<br>
> trunk/blender/extern/bullet2/src/BulletDynamics/Vehicle/btRaycastVehicle.cpp<br>
> trunk/blender/extern/bullet2/src/BulletDynamics/Vehicle/btRaycastVehicle.h<br>
> trunk/blender/extern/bullet2/src/LinearMath/btConvexHull.cpp<br>
> trunk/blender/source/gameengine/Converter/KX_BlenderSceneConverter.cpp<br>
> trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp<br>
><br>
> Added Paths:<br>
> -----------<br>
> trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/btActionInterface.h<br>
><br>
> Modified: trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.cpp<br>
> ===================================================================<br>
> --- trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.cpp 2009-03-08 17:23:36 UTC (rev 19229)<br>
> +++ trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.cpp 2009-03-09 04:21:28 UTC (rev 19230)<br>
> @@ -76,8 +76,8 @@<br>
> __m128 upperMinApplied = _mm_sub_ps(upperLimit1,cpAppliedImp);<br>
> deltaImpulse = _mm_or_ps( _mm_and_ps(resultUpperLess, deltaImpulse), _mm_andnot_ps(resultUpperLess, upperMinApplied) );<br>
> c.m_appliedImpulse = _mm_or_ps( _mm_and_ps(resultUpperLess, c.m_appliedImpulse), _mm_andnot_ps(resultUpperLess, upperLimit1) );<br>
> - __m128 linearComponentA = _mm_mul_ps(c.m_contactNormal.mVec128,_mm_set1_ps(body1.m_invMass));<br>
> - __m128 linearComponentB = _mm_mul_ps((c.m_contactNormal).mVec128,_mm_set1_ps(body2.m_invMass));<br>
> + __m128 linearComponentA = _mm_mul_ps(c.m_contactNormal.mVec128,body1.m_invMass.mVec128);<br>
> + __m128 linearComponentB = _mm_mul_ps((c.m_contactNormal).mVec128,body2.m_invMass.mVec128);<br>
> __m128 impulseMagnitude = deltaImpulse;<br>
> body1.m_deltaLinearVelocity.mVec128 = _mm_add_ps(body1.m_deltaLinearVelocity.mVec128,_mm_mul_ps(linearComponentA,impulseMagnitude));<br>
> body1.m_deltaAngularVelocity.mVec128 = _mm_add_ps(body1.m_deltaAngularVelocity.mVec128 ,_mm_mul_ps(c.m_angularComponentA.mVec128,impulseMagnitude));<br>
> @@ -114,9 +114,7 @@<br>
> {<br>
> c.m_appliedImpulse = sum;<br>
> }<br>
> - if (body1.m_invMass)<br>
> body1.applyImpulse(c.m_contactNormal*body1.m_invMass,c.m_angularComponentA,deltaImpulse);<br>
> - if (body2.m_invMass)<br>
> body2.applyImpulse(-c.m_contactNormal*body2.m_invMass,c.m_angularComponentB,deltaImpulse);<br>
> }<br>
><br>
> @@ -138,8 +136,8 @@<br>
> __m128 lowMinApplied = _mm_sub_ps(lowerLimit1,cpAppliedImp);<br>
> deltaImpulse = _mm_or_ps( _mm_and_ps(resultLowerLess, lowMinApplied), _mm_andnot_ps(resultLowerLess, deltaImpulse) );<br>
> c.m_appliedImpulse = _mm_or_ps( _mm_and_ps(resultLowerLess, lowerLimit1), _mm_andnot_ps(resultLowerLess, sum) );<br>
> - __m128 linearComponentA = _mm_mul_ps(c.m_contactNormal.mVec128,_mm_set1_ps(body1.m_invMass));<br>
> - __m128 linearComponentB = _mm_mul_ps((c.m_contactNormal).mVec128,_mm_set1_ps(body2.m_invMass));<br>
> + __m128 linearComponentA = _mm_mul_ps(c.m_contactNormal.mVec128,body1.m_invMass.mVec128);<br>
> + __m128 linearComponentB = _mm_mul_ps((c.m_contactNormal).mVec128,body2.m_invMass.mVec128);<br>
> __m128 impulseMagnitude = deltaImpulse;<br>
> body1.m_deltaLinearVelocity.mVec128 = _mm_add_ps(body1.m_deltaLinearVelocity.mVec128,_mm_mul_ps(linearComponentA,impulseMagnitude));<br>
> body1.m_deltaAngularVelocity.mVec128 = _mm_add_ps(body1.m_deltaAngularVelocity.mVec128 ,_mm_mul_ps(c.m_angularComponentA.mVec128,impulseMagnitude));<br>
> @@ -169,10 +167,8 @@<br>
> {<br>
> c.m_appliedImpulse = sum;<br>
> }<br>
> - if (body1.m_invMass)<br>
> - body1.applyImpulse(c.m_contactNormal*body1.m_invMass,c.m_angularComponentA,deltaImpulse);<br>
> - if (body2.m_invMass)<br>
> - body2.applyImpulse(-c.m_contactNormal*body2.m_invMass,c.m_angularComponentB,deltaImpulse);<br>
> + body1.applyImpulse(c.m_contactNormal*body1.m_invMass,c.m_angularComponentA,deltaImpulse);<br>
> + body2.applyImpulse(-c.m_contactNormal*body2.m_invMass,c.m_angularComponentB,deltaImpulse);<br>
> }<br>
><br>
><br>
> @@ -224,14 +220,14 @@<br>
><br>
> if (rb)<br>
> {<br>
> - solverBody->m_invMass = rb->getInvMass();<br>
> + solverBody->m_invMass = btVector3(rb->getInvMass(),rb->getInvMass(),rb->getInvMass())*rb->getLinearFactor();<br>
> solverBody->m_originalBody = rb;<br>
> solverBody->m_angularFactor = rb->getAngularFactor();<br>
> } else<br>
> {<br>
> - solverBody->m_invMass = 0.f;<br>
> + solverBody->m_invMass.setValue(0,0,0);<br>
> solverBody->m_originalBody = 0;<br>
> - solverBody->m_angularFactor = 1.f;<br>
> + solverBody->m_angularFactor.setValue(1,1,1);<br>
> }<br>
> }<br>
><br>
> @@ -394,6 +390,10 @@<br>
> solverBodyIdB = getOrInitSolverBody(*colObj1);<br>
> }<br>
><br>
> + ///avoid collision response between two static objects<br>
> + if (!solverBodyIdA && !solverBodyIdB)<br>
> + return;<br>
> +<br>
> btVector3 rel_pos1;<br>
> btVector3 rel_pos2;<br>
> btScalar relaxation;<br>
> @@ -490,13 +490,13 @@<br>
><br>
><br>
> ///warm starting (or zero if disabled)<br>
> - if (infoGlobal.m_solverMode & SOLVER_USE_WARMSTARTING)<br>
> + if (0)//infoGlobal.m_solverMode & SOLVER_USE_WARMSTARTING)<br>
> {<br>
> solverConstraint.m_appliedImpulse = cp.m_appliedImpulse * infoGlobal.m_warmstartingFactor;<br>
> if (rb0)<br>
> - m_tmpSolverBodyPool[solverConstraint.m_solverBodyIdA].applyImpulse(solverConstraint.m_contactNormal*rb0->getInvMass(),solverConstraint.m_angularComponentA,solverConstraint.m_appliedImpulse);<br>
> + m_tmpSolverBodyPool[solverConstraint.m_solverBodyIdA].applyImpulse(solverConstraint.m_contactNormal*rb0->getInvMass()*rb0->getLinearFactor(),solverConstraint.m_angularComponentA,solverConstraint.m_appliedImpulse);<br>
> if (rb1)<br>
> - m_tmpSolverBodyPool[solverConstraint.m_solverBodyIdB].applyImpulse(solverConstraint.m_contactNormal*rb1->getInvMass(),-solverConstraint.m_angularComponentB,-solverConstraint.m_appliedImpulse);<br>
> + m_tmpSolverBodyPool[solverConstraint.m_solverBodyIdB].applyImpulse(solverConstraint.m_contactNormal*rb1->getInvMass()*rb1->getLinearFactor(),-solverConstraint.m_angularComponentB,-solverConstraint.m_appliedImpulse);<br>
> } else<br>
> {<br>
> solverConstraint.m_appliedImpulse = 0.f;<br>
> @@ -583,9 +583,9 @@<br>
> {<br>
> frictionConstraint1.m_appliedImpulse = cp.m_appliedImpulseLateral1 * infoGlobal.m_warmstartingFactor;<br>
> if (rb0)<br>
> - m_tmpSolverBodyPool[solverConstraint.m_solverBodyIdA].applyImpulse(frictionConstraint1.m_contactNormal*rb0->getInvMass(),frictionConstraint1.m_angularComponentA,frictionConstraint1.m_appliedImpulse);<br>
> + m_tmpSolverBodyPool[solverConstraint.m_solverBodyIdA].applyImpulse(frictionConstraint1.m_contactNormal*rb0->getInvMass()*rb0->getLinearFactor(),frictionConstraint1.m_angularComponentA,frictionConstraint1.m_appliedImpulse);<br>
> if (rb1)<br>
> - m_tmpSolverBodyPool[solverConstraint.m_solverBodyIdB].applyImpulse(frictionConstraint1.m_contactNormal*rb1->getInvMass(),-frictionConstraint1.m_angularComponentB,-frictionConstraint1.m_appliedImpulse);<br>
> + m_tmpSolverBodyPool[solverConstraint.m_solverBodyIdB].applyImpulse(frictionConstraint1.m_contactNormal*rb1->getInvMass()*rb1->getLinearFactor(),-frictionConstraint1.m_angularComponentB,-frictionConstraint1.m_appliedImpulse);<br>
> } else<br>
> {<br>
> frictionConstraint1.m_appliedImpulse = 0.f;<br>
><br>
> Modified: trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h<br>
> ===================================================================<br>
> --- trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h 2009-03-08 17:23:36 UTC (rev 19229)<br>
> +++ trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h 2009-03-09 04:21:28 UTC (rev 19230)<br>
> @@ -24,10 +24,7 @@<br>
><br>
><br>
><br>
> -///The btSequentialImpulseConstraintSolver uses a Propagation Method and Sequentially applies impulses<br>
> -///The approach is the 3D version of Erin Catto's GDC 2006 tutorial. See <a href="http://www.gphysics.com" target="_blank">http://www.gphysics.com</a><br>
> -///Although Sequential Impulse is more intuitive, it is mathematically equivalent to Projected Successive Overrelaxation (iterative LCP)<br>
> -///Applies impulses for combined restitution and penetration recovery and to simulate friction<br>
> +///The btSequentialImpulseConstraintSolver is a fast SIMD implementation of the Projected Gauss Seidel (iterative LCP) method.<br>
> class btSequentialImpulseConstraintSolver : public btConstraintSolver<br>
> {<br>
> protected:<br>
><br>
> Modified: trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSolverBody.h<br>
> ===================================================================<br>
> --- trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSolverBody.h 2009-03-08 17:23:36 UTC (rev 19229)<br>
> +++ trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSolverBody.h 2009-03-09 04:21:28 UTC (rev 19230)<br>
> @@ -110,8 +110,8 @@<br>
> BT_DECLARE_ALIGNED_ALLOCATOR();<br>
> btVector3 m_deltaLinearVelocity;<br>
> btVector3 m_deltaAngularVelocity;<br>
> - btScalar m_angularFactor;<br>
> - btScalar m_invMass;<br>
> + btVector3 m_angularFactor;<br>
> + btVector3 m_invMass;<br>
> btScalar m_friction;<br>
> btRigidBody* m_originalBody;<br>
> btVector3 m_pushVelocity;<br>
> @@ -162,7 +162,7 @@<br>
><br>
> void writebackVelocity(btScalar timeStep=0)<br>
> {<br>
> - if (m_invMass)<br>
> + if (m_originalBody)<br>
> {<br>
> m_originalBody->setLinearVelocity(m_originalBody->getLinearVelocity()+m_deltaLinearVelocity);<br>
> m_originalBody->setAngularVelocity(m_originalBody->getAngularVelocity()+m_deltaAngularVelocity);<br>
><br>
> Modified: trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btTypedConstraint.h<br>
> ===================================================================<br>
> --- trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btTypedConstraint.h 2009-03-08 17:23:36 UTC (rev 19229)<br>
> +++ trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btTypedConstraint.h 2009-03-09 04:21:28 UTC (rev 19230)<br>
> @@ -30,7 +30,6 @@<br>
> HINGE_CONSTRAINT_TYPE,<br>
> CONETWIST_CONSTRAINT_TYPE,<br>
> D6_CONSTRAINT_TYPE,<br>
> - VEHICLE_CONSTRAINT_TYPE,<br>
> SLIDER_CONSTRAINT_TYPE<br>
> };<br>
><br>
><br>
> Added: trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/btActionInterface.h<br>
> ===================================================================<br>
> --- trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/btActionInterface.h (rev 0)<br>
> +++ trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/btActionInterface.h 2009-03-09 04:21:28 UTC (rev 19230)<br>
> @@ -0,0 +1,39 @@<br>
> +/*<br>
> +Bullet Continuous Collision Detection and Physics Library<br>
> +Copyright (c) 2003-2006 Erwin Coumans <a href="http://continuousphysics.com/Bullet/" target="_blank">http://continuousphysics.com/Bullet/</a><br>
> +<br>
> +This software is provided 'as-is', without any express or implied warranty.<br>
> +In no event will the authors be held liable for any damages arising from the use of this software.<br>
> +Permission is granted to anyone to use this software for any purpose,<br>
> +including commercial applications, and to alter it and redistribute it freely,<br>
> +subject to the following restrictions:<br>
> +<br>
> +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>
><br>
> @@ Diff output truncated at 10240 characters. @@<br>
><br>
> _______________________________________________<br>
> Bf-blender-cvs mailing list<br>
> <a href="mailto:Bf-blender-cvs@blender.org">Bf-blender-cvs@blender.org</a><br>
> <a href="http://lists.blender.org/mailman/listinfo/bf-blender-cvs" target="_blank">http://lists.blender.org/mailman/listinfo/bf-blender-cvs</a><br>
><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>