[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [27090] trunk/blender/source/blender/ blenlib/intern/math_rotation.c: Fix dual quaternions flipping in case of stretched (not scaled) bones.

Brecht Van Lommel brecht at blender.org
Mon Feb 22 19:54:09 CET 2010


Revision: 27090
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27090
Author:   blendix
Date:     2010-02-22 19:53:46 +0100 (Mon, 22 Feb 2010)

Log Message:
-----------
Fix dual quaternions flipping in case of stretched (not scaled) bones.

Modified Paths:
--------------
    trunk/blender/source/blender/blenlib/intern/math_rotation.c

Modified: trunk/blender/source/blender/blenlib/intern/math_rotation.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/math_rotation.c	2010-02-22 18:07:16 UTC (rev 27089)
+++ trunk/blender/source/blender/blenlib/intern/math_rotation.c	2010-02-22 18:53:46 UTC (rev 27090)
@@ -1333,8 +1333,14 @@
 
 	if((determinant_m4(mat) < 0.0f) || len_v3(dscale) > 1e-4) {
 		/* extract R and S  */
-		mat4_to_quat(basequat,baseRS);
-		quat_to_mat4(baseR,basequat);
+		float tmp[4][4];
+
+		 /* extra orthogonalize, to avoid flipping with stretched bones */
+		copy_m4_m4(tmp, baseRS);
+		orthogonalize_m4(tmp, 1);
+		mat4_to_quat(basequat, tmp);
+
+		quat_to_mat4(baseR, basequat);
 		copy_v3_v3(baseR[3], baseRS[3]);
 
 		invert_m4_m4(baseinv, basemat);





More information about the Bf-blender-cvs mailing list