add shear_mat

This commit is contained in:
David Rose 2003-07-23 01:22:37 +00:00
parent 633409b2bf
commit 5808fe2b1f
5 changed files with 83 additions and 14 deletions

View File

@ -610,6 +610,13 @@ decompose_matrix(const FLOATNAME(LMatrix3) &mat,
fabs(new_mat(1, 0)) + fabs(new_mat(1, 2)) + fabs(new_mat(1, 0)) + fabs(new_mat(1, 2)) +
fabs(new_mat(2, 0)) + fabs(new_mat(2, 1))) < 0.0001; fabs(new_mat(2, 0)) + fabs(new_mat(2, 1))) < 0.0001;
/*
if (!has_no_shear) {
linmath_cat.info() << "shear:\n";
new_mat.write(linmath_cat.info(false), 2);
}
*/
return has_no_shear; return has_no_shear;
} }

View File

@ -1077,7 +1077,7 @@ rotate_mat_normaxis(FLOATTYPE angle, const FLOATNAME(LVecBase3) &axis,
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
INLINE_LINMATH FLOATNAME(LMatrix3) FLOATNAME(LMatrix3):: INLINE_LINMATH FLOATNAME(LMatrix3) FLOATNAME(LMatrix3)::
scale_mat(const FLOATNAME(LVecBase3) &scale) { scale_mat(const FLOATNAME(LVecBase3) &scale) {
return FLOATNAME(LMatrix3)(scale[0], 0.0f, 0.0f, return FLOATNAME(LMatrix3)(scale._v.v._0, 0.0f, 0.0f,
0.0f, scale._v.v._1, 0.0f, 0.0f, scale._v.v._1, 0.0f,
0.0f, 0.0f, scale._v.v._2); 0.0f, 0.0f, scale._v.v._2);
} }
@ -1095,6 +1095,32 @@ scale_mat(FLOATTYPE sx, FLOATTYPE sy, FLOATTYPE sz) {
0.0f, 0.0f, sz); 0.0f, 0.0f, sz);
} }
////////////////////////////////////////////////////////////////////
// Function: LMatrix::shear_mat
// Access: Public, Static
// Description: Returns a matrix that applies the indicated
// shear in each of the three planes.
////////////////////////////////////////////////////////////////////
INLINE_LINMATH FLOATNAME(LMatrix3) FLOATNAME(LMatrix3)::
shear_mat(const FLOATNAME(LVecBase3) &shear) {
return FLOATNAME(LMatrix3)(1.0f, 0.0f, 0.0f,
shear._v.v._0, 1.0f, 0.0f,
shear._v.v._1, shear._v.v._2, 1.0f);
}
////////////////////////////////////////////////////////////////////
// Function: LMatrix::shear_mat
// Access: Public, Static
// Description: Returns a matrix that applies the indicated
// shear in each of the three planes.
////////////////////////////////////////////////////////////////////
INLINE_LINMATH FLOATNAME(LMatrix3) FLOATNAME(LMatrix3)::
shear_mat(FLOATTYPE shxy, FLOATTYPE shxz, FLOATTYPE shyz) {
return FLOATNAME(LMatrix3)(1.0f, 0.0f, 0.0f,
shxy, 1.0f, 0.0f,
shxz, shyz, 1.0f);
}
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// Function: LMatrix3::almost_equal // Function: LMatrix3::almost_equal
// Access: Public // Access: Public

View File

@ -157,6 +157,11 @@ PUBLISHED:
static INLINE_LINMATH FLOATNAME(LMatrix3) static INLINE_LINMATH FLOATNAME(LMatrix3)
scale_mat(FLOATTYPE sx, FLOATTYPE sy, FLOATTYPE sz); scale_mat(FLOATTYPE sx, FLOATTYPE sy, FLOATTYPE sz);
static INLINE_LINMATH FLOATNAME(LMatrix3)
shear_mat(const FLOATNAME(LVecBase3) &shear);
static INLINE_LINMATH FLOATNAME(LMatrix3)
shear_mat(FLOATTYPE shxy, FLOATTYPE shxz, FLOATTYPE shyz);
static const FLOATNAME(LMatrix3) &convert_mat(CoordinateSystem from, static const FLOATNAME(LMatrix3) &convert_mat(CoordinateSystem from,
CoordinateSystem to); CoordinateSystem to);

View File

@ -1332,8 +1332,7 @@ scale_mat(const FLOATNAME(LVecBase3) &scale) {
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
INLINE_LINMATH FLOATNAME(LMatrix4) FLOATNAME(LMatrix4):: INLINE_LINMATH FLOATNAME(LMatrix4) FLOATNAME(LMatrix4)::
scale_mat(FLOATTYPE sx, FLOATTYPE sy, FLOATTYPE sz) { scale_mat(FLOATTYPE sx, FLOATTYPE sy, FLOATTYPE sz) {
return FLOATNAME(LMatrix4)( return FLOATNAME(LMatrix4)(sx, 0.0f, 0.0f, 0.0f,
sx, 0.0f, 0.0f, 0.0f,
0.0f, sy, 0.0f, 0.0f, 0.0f, sy, 0.0f, 0.0f,
0.0f, 0.0f, sz, 0.0f, 0.0f, 0.0f, sz, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f); 0.0f, 0.0f, 0.0f, 1.0f);
@ -1347,13 +1346,40 @@ scale_mat(FLOATTYPE sx, FLOATTYPE sy, FLOATTYPE sz) {
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
INLINE_LINMATH FLOATNAME(LMatrix4) FLOATNAME(LMatrix4):: INLINE_LINMATH FLOATNAME(LMatrix4) FLOATNAME(LMatrix4)::
scale_mat(FLOATTYPE scale) { scale_mat(FLOATTYPE scale) {
return FLOATNAME(LMatrix4)( return FLOATNAME(LMatrix4)(scale, 0.0f, 0.0f, 0.0f,
scale, 0.0f, 0.0f, 0.0f,
0.0f, scale, 0.0f, 0.0f, 0.0f, scale, 0.0f, 0.0f,
0.0f, 0.0f, scale, 0.0f, 0.0f, 0.0f, scale, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f); 0.0f, 0.0f, 0.0f, 1.0f);
} }
////////////////////////////////////////////////////////////////////
// Function: LMatrix::shear_mat
// Access: Public, Static
// Description: Returns a matrix that applies the indicated
// shear in each of the three planes.
////////////////////////////////////////////////////////////////////
INLINE_LINMATH FLOATNAME(LMatrix4) FLOATNAME(LMatrix4)::
shear_mat(const FLOATNAME(LVecBase3) &shear) {
return FLOATNAME(LMatrix4)(1.0f, 0.0f, 0.0f, 0.0f,
shear._v.v._0, 1.0f, 0.0f, 0.0f,
shear._v.v._1, shear._v.v._2, 1.0f, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f);
}
////////////////////////////////////////////////////////////////////
// Function: LMatrix::shear_mat
// Access: Public, Static
// Description: Returns a matrix that applies the indicated
// shear in each of the three planes.
////////////////////////////////////////////////////////////////////
INLINE_LINMATH FLOATNAME(LMatrix4) FLOATNAME(LMatrix4)::
shear_mat(FLOATTYPE shxy, FLOATTYPE shxz, FLOATTYPE shyz) {
return FLOATNAME(LMatrix4)(1.0f, 0.0f, 0.0f, 0.0f,
shxy, 1.0f, 0.0f, 0.0f,
shxz, shyz, 1.0f, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f);
}
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// Function: LMatrix::y_to_z_up_mat // Function: LMatrix::y_to_z_up_mat
// Access: Public, Static // Access: Public, Static

View File

@ -152,6 +152,11 @@ PUBLISHED:
INLINE_LINMATH static FLOATNAME(LMatrix4) INLINE_LINMATH static FLOATNAME(LMatrix4)
scale_mat(FLOATTYPE scale); scale_mat(FLOATTYPE scale);
static INLINE_LINMATH FLOATNAME(LMatrix4)
shear_mat(const FLOATNAME(LVecBase3) &shear);
static INLINE_LINMATH FLOATNAME(LMatrix4)
shear_mat(FLOATTYPE shxy, FLOATTYPE shxz, FLOATTYPE shyz);
INLINE_LINMATH static const FLOATNAME(LMatrix4) &y_to_z_up_mat(); INLINE_LINMATH static const FLOATNAME(LMatrix4) &y_to_z_up_mat();
INLINE_LINMATH static const FLOATNAME(LMatrix4) &z_to_y_up_mat(); INLINE_LINMATH static const FLOATNAME(LMatrix4) &z_to_y_up_mat();