[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.

Dalai Felinto dfelinto at gmail.com
Tue Mar 24 00:08:38 CET 2009


http://projects.blender.org/tracker/?func=detail&aid=18446&group_id=9&atid=127

This ( ^^^) is a patch that does a doVersion to handle the recent Bullet
updates.

I considered that every time damping or rdamping are originally 0.0 or 1.0
the result should be consistent.
Therefore I set up a test file (in the above link) and got these results:

ob->damping *= 0.635f;
ob->rdamping = 0.1 + (0.59f * ob->rdamping);

Erwin, is this ok? (I assigned to you indeed).

Cheers,
Dalai

http://blenderecia.orgfree.com

2009/3/16 Campbell Barton <ideasman42 at gmail.com>

> 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
> >
> _______________________________________________
> Bf-committers mailing list
> Bf-committers at blender.org
> http://lists.blender.org/mailman/listinfo/bf-committers
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.blender.org/pipermail/bf-committers/attachments/20090323/f63904d6/attachment-0001.htm 


More information about the Bf-committers mailing list