[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.
Erwin Coumans
blender at erwincoumans.com
Mon Mar 9 05:21:28 CET 2009
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. @@
More information about the Bf-blender-cvs
mailing list