[Bf-committers] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19230] trunk/blender: upgrade to latest Bullet trunk, fix related to vehicle anti-roll, added constraint visualization.

Campbell Barton ideasman42 at gmail.com
Mon Mar 16 20:33:33 CET 2009


Note, one of the updates to blender in the last 2 weeks (probably this
one?), made dampening work differently.

With the current blender svn YoFrankie hangs in the air and wont move.
It looks like this is because dampening now works properly, Frankies
dampening was 1.0, committed change to YF svn.

But if we want to have files from the GameKit working, do_versions
could halve the dampening.
-- 
- Campbell

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


More information about the Bf-committers mailing list