Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Poirier <theeth@yahoo.com>2009-03-31 18:29:58 +0400
committerMartin Poirier <theeth@yahoo.com>2009-03-31 18:29:58 +0400
commit74e6231ff45dfe09d213a4deb72641e8138e260c (patch)
tree649e26e41c5f612749b7c5186da916c085fc4312
parentf78ee08b67075549551a51227c66f07b505f928b (diff)
== 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.
-rw-r--r--source/blender/src/editarmature_retarget.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/source/blender/src/editarmature_retarget.c b/source/blender/src/editarmature_retarget.c
index ad114868a69..f42fed06757 100644
--- a/source/blender/src/editarmature_retarget.c
+++ b/source/blender/src/editarmature_retarget.c
@@ -201,12 +201,12 @@ float rollBoneByQuatAligned(EditBone *bone, float old_up_axis[3], float qrot[4],
}
}
-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 @@ float rollBoneByQuatJoint(RigEdge *edge, RigEdge *previous, float qrot[4], float
}
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 @@ static void repositionBone(RigGraph *rigg, RigEdge *edge, float vec0[3], float v
}
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
{