[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11604] branches/particles: Merge from trunk: revisions 11297-11589

Janne Karhu jhkarh at utu.fi
Tue Aug 14 23:58:53 CEST 2007


Revision: 11604
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11604
Author:   jhk
Date:     2007-08-14 23:58:53 +0200 (Tue, 14 Aug 2007)

Log Message:
-----------
Merge from trunk: revisions 11297-11589
+ a forgotten dna file

Modified Paths:
--------------
    branches/particles/extern/bullet2/src/BulletDynamics/ConstraintSolver/btHingeConstraint.cpp
    branches/particles/extern/bullet2/src/BulletDynamics/ConstraintSolver/btHingeConstraint.h
    branches/particles/intern/bsp/intern/BSP_CSGMesh_CFIterator.h
    branches/particles/intern/opennl/extern/ONL_opennl.h
    branches/particles/intern/opennl/intern/opennl.c
    branches/particles/projectfiles_vc7/blender/ftfont/FTF_ftfont.vcproj
    branches/particles/projectfiles_vc7/blender/render/BRE_render.vcproj
    branches/particles/projectfiles_vc7/blender/src/BL_src.vcproj
    branches/particles/release/scripts/3ds_import.py
    branches/particles/release/scripts/DirectX8Importer.py
    branches/particles/release/scripts/ac3d_import.py
    branches/particles/release/scripts/bpymodules/BPyMesh.py
    branches/particles/release/scripts/bpymodules/colladaImEx/collada.py
    branches/particles/release/scripts/bpymodules/colladaImEx/cstartup.py
    branches/particles/release/scripts/bpymodules/colladaImEx/cutils.py
    branches/particles/release/scripts/bpymodules/colladaImEx/helperObjects.py
    branches/particles/release/scripts/bpymodules/colladaImEx/xmlUtils.py
    branches/particles/release/scripts/bvh_import.py
    branches/particles/release/scripts/colladaExport14.py
    branches/particles/release/scripts/colladaImport14.py
    branches/particles/release/scripts/export_fbx.py
    branches/particles/release/scripts/import_obj.py
    branches/particles/release/scripts/lightwave_import.py
    branches/particles/release/scripts/ply_import.py
    branches/particles/release/scripts/uv_export.py
    branches/particles/release/scripts/vertexpaint_selfshadow_ao.py
    branches/particles/release/text/BlenderQuickStart.pdf
    branches/particles/source/blender/blenkernel/BKE_DerivedMesh.h
    branches/particles/source/blender/blenkernel/BKE_action.h
    branches/particles/source/blender/blenkernel/BKE_constraint.h
    branches/particles/source/blender/blenkernel/BKE_global.h
    branches/particles/source/blender/blenkernel/BKE_lattice.h
    branches/particles/source/blender/blenkernel/BKE_modifier.h
    branches/particles/source/blender/blenkernel/BKE_object.h
    branches/particles/source/blender/blenkernel/intern/DerivedMesh.c
    branches/particles/source/blender/blenkernel/intern/action.c
    branches/particles/source/blender/blenkernel/intern/anim.c
    branches/particles/source/blender/blenkernel/intern/armature.c
    branches/particles/source/blender/blenkernel/intern/constraint.c
    branches/particles/source/blender/blenkernel/intern/ipo.c
    branches/particles/source/blender/blenkernel/intern/key.c
    branches/particles/source/blender/blenkernel/intern/modifier.c
    branches/particles/source/blender/blenkernel/intern/object.c
    branches/particles/source/blender/blenkernel/intern/particle.c
    branches/particles/source/blender/blenkernel/intern/particle_system.c
    branches/particles/source/blender/blenkernel/intern/softbody.c
    branches/particles/source/blender/blenkernel/intern/subsurf_ccg.c
    branches/particles/source/blender/blenlib/BLI_arithb.h
    branches/particles/source/blender/blenlib/intern/arithb.c
    branches/particles/source/blender/blenloader/intern/readfile.c
    branches/particles/source/blender/blenloader/intern/writefile.c
    branches/particles/source/blender/ftfont/CMakeLists.txt
    branches/particles/source/blender/ftfont/FTF_Api.h
    branches/particles/source/blender/ftfont/SConscript
    branches/particles/source/blender/ftfont/intern/FTF_Api.cpp
    branches/particles/source/blender/ftfont/intern/Makefile
    branches/particles/source/blender/include/BIF_editarmature.h
    branches/particles/source/blender/include/BIF_editconstraint.h
    branches/particles/source/blender/include/BIF_interface.h
    branches/particles/source/blender/include/BIF_poseobject.h
    branches/particles/source/blender/include/BIF_resources.h
    branches/particles/source/blender/include/BIF_transform.h
    branches/particles/source/blender/include/BSE_editipo.h
    branches/particles/source/blender/include/BSE_node.h
    branches/particles/source/blender/include/butspace.h
    branches/particles/source/blender/include/multires.h
    branches/particles/source/blender/include/transform.h
    branches/particles/source/blender/makesdna/DNA_action_types.h
    branches/particles/source/blender/makesdna/DNA_armature_types.h
    branches/particles/source/blender/makesdna/DNA_constraint_types.h
    branches/particles/source/blender/makesdna/DNA_curve_types.h
    branches/particles/source/blender/makesdna/DNA_group_types.h
    branches/particles/source/blender/makesdna/DNA_image_types.h
    branches/particles/source/blender/makesdna/DNA_ipo_types.h
    branches/particles/source/blender/makesdna/DNA_lamp_types.h
    branches/particles/source/blender/makesdna/DNA_mesh_types.h
    branches/particles/source/blender/makesdna/DNA_meshdata_types.h
    branches/particles/source/blender/makesdna/DNA_modifier_types.h
    branches/particles/source/blender/makesdna/DNA_nla_types.h
    branches/particles/source/blender/makesdna/DNA_object_types.h
    branches/particles/source/blender/makesdna/DNA_scene_types.h
    branches/particles/source/blender/makesdna/DNA_screen_types.h
    branches/particles/source/blender/makesdna/DNA_sequence_types.h
    branches/particles/source/blender/makesdna/DNA_space_types.h
    branches/particles/source/blender/makesdna/DNA_texture_types.h
    branches/particles/source/blender/makesdna/DNA_world_types.h
    branches/particles/source/blender/nodes/intern/CMP_nodes/CMP_math.c
    branches/particles/source/blender/python/BPY_extern.h
    branches/particles/source/blender/python/BPY_interface.c
    branches/particles/source/blender/python/api2_2x/Armature.c
    branches/particles/source/blender/python/api2_2x/Blender.c
    branches/particles/source/blender/python/api2_2x/Bone.c
    branches/particles/source/blender/python/api2_2x/Constraint.c
    branches/particles/source/blender/python/api2_2x/Curve.c
    branches/particles/source/blender/python/api2_2x/Draw.c
    branches/particles/source/blender/python/api2_2x/Draw.h
    branches/particles/source/blender/python/api2_2x/Effect.c
    branches/particles/source/blender/python/api2_2x/Material.c
    branches/particles/source/blender/python/api2_2x/Mathutils.c
    branches/particles/source/blender/python/api2_2x/Mesh.c
    branches/particles/source/blender/python/api2_2x/Object.c
    branches/particles/source/blender/python/api2_2x/Scene.c
    branches/particles/source/blender/python/api2_2x/SurfNurb.c
    branches/particles/source/blender/python/api2_2x/Texture.c
    branches/particles/source/blender/python/api2_2x/Window.c
    branches/particles/source/blender/python/api2_2x/doc/Blender.py
    branches/particles/source/blender/python/api2_2x/doc/Constraint.py
    branches/particles/source/blender/python/api2_2x/doc/Draw.py
    branches/particles/source/blender/python/api2_2x/doc/Mesh.py
    branches/particles/source/blender/python/api2_2x/sceneSequence.h
    branches/particles/source/blender/render/intern/include/render_types.h
    branches/particles/source/blender/render/intern/include/rendercore.h
    branches/particles/source/blender/render/intern/source/convertblender.c
    branches/particles/source/blender/render/intern/source/envmap.c
    branches/particles/source/blender/render/intern/source/pipeline.c
    branches/particles/source/blender/render/intern/source/rendercore.c
    branches/particles/source/blender/render/intern/source/shadeoutput.c
    branches/particles/source/blender/render/intern/source/texture.c
    branches/particles/source/blender/src/buttons_editing.c
    branches/particles/source/blender/src/buttons_object.c
    branches/particles/source/blender/src/buttons_shading.c
    branches/particles/source/blender/src/drawaction.c
    branches/particles/source/blender/src/drawarmature.c
    branches/particles/source/blender/src/drawimage.c
    branches/particles/source/blender/src/drawipo.c
    branches/particles/source/blender/src/drawobject.c
    branches/particles/source/blender/src/drawscript.c
    branches/particles/source/blender/src/drawseq.c
    branches/particles/source/blender/src/drawview.c
    branches/particles/source/blender/src/edit.c
    branches/particles/source/blender/src/editaction.c
    branches/particles/source/blender/src/editarmature.c
    branches/particles/source/blender/src/editconstraint.c
    branches/particles/source/blender/src/editface.c
    branches/particles/source/blender/src/editipo.c
    branches/particles/source/blender/src/editipo_mods.c
    branches/particles/source/blender/src/editkey.c
    branches/particles/source/blender/src/editmesh_mods.c
    branches/particles/source/blender/src/editnode.c
    branches/particles/source/blender/src/editobject.c
    branches/particles/source/blender/src/editscreen.c
    branches/particles/source/blender/src/editseq.c
    branches/particles/source/blender/src/edittime.c
    branches/particles/source/blender/src/filesel.c
    branches/particles/source/blender/src/header_action.c
    branches/particles/source/blender/src/header_filesel.c
    branches/particles/source/blender/src/header_info.c
    branches/particles/source/blender/src/header_view3d.c
    branches/particles/source/blender/src/interface_draw.c
    branches/particles/source/blender/src/multires.c
    branches/particles/source/blender/src/outliner.c
    branches/particles/source/blender/src/poseobject.c
    branches/particles/source/blender/src/seqeffects.c
    branches/particles/source/blender/src/sequence.c
    branches/particles/source/blender/src/space.c
    branches/particles/source/blender/src/toolbox.c
    branches/particles/source/blender/src/transform.c
    branches/particles/source/blender/src/transform_conversions.c
    branches/particles/source/blender/src/transform_generics.c
    branches/particles/source/blender/src/vpaint.c
    branches/particles/source/gameengine/Converter/BL_ActionActuator.cpp
    branches/particles/source/gameengine/Converter/BL_SkinDeformer.cpp
    branches/particles/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp

Added Paths:
-----------
    branches/particles/release/scripts/bpymodules/colladaImEx/translator.py
    branches/particles/release/scripts/weightpaint_average.py
    branches/particles/source/blender/include/BIF_meshlaplacian.h
    branches/particles/source/blender/makesdna/DNA_bake_types.h
    branches/particles/source/blender/render/extern/include/RE_raytrace.h
    branches/particles/source/blender/render/intern/source/rayshade.c
    branches/particles/source/blender/render/intern/source/raytrace.c
    branches/particles/source/blender/src/meshlaplacian.c

Removed Paths:
-------------
    branches/particles/bin/.blender/locale/pt_br/
    branches/particles/bin/.blender/locale/zh_cn/
    branches/particles/release/scripts/bpymodules/colladaImEx/translator.py
    branches/particles/source/blender/render/intern/source/ray.c

Modified: branches/particles/extern/bullet2/src/BulletDynamics/ConstraintSolver/btHingeConstraint.cpp
===================================================================
--- branches/particles/extern/bullet2/src/BulletDynamics/ConstraintSolver/btHingeConstraint.cpp	2007-08-14 20:55:59 UTC (rev 11603)
+++ branches/particles/extern/bullet2/src/BulletDynamics/ConstraintSolver/btHingeConstraint.cpp	2007-08-14 21:58:53 UTC (rev 11604)
@@ -17,176 +17,58 @@
 #include "btHingeConstraint.h"
 #include "BulletDynamics/Dynamics/btRigidBody.h"
 #include "LinearMath/btTransformUtil.h"
-#include "LinearMath/btSimdMinMax.h"
 #include <new>
 
-
 btHingeConstraint::btHingeConstraint():
 m_enableAngularMotor(false)
 {
 }
 
 btHingeConstraint::btHingeConstraint(btRigidBody& rbA,btRigidBody& rbB, const btVector3& pivotInA,const btVector3& pivotInB,
-									 btVector3& axisInA,btVector3& axisInB)
-									 :btTypedConstraint(rbA,rbB),
-									 m_angularOnly(false),
-									 m_enableAngularMotor(false)
+								 btVector3& axisInA,btVector3& axisInB)
+:btTypedConstraint(rbA,rbB),m_pivotInA(pivotInA),m_pivotInB(pivotInB),
+m_axisInA(axisInA),
+m_axisInB(-axisInB),
+m_angularOnly(false),
+m_enableAngularMotor(false)
 {
-	m_rbAFrame.getOrigin() = pivotInA;
-	
-	// since no frame is given, assume this to be zero angle and just pick rb transform axis
-	btVector3 rbAxisA1 = rbA.getCenterOfMassTransform().getBasis().getColumn(0);
-	btScalar projection = rbAxisA1.dot(axisInA);
-	if (projection > SIMD_EPSILON)
-		rbAxisA1 = rbAxisA1*projection - axisInA;
-	 else
-		rbAxisA1 = rbA.getCenterOfMassTransform().getBasis().getColumn(1);
-	
-	btVector3 rbAxisA2 = rbAxisA1.cross(axisInA);
 
-	m_rbAFrame.getBasis().setValue( rbAxisA1.getX(),rbAxisA2.getX(),axisInA.getX(),
-									rbAxisA1.getY(),rbAxisA2.getY(),axisInA.getY(),
-									rbAxisA1.getZ(),rbAxisA2.getZ(),axisInA.getZ() );
-
-	btQuaternion rotationArc = shortestArcQuat(axisInA,axisInB);
-	btVector3 rbAxisB1 =  quatRotate(rotationArc,rbAxisA1);
-	btVector3 rbAxisB2 =  rbAxisB1.cross(axisInB);
-	
-	
-	m_rbBFrame.getOrigin() = pivotInB;
-	m_rbBFrame.getBasis().setValue( rbAxisB1.getX(),rbAxisB2.getX(),-axisInB.getX(),
-									rbAxisB1.getY(),rbAxisB2.getY(),-axisInB.getY(),
-									rbAxisB1.getZ(),rbAxisB2.getZ(),-axisInB.getZ() );
-	
-	//start with free
-	m_lowerLimit = btScalar(1e30);
-	m_upperLimit = btScalar(-1e30);
-	m_biasFactor = 0.3f;
-	m_relaxationFactor = 1.0f;
-	m_limitSoftness = 0.9f;
-	m_solveLimit = false;
-
 }
 
 
 btHingeConstraint::btHingeConstraint(btRigidBody& rbA,const btVector3& pivotInA,btVector3& axisInA)
-:btTypedConstraint(rbA), m_angularOnly(false), m_enableAngularMotor(false)
-{
-
-	// since no frame is given, assume this to be zero angle and just pick rb transform axis
-	// fixed axis in worldspace
-	btVector3 rbAxisA1 = rbA.getCenterOfMassTransform().getBasis().getColumn(0);
-	btScalar projection = rbAxisA1.dot(axisInA);
-	if (projection > SIMD_EPSILON)
-		rbAxisA1 = rbAxisA1*projection - axisInA;
-	else
-		rbAxisA1 = rbA.getCenterOfMassTransform().getBasis().getColumn(1);
-
-	btVector3 rbAxisA2 = axisInA.cross(rbAxisA1);
-
-	m_rbAFrame.getOrigin() = pivotInA;
-	m_rbAFrame.getBasis().setValue( rbAxisA1.getX(),rbAxisA2.getX(),axisInA.getX(),
-									rbAxisA1.getY(),rbAxisA2.getY(),axisInA.getY(),
-									rbAxisA1.getZ(),rbAxisA2.getZ(),axisInA.getZ() );
-
-
-	btVector3 axisInB = rbA.getCenterOfMassTransform().getBasis() * -axisInA;
-
-	btQuaternion rotationArc = shortestArcQuat(axisInA,axisInB);
-	btVector3 rbAxisB1 =  quatRotate(rotationArc,rbAxisA1);
-	btVector3 rbAxisB2 = axisInB.cross(rbAxisB1);
-
-
-	m_rbBFrame.getOrigin() = rbA.getCenterOfMassTransform()(pivotInA);
-	m_rbBFrame.getBasis().setValue( rbAxisB1.getX(),rbAxisB2.getX(),axisInB.getX(),
-									rbAxisB1.getY(),rbAxisB2.getY(),axisInB.getY(),
-									rbAxisB1.getZ(),rbAxisB2.getZ(),axisInB.getZ() );
-	
-	//start with free
-	m_lowerLimit = btScalar(1e30);
-	m_upperLimit = btScalar(-1e30);
-	m_biasFactor = 0.3f;
-	m_relaxationFactor = 1.0f;
-	m_limitSoftness = 0.9f;
-	m_solveLimit = false;
-}
-
-btHingeConstraint::btHingeConstraint(btRigidBody& rbA,btRigidBody& rbB, 
-								     const btTransform& rbAFrame, const btTransform& rbBFrame)
-:btTypedConstraint(rbA,rbB),m_rbAFrame(rbAFrame),m_rbBFrame(rbBFrame),
+:btTypedConstraint(rbA),m_pivotInA(pivotInA),m_pivotInB(rbA.getCenterOfMassTransform()(pivotInA)),
+m_axisInA(axisInA),
+//fixed axis in worldspace
+m_axisInB(rbA.getCenterOfMassTransform().getBasis() * -axisInA),
 m_angularOnly(false),
 m_enableAngularMotor(false)
 {
-	// flip axis
-	m_rbBFrame.getBasis()[2][0] *= btScalar(-1.);
-	m_rbBFrame.getBasis()[2][1] *= btScalar(-1.);
-	m_rbBFrame.getBasis()[2][2] *= btScalar(-1.);
-
-	//start with free
-	m_lowerLimit = btScalar(1e30);
-	m_upperLimit = btScalar(-1e30);
-	m_biasFactor = 0.3f;
-	m_relaxationFactor = 1.0f;
-	m_limitSoftness = 0.9f;
-	m_solveLimit = false;
-}			
-
-
-
-btHingeConstraint::btHingeConstraint(btRigidBody& rbA, const btTransform& rbAFrame)
-:btTypedConstraint(rbA),m_rbAFrame(rbAFrame),m_rbBFrame(rbAFrame),
-m_angularOnly(false),
-m_enableAngularMotor(false)
-{
-	// flip axis
-	m_rbBFrame.getBasis()[2][0] *= btScalar(-1.);
-	m_rbBFrame.getBasis()[2][1] *= btScalar(-1.);
-	m_rbBFrame.getBasis()[2][2] *= btScalar(-1.);
-
-
-	//start with free
-	m_lowerLimit = btScalar(1e30);
-	m_upperLimit = btScalar(-1e30);	
-	m_biasFactor = 0.3f;
-	m_relaxationFactor = 1.0f;
-	m_limitSoftness = 0.9f;
-	m_solveLimit = false;
+	
 }
 
 void	btHingeConstraint::buildJacobian()
 {
 	m_appliedImpulse = btScalar(0.);
 
+	btVector3	normal(0,0,0);
+
 	if (!m_angularOnly)
 	{
-		btVector3 pivotAInW = m_rbA.getCenterOfMassTransform()*m_rbAFrame.getOrigin();
-		btVector3 pivotBInW = m_rbB.getCenterOfMassTransform()*m_rbBFrame.getOrigin();
-		btVector3 relPos = pivotBInW - pivotAInW;
-
-		btVector3 normal[3];
-		if (relPos.length2() > SIMD_EPSILON)
-		{
-			normal[0] = relPos.normalized();
-		}
-		else
-		{
-			normal[0].setValue(btScalar(1.0),0,0);
-		}
-
-		btPlaneSpace1(normal[0], normal[1], normal[2]);
-
 		for (int i=0;i<3;i++)
 		{
+			normal[i] = 1;
 			new (&m_jac[i]) btJacobianEntry(
 				m_rbA.getCenterOfMassTransform().getBasis().transpose(),
 				m_rbB.getCenterOfMassTransform().getBasis().transpose(),
-				pivotAInW - m_rbA.getCenterOfMassPosition(),
-				pivotBInW - m_rbB.getCenterOfMassPosition(),
-				normal[i],
+				m_rbA.getCenterOfMassTransform()*m_pivotInA - m_rbA.getCenterOfMassPosition(),
+				m_rbB.getCenterOfMassTransform()*m_pivotInB - m_rbB.getCenterOfMassPosition(),
+				normal,
 				m_rbA.getInvInertiaDiagLocal(),
 				m_rbA.getInvMass(),
 				m_rbB.getInvInertiaDiagLocal(),
 				m_rbB.getInvMass());
+			normal[i] = 0;
 		}
 	}
 
@@ -197,12 +79,12 @@
 	btVector3 jointAxis0local;
 	btVector3 jointAxis1local;
 	
-	btPlaneSpace1(m_rbAFrame.getBasis().getColumn(2),jointAxis0local,jointAxis1local);
+	btPlaneSpace1(m_axisInA,jointAxis0local,jointAxis1local);
 
-	getRigidBodyA().getCenterOfMassTransform().getBasis() * m_rbAFrame.getBasis().getColumn(2);
+	getRigidBodyA().getCenterOfMassTransform().getBasis() * m_axisInA;
 	btVector3 jointAxis0 = getRigidBodyA().getCenterOfMassTransform().getBasis() * jointAxis0local;
 	btVector3 jointAxis1 = getRigidBodyA().getCenterOfMassTransform().getBasis() * jointAxis1local;
-	btVector3 hingeAxisWorld = getRigidBodyA().getCenterOfMassTransform().getBasis() * m_rbAFrame.getBasis().getColumn(2);
+	btVector3 hingeAxisWorld = getRigidBodyA().getCenterOfMassTransform().getBasis() * m_axisInA;
 		
 	new (&m_jacAng[0])	btJacobianEntry(jointAxis0,
 		m_rbA.getCenterOfMassTransform().getBasis().transpose(),
@@ -223,71 +105,44 @@
 		m_rbB.getInvInertiaDiagLocal());
 
 
-	// Compute limit information
-	btScalar hingeAngle = getHingeAngle();  
 
-	//set bias, sign, clear accumulator
-	m_correction = btScalar(0.);
-	m_limitSign = btScalar(0.);
-	m_solveLimit = false;
-	m_accLimitImpulse = btScalar(0.);
-
-	if (m_lowerLimit < m_upperLimit)
-	{
-		if (hingeAngle <= m_lowerLimit*m_limitSoftness)
-		{
-			m_correction = (m_lowerLimit - hingeAngle);
-			m_limitSign = 1.0f;
-			m_solveLimit = true;
-		} 
-		else if (hingeAngle >= m_upperLimit*m_limitSoftness)
-		{
-			m_correction = m_upperLimit - hingeAngle;
-			m_limitSign = -1.0f;
-			m_solveLimit = true;
-		}
-	}
-
-	//Compute K = J*W*J' for hinge axis
-	btVector3 axisA =  getRigidBodyA().getCenterOfMassTransform().getBasis() *  m_rbAFrame.getBasis().getColumn(2);
-	m_kHinge =   1.0f / (getRigidBodyA().computeAngularImpulseDenominator(axisA) +
-			             getRigidBodyB().computeAngularImpulseDenominator(axisA));
-
 }
 
 void	btHingeConstraint::solveConstraint(btScalar	timeStep)
 {
 
-	btVector3 pivotAInW = m_rbA.getCenterOfMassTransform()*m_rbAFrame.getOrigin();
-	btVector3 pivotBInW = m_rbB.getCenterOfMassTransform()*m_rbBFrame.getOrigin();
+	btVector3 pivotAInW = m_rbA.getCenterOfMassTransform()*m_pivotInA;
+	btVector3 pivotBInW = m_rbB.getCenterOfMassTransform()*m_pivotInB;
 
+	btVector3 normal(0,0,0);
 	btScalar tau = btScalar(0.3);
 	btScalar damping = btScalar(1.);
 
 //linear part
 	if (!m_angularOnly)
 	{
-		btVector3 rel_pos1 = pivotAInW - m_rbA.getCenterOfMassPosition(); 
-		btVector3 rel_pos2 = pivotBInW - m_rbB.getCenterOfMassPosition();
-
-		btVector3 vel1 = m_rbA.getVelocityInLocalPoint(rel_pos1);
-		btVector3 vel2 = m_rbB.getVelocityInLocalPoint(rel_pos2);
-		btVector3 vel = vel1 - vel2;
-
 		for (int i=0;i<3;i++)
 		{		
-			const btVector3& normal = m_jac[i].m_linearJointAxis;
+			normal[i] = 1;
 			btScalar jacDiagABInv = btScalar(1.) / m_jac[i].getDiagonal();
 
+			btVector3 rel_pos1 = pivotAInW - m_rbA.getCenterOfMassPosition(); 
+			btVector3 rel_pos2 = pivotBInW - m_rbB.getCenterOfMassPosition();
+			
+			btVector3 vel1 = m_rbA.getVelocityInLocalPoint(rel_pos1);
+			btVector3 vel2 = m_rbB.getVelocityInLocalPoint(rel_pos2);
+			btVector3 vel = vel1 - vel2;
 			btScalar rel_vel;
 			rel_vel = normal.dot(vel);
 			//positional error (zeroth order error)
 			btScalar depth = -(pivotAInW - pivotBInW).dot(normal); //this is the error projected on the normal
-			btScalar impulse = depth*tau/timeStep  * jacDiagABInv -  rel_vel * jacDiagABInv;
+			btScalar impulse = depth*tau/timeStep  * jacDiagABInv -  damping * rel_vel * jacDiagABInv * damping;
 			m_appliedImpulse += impulse;
 			btVector3 impulse_vector = normal * impulse;
 			m_rbA.applyImpulse(impulse_vector, pivotAInW - m_rbA.getCenterOfMassPosition());

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list