[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16022] trunk/blender/source/gameengine/ Converter/BL_BlenderDataConversion.cpp: BGE bug #17450 fixed: When we have parented objects with no scale-applyed objects the ray hit system doesn 't work properly.

Benoit Bolsee benoit.bolsee at online.be
Fri Aug 8 11:57:17 CEST 2008


Revision: 16022
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16022
Author:   ben2610
Date:     2008-08-08 11:57:17 +0200 (Fri, 08 Aug 2008)

Log Message:
-----------
BGE bug #17450 fixed: When we have parented objects with no scale-applyed objects the ray hit system doesn't work properly. Fix by separating rotation and scaling in the parent inverse node to keep scaling correct down to the leaf objects. Only isotropric scaling should be used, as always with the BGE.

Modified Paths:
--------------
    trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp

Modified: trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp	2008-08-08 09:52:32 UTC (rev 16021)
+++ trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp	2008-08-08 09:57:17 UTC (rev 16022)
@@ -1939,7 +1939,17 @@
 				float* fl = (float*) blenderobject->parentinv;
 				MT_Transform parinvtrans(fl);
 				parentinversenode->SetLocalPosition(parinvtrans.getOrigin());
-				parentinversenode->SetLocalOrientation(parinvtrans.getBasis());
+				// problem here: the parent inverse transform combines scaling and rotation 
+				// in the basis but the scenegraph needs separate rotation and scaling.
+				// This is not important for OpenGL (it uses 4x4 matrix) but it is important
+				// for the physic engine that needs a separate scaling
+				//parentinversenode->SetLocalOrientation(parinvtrans.getBasis());
+
+				// Extract the rotation and the scaling from the basis
+				MT_Matrix3x3 inverseOrientation(parinvtrans.getRotation());
+				parentinversenode->SetLocalOrientation(inverseOrientation);
+				MT_Matrix3x3 scale(inverseOrientation.transposed()*parinvtrans.getBasis());
+				parentinversenode->SetLocalScale(MT_Vector3(scale[0][0], scale[1][1], scale[2][2]));
 				
 				parentinversenode->AddChild(gameobj->GetSGNode());
 			}





More information about the Bf-blender-cvs mailing list