[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20408] branches/bb_dev: svn merge -r 20338:20407 https://svn.blender.org/svnroot/bf-blender/trunk/ blender
Benoit Bolsee
benoit.bolsee at online.be
Mon May 25 22:48:52 CEST 2009
Revision: 20408
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20408
Author: ben2610
Date: 2009-05-25 22:48:52 +0200 (Mon, 25 May 2009)
Log Message:
-----------
svn merge -r 20338:20407 https://svn.blender.org/svnroot/bf-blender/trunk/blender
Modified Paths:
--------------
branches/bb_dev/bin/.blender/locale/de/LC_MESSAGES/blender.mo
branches/bb_dev/extern/bullet2/src/BulletDynamics/ConstraintSolver/btConeTwistConstraint.cpp
branches/bb_dev/extern/bullet2/src/BulletDynamics/ConstraintSolver/btConeTwistConstraint.h
branches/bb_dev/extern/bullet2/src/BulletDynamics/ConstraintSolver/btContactSolverInfo.h
branches/bb_dev/extern/bullet2/src/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.cpp
branches/bb_dev/extern/bullet2/src/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.h
branches/bb_dev/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.cpp
branches/bb_dev/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSliderConstraint.cpp
branches/bb_dev/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSliderConstraint.h
branches/bb_dev/extern/bullet2/src/LinearMath/btScalar.h
branches/bb_dev/intern/guardedalloc/intern/mmap_win.c
branches/bb_dev/po/de.po
branches/bb_dev/release/scripts/object_drop.py
branches/bb_dev/release/scripts/textplugin_convert_ge.py
branches/bb_dev/release/scripts/wizard_bolt_factory.py
branches/bb_dev/source/blender/blenkernel/intern/object.c
branches/bb_dev/source/blender/blenlib/intern/storage.c
branches/bb_dev/source/blender/blenloader/intern/readfile.c
branches/bb_dev/source/blender/include/butspace.h
branches/bb_dev/source/blender/makesdna/DNA_object_types.h
branches/bb_dev/source/blender/makesdna/DNA_sequence_types.h
branches/bb_dev/source/blender/python/api2_2x/Constraint.c
branches/bb_dev/source/blender/python/api2_2x/Text3d.c
branches/bb_dev/source/blender/src/buttons_logic.c
branches/bb_dev/source/blender/src/buttons_object.c
branches/bb_dev/source/blender/src/buttons_scene.c
branches/bb_dev/source/blender/src/drawseq.c
branches/bb_dev/source/blender/src/header_ipo.c
branches/bb_dev/source/blender/src/headerbuttons.c
branches/bb_dev/source/blender/src/parametrizer.c
branches/bb_dev/source/blender/src/seqaudio.c
branches/bb_dev/source/blender/src/sequence.c
branches/bb_dev/source/gameengine/Converter/BL_BlenderDataConversion.cpp
branches/bb_dev/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
branches/bb_dev/source/gameengine/Converter/KX_BlenderSceneConverter.h
branches/bb_dev/source/gameengine/Converter/KX_ConvertSensors.cpp
branches/bb_dev/source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp
branches/bb_dev/source/gameengine/GameLogic/Joystick/SCA_Joystick.h
branches/bb_dev/source/gameengine/GameLogic/Joystick/SCA_JoystickDefines.h
branches/bb_dev/source/gameengine/GameLogic/Joystick/SCA_JoystickEvents.cpp
branches/bb_dev/source/gameengine/GameLogic/SCA_ISensor.h
branches/bb_dev/source/gameengine/GameLogic/SCA_JoystickSensor.cpp
branches/bb_dev/source/gameengine/GameLogic/SCA_JoystickSensor.h
branches/bb_dev/source/gameengine/GameLogic/SCA_PythonController.cpp
branches/bb_dev/source/gameengine/GameLogic/SCA_RandomNumberGenerator.cpp
branches/bb_dev/source/gameengine/GameLogic/SCA_RandomNumberGenerator.h
branches/bb_dev/source/gameengine/GameLogic/SCA_RandomSensor.cpp
branches/bb_dev/source/gameengine/GameLogic/SCA_RandomSensor.h
branches/bb_dev/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
branches/bb_dev/source/gameengine/Ketsji/KX_BlenderMaterial.h
branches/bb_dev/source/gameengine/Ketsji/KX_Camera.cpp
branches/bb_dev/source/gameengine/Ketsji/KX_Camera.h
branches/bb_dev/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp
branches/bb_dev/source/gameengine/Ketsji/KX_ConstraintWrapper.h
branches/bb_dev/source/gameengine/Ketsji/KX_ConvertPhysicsObject.h
branches/bb_dev/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp
branches/bb_dev/source/gameengine/Ketsji/KX_GameActuator.cpp
branches/bb_dev/source/gameengine/Ketsji/KX_GameObject.cpp
branches/bb_dev/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
branches/bb_dev/source/gameengine/Ketsji/KX_KetsjiEngine.h
branches/bb_dev/source/gameengine/Ketsji/KX_NearSensor.h
branches/bb_dev/source/gameengine/Ketsji/KX_PolygonMaterial.cpp
branches/bb_dev/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp
branches/bb_dev/source/gameengine/Ketsji/KX_PythonInit.cpp
branches/bb_dev/source/gameengine/Ketsji/KX_RadarSensor.h
branches/bb_dev/source/gameengine/Ketsji/KX_Scene.cpp
branches/bb_dev/source/gameengine/Ketsji/KX_TouchEventManager.cpp
branches/bb_dev/source/gameengine/Ketsji/KX_TouchSensor.h
branches/bb_dev/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
branches/bb_dev/source/gameengine/Physics/Bullet/CcdPhysicsController.h
branches/bb_dev/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
branches/bb_dev/source/gameengine/PyDoc/GameTypes.py
branches/bb_dev/source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp
branches/bb_dev/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h
branches/bb_dev/source/gameengine/Rasterizer/RAS_MeshObject.cpp
branches/bb_dev/source/gameengine/Rasterizer/RAS_MeshObject.h
branches/bb_dev/source/gameengine/VideoTexture/ImageBase.cpp
branches/bb_dev/source/gameengine/VideoTexture/ImageBuff.cpp
branches/bb_dev/source/gameengine/VideoTexture/ImageMix.cpp
branches/bb_dev/source/gameengine/VideoTexture/ImageRender.cpp
branches/bb_dev/source/gameengine/VideoTexture/Texture.cpp
branches/bb_dev/source/gameengine/VideoTexture/VideoFFmpeg.cpp
branches/bb_dev/source/gameengine/VideoTexture/blendVideoTex.cpp
Added Paths:
-----------
branches/bb_dev/release/scripts/animation_clean.py
Modified: branches/bb_dev/bin/.blender/locale/de/LC_MESSAGES/blender.mo
===================================================================
(Binary files differ)
Modified: branches/bb_dev/extern/bullet2/src/BulletDynamics/ConstraintSolver/btConeTwistConstraint.cpp
===================================================================
--- branches/bb_dev/extern/bullet2/src/BulletDynamics/ConstraintSolver/btConeTwistConstraint.cpp 2009-05-25 18:32:28 UTC (rev 20407)
+++ branches/bb_dev/extern/bullet2/src/BulletDynamics/ConstraintSolver/btConeTwistConstraint.cpp 2009-05-25 20:48:52 UTC (rev 20408)
@@ -22,13 +22,14 @@
#include "LinearMath/btMinMax.h"
#include <new>
-//-----------------------------------------------------------------------------
+
+//#define CONETWIST_USE_OBSOLETE_SOLVER true
#define CONETWIST_USE_OBSOLETE_SOLVER false
#define CONETWIST_DEF_FIX_THRESH btScalar(.05f)
-//-----------------------------------------------------------------------------
+
btConeTwistConstraint::btConeTwistConstraint()
:btTypedConstraint(CONETWIST_CONSTRAINT_TYPE),
m_useSolveConstraintObsolete(CONETWIST_USE_OBSOLETE_SOLVER)
@@ -63,14 +64,14 @@
m_bMotorEnabled = false;
m_maxMotorImpulse = btScalar(-1);
- setLimit(btScalar(1e30), btScalar(1e30), btScalar(1e30));
+ setLimit(btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT));
m_damping = btScalar(0.01);
m_fixThresh = CONETWIST_DEF_FIX_THRESH;
}
-//-----------------------------------------------------------------------------
+
void btConeTwistConstraint::getInfo1 (btConstraintInfo1* info)
{
if (m_useSolveConstraintObsolete)
@@ -99,10 +100,10 @@
info->nub--;
}
}
-} // btConeTwistConstraint::getInfo1()
+}
-//-----------------------------------------------------------------------------
+
void btConeTwistConstraint::getInfo2 (btConstraintInfo2* info)
{
btAssert(!m_useSolveConstraintObsolete);
@@ -230,8 +231,8 @@
}
}
-//-----------------------------------------------------------------------------
+
void btConeTwistConstraint::buildJacobian()
{
if (m_useSolveConstraintObsolete)
@@ -239,6 +240,7 @@
m_appliedImpulse = btScalar(0.);
m_accTwistLimitImpulse = btScalar(0.);
m_accSwingLimitImpulse = btScalar(0.);
+ m_accMotorImpulse = btVector3(0.,0.,0.);
if (!m_angularOnly)
{
@@ -277,8 +279,8 @@
}
}
-//-----------------------------------------------------------------------------
+
void btConeTwistConstraint::solveConstraintObsolete(btSolverBody& bodyA,btSolverBody& bodyB,btScalar timeStep)
{
if (m_useSolveConstraintObsolete)
@@ -406,10 +408,10 @@
}
}
- else // no motor: do a little damping
+ else if (m_damping > SIMD_EPSILON) // no motor: do a little damping
{
- const btVector3& angVelA = getRigidBodyA().getAngularVelocity();
- const btVector3& angVelB = getRigidBodyB().getAngularVelocity();
+ btVector3 angVelA; bodyA.getAngularVelocity(angVelA);
+ btVector3 angVelB; bodyB.getAngularVelocity(angVelB);
btVector3 relVel = angVelB - angVelA;
if (relVel.length2() > SIMD_EPSILON)
{
@@ -490,16 +492,16 @@
}
-//-----------------------------------------------------------------------------
+
void btConeTwistConstraint::updateRHS(btScalar timeStep)
{
(void)timeStep;
}
-//-----------------------------------------------------------------------------
+
void btConeTwistConstraint::calcAngleInfo()
{
m_swingCorrection = btScalar(0.);
@@ -584,26 +586,47 @@
m_twistAxis.normalize();
}
}
-} // btConeTwistConstraint::calcAngleInfo()
+}
static btVector3 vTwist(1,0,0); // twist axis in constraint's space
-//-----------------------------------------------------------------------------
+
void btConeTwistConstraint::calcAngleInfo2()
{
m_swingCorrection = btScalar(0.);
m_twistLimitSign = btScalar(0.);
m_solveTwistLimit = false;
m_solveSwingLimit = false;
+ // compute rotation of A wrt B (in constraint space)
+ if (m_bMotorEnabled && (!m_useSolveConstraintObsolete))
+ { // it is assumed that setMotorTarget() was alredy called
+ // and motor target m_qTarget is within constraint limits
+ // TODO : split rotation to pure swing and pure twist
+ // compute desired transforms in world
+ btTransform trPose(m_qTarget);
+ btTransform trA = getRigidBodyA().getCenterOfMassTransform() * m_rbAFrame;
+ btTransform trB = getRigidBodyB().getCenterOfMassTransform() * m_rbBFrame;
+ btTransform trDeltaAB = trB * trPose * trA.inverse();
+ btQuaternion qDeltaAB = trDeltaAB.getRotation();
+ btVector3 swingAxis = btVector3(qDeltaAB.x(), qDeltaAB.y(), qDeltaAB.z());
+ m_swingAxis = swingAxis;
+ m_swingAxis.normalize();
+ m_swingCorrection = qDeltaAB.getAngle();
+ if(!btFuzzyZero(m_swingCorrection))
+ {
+ m_solveSwingLimit = true;
+ }
+ return;
+ }
+
{
// compute rotation of A wrt B (in constraint space)
btQuaternion qA = getRigidBodyA().getCenterOfMassTransform().getRotation() * m_rbAFrame.getRotation();
btQuaternion qB = getRigidBodyB().getCenterOfMassTransform().getRotation() * m_rbBFrame.getRotation();
btQuaternion qAB = qB.inverse() * qA;
-
// split rotation into cone and twist
// (all this is done from B's perspective. Maybe I should be averaging axes...)
btVector3 vConeNoTwist = quatRotate(qAB, vTwist); vConeNoTwist.normalize();
@@ -756,7 +779,7 @@
m_twistAngle = btScalar(0.f);
}
}
-} // btConeTwistConstraint::calcAngleInfo2()
+}
@@ -982,8 +1005,5 @@
}
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
Modified: branches/bb_dev/extern/bullet2/src/BulletDynamics/ConstraintSolver/btConeTwistConstraint.h
===================================================================
--- branches/bb_dev/extern/bullet2/src/BulletDynamics/ConstraintSolver/btConeTwistConstraint.h 2009-05-25 18:32:28 UTC (rev 20407)
+++ branches/bb_dev/extern/bullet2/src/BulletDynamics/ConstraintSolver/btConeTwistConstraint.h 2009-05-25 20:48:52 UTC (rev 20408)
@@ -17,6 +17,22 @@
+/*
+Overview:
+
+btConeTwistConstraint can be used to simulate ragdoll joints (upper arm, leg etc).
+It is a fixed translation, 3 degree-of-freedom (DOF) rotational "joint".
+It divides the 3 rotational DOFs into swing (movement within a cone) and twist.
+Swing is divided into swing1 and swing2 which can have different limits, giving an elliptical shape.
+(Note: the cone's base isn't flat, so this ellipse is "embedded" on the surface of a sphere.)
+
+In the contraint's frame of reference:
+twist is along the x-axis,
+and swing 1 and 2 are along the z and y axes respectively.
+*/
+
+
+
#ifndef CONETWISTCONSTRAINT_H
#define CONETWISTCONSTRAINT_H
@@ -141,7 +157,18 @@
};
}
- void setLimit(btScalar _swingSpan1,btScalar _swingSpan2,btScalar _twistSpan, btScalar _softness = 1.f, btScalar _biasFactor = 0.3f, btScalar _relaxationFactor = 1.0f)
+ // setLimit(), a few notes:
+ // _softness:
+ // 0->1, recommend ~0.8->1.
+ // describes % of limits where movement is free.
+ // beyond this softness %, the limit is gradually enforced until the "hard" (1.0) limit is reached.
+ // _biasFactor:
+ // 0->1?, recommend 0.3 +/-0.3 or so.
+ // strength with which constraint resists zeroth order (angular, not angular velocity) limit violation.
+ // __relaxationFactor:
+ // 0->1, recommend to stay near 1.
+ // the lower the value, the less the constraint will fight velocities which violate the angular limits.
+ void setLimit(btScalar _swingSpan1,btScalar _swingSpan2,btScalar _twistSpan, btScalar _softness = 1.f, btScalar _biasFactor = 0.3f, btScalar _relaxationFactor = 1.0f)
{
m_swingSpan1 = _swingSpan1;
m_swingSpan2 = _swingSpan2;
Modified: branches/bb_dev/extern/bullet2/src/BulletDynamics/ConstraintSolver/btContactSolverInfo.h
===================================================================
--- branches/bb_dev/extern/bullet2/src/BulletDynamics/ConstraintSolver/btContactSolverInfo.h 2009-05-25 18:32:28 UTC (rev 20407)
+++ branches/bb_dev/extern/bullet2/src/BulletDynamics/ConstraintSolver/btContactSolverInfo.h 2009-05-25 20:48:52 UTC (rev 20408)
@@ -77,7 +77,7 @@
m_splitImpulsePenetrationThreshold = -0.02f;
m_linearSlop = btScalar(0.0);
m_warmstartingFactor=btScalar(0.85);
- m_solverMode = SOLVER_USE_WARMSTARTING | SOLVER_SIMD ;//SOLVER_RANDMIZE_ORDER
+ m_solverMode = SOLVER_USE_WARMSTARTING | SOLVER_USE_2_FRICTION_DIRECTIONS |SOLVER_SIMD | SOLVER_RANDMIZE_ORDER;
m_restingContactRestitutionThreshold = 2;//resting contact lifetime threshold to disable restitution
}
};
Modified: branches/bb_dev/extern/bullet2/src/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.cpp
===================================================================
--- branches/bb_dev/extern/bullet2/src/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.cpp 2009-05-25 18:32:28 UTC (rev 20407)
+++ branches/bb_dev/extern/bullet2/src/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.cpp 2009-05-25 20:48:52 UTC (rev 20408)
@@ -22,12 +22,14 @@
#include "btGeneric6DofConstraint.h"
#include "BulletDynamics/Dynamics/btRigidBody.h"
#include "LinearMath/btTransformUtil.h"
+#include "LinearMath/btTransformUtil.h"
#include <new>
+
#define D6_USE_OBSOLETE_METHOD false
-//-----------------------------------------------------------------------------
+
btGeneric6DofConstraint::btGeneric6DofConstraint()
:btTypedConstraint(D6_CONSTRAINT_TYPE),
m_useLinearReferenceFrameA(true),
@@ -35,8 +37,8 @@
{
}
-//-----------------------------------------------------------------------------
+
btGeneric6DofConstraint::btGeneric6DofConstraint(btRigidBody& rbA, btRigidBody& rbB, const btTransform& frameInA, const btTransform& frameInB, bool useLinearReferenceFrameA)
: btTypedConstraint(D6_CONSTRAINT_TYPE, rbA, rbB)
, m_frameInA(frameInA)
@@ -46,13 +48,13 @@
{
}
-//-----------------------------------------------------------------------------
+
#define GENERIC_D6_DISABLE_WARMSTARTING 1
-//-----------------------------------------------------------------------------
+
btScalar btGetMatrixElem(const btMatrix3x3& mat, int index);
btScalar btGetMatrixElem(const btMatrix3x3& mat, int index)
{
@@ -61,8 +63,8 @@
return mat[i][j];
}
-//-----------------------------------------------------------------------------
+
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list