move tracking functions into math_rotation.c (no functional changes)
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user