[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19480] trunk/blender/source/blender/src/ editarmature_retarget.c: == etch-a-ton ==

Martin Poirier theeth at yahoo.com
Tue Mar 31 16:29:58 CEST 2009


Revision: 19480
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19480
Author:   theeth
Date:     2009-03-31 16:29:58 +0200 (Tue, 31 Mar 2009)

Log Message:
-----------
== etch-a-ton ==

Correct joint-guided roll to use the previous bone, not the following (that was silly). Also made first bone use view axis (since it has no previous), this is much nicer that using rotation correction only. Using the joint roll option makes it MUCH more orientation independant.

Modified Paths:
--------------
    trunk/blender/source/blender/src/editarmature_retarget.c

Modified: trunk/blender/source/blender/src/editarmature_retarget.c
===================================================================
--- trunk/blender/source/blender/src/editarmature_retarget.c	2009-03-31 08:13:21 UTC (rev 19479)
+++ trunk/blender/source/blender/src/editarmature_retarget.c	2009-03-31 14:29:58 UTC (rev 19480)
@@ -201,12 +201,12 @@
 	}
 }
 
-float rollBoneByQuatJoint(RigEdge *edge, RigEdge *previous, float qrot[4], float qroll[4])
+float rollBoneByQuatJoint(RigEdge *edge, RigEdge *previous, float qrot[4], float qroll[4], float up_axis[3])
 {
 	if (previous == NULL)
 	{
-		QuatOne(qroll);
-		return rollBoneByQuat(edge->bone, edge->up_axis, qrot);
+		/* default to up_axis if no previous */
+		return rollBoneByQuatAligned(edge->bone, edge->up_axis, qrot, qroll, up_axis);
 	}
 	else
 	{
@@ -223,9 +223,8 @@
 		}
 		else
 		{
-			/* SHOULDN'T BE HERE */
-			QuatOne(qroll);
-			return rollBoneByQuat(edge->bone, edge->up_axis, qrot);
+			/* default to up_axis if first bone in the chain is an offset */
+			return rollBoneByQuatAligned(edge->bone, edge->up_axis, qrot, qroll, up_axis);
 		}
 		
 		VecSubf(vec_second, edge->bone->tail, edge->bone->head);
@@ -1846,7 +1845,7 @@
 		}
 		else if (G.scene->toolsettings->skgen_retarget_roll == SK_RETARGET_ROLL_JOINT)
 		{
-			bone->roll = rollBoneByQuatJoint(edge, edge->next, qrot, qroll);
+			bone->roll = rollBoneByQuatJoint(edge, edge->prev, qrot, qroll, up_axis);
 		}
 		else
 		{





More information about the Bf-blender-cvs mailing list