move tracking functions into math_rotation.c (no functional changes)

This commit is contained in:
Campbell Barton
2010-10-08 02:08:11 +00:00
parent afa1bf33fb
commit c6e2e7aa93
3 changed files with 74 additions and 54 deletions
+9 -54
View File
@@ -599,16 +599,6 @@ static int calc_curve_deform(Scene *scene, Object *par, float *co, short axis, C
}
#endif
static float q_x90d[4] = {0.70710676908493, 0.70710676908493, 0.0, 0.0}; // float rot_axis[3]= {1,0,0}; axis_angle_to_quat(q, rot_axis, 90 * (M_PI / 180));
static float q_y90d[4] = {0.70710676908493, 0.0, 0.70710676908493, 0.0}; // float rot_axis[3]= {0,1,0}; axis_angle_to_quat(q, rot_axis, 90 * (M_PI / 180));
static float q_z90d[4] = {0.70710676908493, 0.0, 0.0, 0.70710676908493}; // float rot_axis[3]= {0,0,2}; axis_angle_to_quat(q, rot_axis, 90 * (M_PI / 180));
static float q_nx90d[4] = {0.70710676908493, -0.70710676908493, 0.0, 0.0}; // float rot_axis[3]= {1,0,0}; axis_angle_to_quat(q, rot_axis, -90 * (M_PI / 180));
static float q_ny90d[4] = {0.70710676908493, 0.0, -0.70710676908493, 0.0}; // float rot_axis[3]= {0,1,0}; axis_angle_to_quat(q, rot_axis, -90 * (M_PI / 180));
static float q_nz90d[4] = {0.70710676908493, 0.0, 0.0, -0.70710676908493}; // float rot_axis[3]= {0,0,2}; axis_angle_to_quat(q, rot_axis, -90 * (M_PI / 180));
if(cd->no_rot_axis) { /* set by caller */
/* this is not exactly the same as 2.4x, since the axis is having rotation removed rather then
@@ -635,53 +625,18 @@ static int calc_curve_deform(Scene *scene, Object *par, float *co, short axis, C
* Notice X,Y,Z Up all have light colors and each ordered CCW.
*
* Now for Neg Up XYZ, the colors are all dark, and ordered clockwise - Campbell
*
* note: moved functions into quat_apply_track/vec_apply_track
* */
copy_qt_qt(quat, new_quat);
copy_v3_v3(cent, co);
switch(axis) {
case MOD_CURVE_POSX:
mul_qt_qtqt(quat, new_quat, q_y90d);
/* zero the axis which is not used,
* the big block of text above now applies to these 3 lines */
quat_apply_track(quat, axis-1);
vec_apply_track(cent, axis-1);
cent[axis < 4 ? axis-1 : axis-4]= 0.0f;
cent[0]= 0.0;
cent[1]= co[2];
cent[2]= co[1];
break;
case MOD_CURVE_NEGX:
mul_qt_qtqt(quat, new_quat, q_ny90d);
cent[0]= 0.0;
cent[1]= -co[1];
cent[2]= co[2];
break;
case MOD_CURVE_POSY:
mul_qt_qtqt(quat, new_quat, q_x90d);
cent[0]= co[2];
cent[1]= 0.0;
cent[2]= -co[0];
break;
case MOD_CURVE_NEGY:
mul_qt_qtqt(quat, new_quat, q_nx90d);
cent[0]= -co[0];
cent[1]= 0.0;
cent[2]= -co[2];
break;
case MOD_CURVE_POSZ:
mul_qt_qtqt(quat, new_quat, q_z90d);
cent[0]= co[1];
cent[1]= -co[0];
cent[2]= 0.0;
break;
case MOD_CURVE_NEGZ:
mul_qt_qtqt(quat, new_quat, q_nz90d);
cent[0]= co[0];
cent[1]= -co[1];
cent[2]= 0.0;
break;
}
/* scale if enabled */
if(cu->flag & CU_PATH_RADIUS)
@@ -169,6 +169,9 @@ void mul_v3m3_dq(float r[3], float R[3][3], DualQuat *dq);
void mat4_to_dquat(DualQuat *r, float base[4][4], float M[4][4]);
void dquat_to_mat4(float R[4][4], DualQuat *dq);
void quat_apply_track(float quat[4], short axis);
void vec_apply_track(float vec[3], short axis);
float lens_to_angle(float lens);
float angle_to_lens(float angle);
@@ -1530,6 +1530,68 @@ void copy_dq_dq(DualQuat *dq1, DualQuat *dq2)
memcpy(dq1, dq2, sizeof(DualQuat));
}
/* axis matches eTrackToAxis_Modes */
void quat_apply_track(float quat[4], short axis)
{
/* axis calculated as follows */
/* float axis[3]= {1,0,0}; axis_angle_to_quat(q, axis, 90 * (M_PI / 180));
float axis[3]= {0,1,0}; axis_angle_to_quat(q, axis, 90 * (M_PI / 180));
float axis[3]= {0,0,2}; axis_angle_to_quat(q, axis, 90 * (M_PI / 180));
float axis[3]= {1,0,0}; axis_angle_to_quat(q, axis, -90 * (M_PI / 180));
float axis[3]= {0,1,0}; axis_angle_to_quat(q, axis, -90 * (M_PI / 180));
float axis[3]= {0,0,2}; axis_angle_to_quat(q, axis, -90 * (M_PI / 180)); */
/* notice x/y flipped intentionally */
const float quat_track[][4]= {{0.70710676908493, 0.0, 0.70710676908493, 0.0}, /* pos-y */
{0.70710676908493, 0.70710676908493, 0.0, 0.0}, /* pos-x */
{0.70710676908493, 0.0, 0.0, 0.70710676908493}, /* pos-z */
{0.70710676908493, 0.0, -0.70710676908493, 0.0}, /* neg-y */
{0.70710676908493, -0.70710676908493, 0.0, 0.0}, /* neg-x */
{0.70710676908493, 0.0, 0.0, -0.70710676908493}};/* neg-z */
mul_qt_qtqt(quat, quat, quat_track[axis]);
}
void vec_apply_track(float vec[3], short axis)
{
float tvec[3];
copy_v3_v3(tvec, vec);
switch(axis) {
case 0: /* pos-x */
/* vec[0]= 0.0; */
vec[1]= tvec[2];
vec[2]= tvec[1];
break;
case 1: /* pos-y */
vec[0]= tvec[2];
/* vec[1]= 0.0; */
vec[2]= -tvec[0];
break;
case 2: /* pos-z */
vec[0]= tvec[1];
vec[1]= -tvec[0];
// vec[2]= 0.0; */
break;
case 3: /* neg-x */
/* vec[0]= 0.0; */
vec[1]= -tvec[1];
vec[2]= tvec[2];
break;
case 4: /* neg-y */
vec[0]= -tvec[0];
/* vec[1]= 0.0; */
vec[2]= -tvec[2];
break;
case 5: /* neg-z */
vec[0]= tvec[0];
vec[1]= -tvec[1];
/* vec[2]= 0.0; */
break;
}
}
/* lense/angle conversion (radians) */
float lens_to_angle(float lens)
{