[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23029] branches/blender2.5/blender/source /blender: 2.5 Anim Bugfixes:
Joshua Leung
aligorith at gmail.com
Sun Sep 6 09:22:32 CEST 2009
Revision: 23029
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23029
Author: aligorith
Date: 2009-09-06 09:22:32 +0200 (Sun, 06 Sep 2009)
Log Message:
-----------
2.5 Anim Bugfixes:
* Rotation order code should be more correct now. Previously was only shuffling axes, and was also doing some evil things to provided that that it shouldn't have been doing, which was causing some flipping issues.
* Built-in keyingsets for 'visual' options should now be more correct. The old code had typos, giving wrong array indices to start from.
Modified Paths:
--------------
branches/blender2.5/blender/source/blender/blenlib/intern/arithb.c
branches/blender2.5/blender/source/blender/editors/animation/keyingsets.c
branches/blender2.5/blender/source/blender/editors/transform/transform.c
Modified: branches/blender2.5/blender/source/blender/blenlib/intern/arithb.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenlib/intern/arithb.c 2009-09-06 06:47:59 UTC (rev 23028)
+++ branches/blender2.5/blender/source/blender/blenlib/intern/arithb.c 2009-09-06 07:22:32 UTC (rev 23029)
@@ -2835,9 +2835,9 @@
double ti, tj, th, ci, cj, ch, si, sj, sh, cc, cs, sc, ss;
double a[3];
- if (R->parity) e[1] = -e[1];
+ if (R->parity) e[1] = -e[1]; // xxx watch it!
- ti = e[0]/2; tj = e[1]/2; th = e[2]/2;
+ ti = e[i]/2; tj = e[j]/2; th = e[k]/2;
ci = cos(ti); cj = cos(tj); ch = cos(th);
si = sin(ti); sj = sin(tj); sh = sin(th);
@@ -2874,13 +2874,12 @@
double ti, tj, th, ci, cj, ch, si, sj, sh, cc, cs, sc, ss;
if (R->parity) {
- e[0] = -e[0];
- e[1] = -e[1];
- e[2] = -e[2];
+ ti = -e[i]; tj = -e[j]; th = -e[k];
}
+ else {
+ ti = e[i]; tj = e[j]; th = e[k];
+ }
- ti = e[0]; tj = e[1]; th = e[2];
-
ci = cos(ti); cj = cos(tj); ch = cos(th);
si = sin(ti); sj = sin(tj); sh = sin(th);
@@ -2908,17 +2907,17 @@
{
RotOrderInfo *R= GET_ROTATIONORDER_INFO(order);
short i=R->i, j=R->j, k=R->k;
- double cy = sqrt(M[i][i]*M[i][i] + M[j][i]*M[j][i]);
+ double cy = sqrt(M[i][i]*M[i][i] + M[i][j]*M[i][j]);
if (cy > 16*FLT_EPSILON) {
- e[0] = atan2(M[j][k], M[k][k]);
- e[1] = atan2(-M[i][k], cy);
- e[2] = atan2(M[i][j], M[i][i]);
+ e[i] = atan2(M[j][k], M[k][k]);
+ e[j] = atan2(-M[i][k], cy);
+ e[k] = atan2(M[i][j], M[i][i]);
}
else {
- e[0] = atan2(-M[k][j], M[j][j]);
- e[1] = atan2(-M[i][k], cy);
- e[2] = 0;
+ e[i] = atan2(-M[k][j], M[j][j]);
+ e[j] = atan2(-M[i][k], cy);
+ e[k] = 0;
}
if (R->parity) {
@@ -2944,21 +2943,28 @@
{
RotOrderInfo *R= GET_ROTATIONORDER_INFO(order);
short i=R->i, j=R->j, k=R->k;
- double cy = sqrt(M[i][i]*M[i][i] + M[j][i]*M[j][i]);
+ float m[3][3];
+ double cy;
+ /* process the matrix first */
+ Mat3CpyMat3(m, M);
+ Mat3Ortho(m);
+
+ cy= sqrt(m[i][i]*m[i][i] + m[i][j]*m[i][j]);
+
if (cy > 16*FLT_EPSILON) {
- e1[0] = atan2(M[j][k], M[k][k]);
- e1[1] = atan2(-M[i][k], cy);
- e1[2] = atan2(M[i][j], M[i][i]);
+ e1[i] = atan2(m[j][k], m[k][k]);
+ e1[j] = atan2(-m[i][k], cy);
+ e1[k] = atan2(m[i][j], m[i][i]);
- e2[0] = atan2(-M[j][k], -M[k][k]);
- e2[1] = atan2(-M[i][k], -cy);
- e2[2] = atan2(-M[i][j], -M[i][i]);
+ e2[i] = atan2(-m[j][k], -m[k][k]);
+ e2[j] = atan2(-m[i][k], -cy);
+ e2[k] = atan2(-m[i][j], -m[i][i]);
}
else {
- e1[0] = atan2(-M[k][j], M[j][j]);
- e1[1] = atan2(-M[i][k], cy);
- e1[2] = 0;
+ e1[i] = atan2(-m[k][j], m[j][j]);
+ e1[j] = atan2(-m[i][k], cy);
+ e1[k] = 0;
VecCopyf(e2, e1);
}
@@ -2975,7 +2981,6 @@
}
/* uses 2 methods to retrieve eulers, and picks the closest */
-// FIXME: this does not work well with the other rotation modes...
void Mat3ToCompatibleEulO(float mat[3][3], float eul[3], float oldrot[3], short order)
{
float eul1[3], eul2[3];
Modified: branches/blender2.5/blender/source/blender/editors/animation/keyingsets.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/animation/keyingsets.c 2009-09-06 06:47:59 UTC (rev 23028)
+++ branches/blender2.5/blender/source/blender/editors/animation/keyingsets.c 2009-09-06 07:22:32 UTC (rev 23029)
@@ -801,24 +801,24 @@
/* Keying Sets with Keying Flags ************************* */
/* Keying Set - "VisualLoc" ---------- */
- BI_KS_DEFINE_BEGIN("VisualLoc", 0)
+ BI_KS_DEFINE_BEGIN("VisualLoc", INSERTKEY_MATRIX)
BI_KS_PATHS_BEGIN(1)
- BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "location", INSERTKEY_MATRIX, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_TEMPLATE_ITEM)
+ BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "location", 0, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_TEMPLATE_ITEM)
BI_KS_PATHS_END
BI_KS_DEFINE_END,
/* Keying Set - "Rotation" ---------- */
- BI_KS_DEFINE_BEGIN("VisualRot", 0)
+ BI_KS_DEFINE_BEGIN("VisualRot", INSERTKEY_MATRIX)
BI_KS_PATHS_BEGIN(1)
- BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN|KSP_TEMPLATE_PCHAN_ROT, "rotation", INSERTKEY_MATRIX, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_TEMPLATE_ITEM)
+ BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN|KSP_TEMPLATE_PCHAN_ROT, "rotation", 0, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_TEMPLATE_ITEM)
BI_KS_PATHS_END
BI_KS_DEFINE_END,
/* Keying Set - "VisualLocRot" ---------- */
- BI_KS_DEFINE_BEGIN("VisualLocRot", 0)
+ BI_KS_DEFINE_BEGIN("VisualLocRot", INSERTKEY_MATRIX)
BI_KS_PATHS_BEGIN(2)
- BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "location", INSERTKEY_MATRIX, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_TEMPLATE_ITEM),
- BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN|KSP_TEMPLATE_PCHAN_ROT, "rotation", INSERTKEY_MATRIX, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_TEMPLATE_ITEM)
+ BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "location", 0, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_TEMPLATE_ITEM),
+ BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN|KSP_TEMPLATE_PCHAN_ROT, "rotation", 0, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_TEMPLATE_ITEM)
BI_KS_PATHS_END
BI_KS_DEFINE_END
};
Modified: branches/blender2.5/blender/source/blender/editors/transform/transform.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/transform/transform.c 2009-09-06 06:47:59 UTC (rev 23028)
+++ branches/blender2.5/blender/source/blender/editors/transform/transform.c 2009-09-06 07:22:32 UTC (rev 23029)
@@ -1738,12 +1738,12 @@
eul[1]= tdi->roty[0];
eul[2]= tdi->rotz[0];
- EulToMat4(eul, cob.matrix);
+ EulOToMat4(eul, td->rotOrder, cob.matrix);
}
else {
/* eulers */
if (td->ext)
- EulToMat4(td->ext->rot, cob.matrix);
+ EulOToMat4(td->ext->rot, td->rotOrder, cob.matrix);
else
return;
}
@@ -1796,7 +1796,7 @@
TransDataIpokey *tdi= td->tdi;
float eul[3];
- Mat4ToEul(cob.matrix, eul);
+ Mat4ToEulO(cob.matrix, eul, td->rotOrder);
tdi->rotx[0]= eul[0];
tdi->roty[0]= eul[1];
@@ -1804,7 +1804,7 @@
}
else {
/* eulers */
- Mat4ToEul(cob.matrix, td->ext->rot);
+ Mat4ToEulO(cob.matrix, td->ext->rot, td->rotOrder);
}
}
}
More information about the Bf-blender-cvs
mailing list