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(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;
}

View File

@ -1077,7 +1077,7 @@ rotate_mat_normaxis(FLOATTYPE angle, const FLOATNAME(LVecBase3) &axis,
////////////////////////////////////////////////////////////////////
INLINE_LINMATH FLOATNAME(LMatrix3) FLOATNAME(LMatrix3)::
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, 0.0f, scale._v.v._2);
}
@ -1095,6 +1095,32 @@ scale_mat(FLOATTYPE sx, FLOATTYPE sy, FLOATTYPE 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
// Access: Public

View File

@ -157,6 +157,11 @@ PUBLISHED:
static INLINE_LINMATH FLOATNAME(LMatrix3)
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,
CoordinateSystem to);

View File

@ -1318,9 +1318,9 @@ rotate_mat_normaxis(FLOATTYPE angle, const FLOATNAME(LVecBase3) &axis,
INLINE_LINMATH FLOATNAME(LMatrix4) FLOATNAME(LMatrix4)::
scale_mat(const FLOATNAME(LVecBase3) &scale) {
return FLOATNAME(LMatrix4)(scale._v.v._0, 0.0f, 0.0f, 0.0f,
0.0f, scale._v.v._1, 0.0f, 0.0f,
0.0f, 0.0f, scale._v.v._2, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f);
0.0f, scale._v.v._1, 0.0f, 0.0f,
0.0f, 0.0f, scale._v.v._2, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f);
}
@ -1332,11 +1332,10 @@ scale_mat(const FLOATNAME(LVecBase3) &scale) {
////////////////////////////////////////////////////////////////////
INLINE_LINMATH FLOATNAME(LMatrix4) FLOATNAME(LMatrix4)::
scale_mat(FLOATTYPE sx, FLOATTYPE sy, FLOATTYPE sz) {
return FLOATNAME(LMatrix4)(
sx, 0.0f, 0.0f, 0.0f,
0.0f, sy, 0.0f, 0.0f,
0.0f, 0.0f, sz, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f);
return FLOATNAME(LMatrix4)(sx, 0.0f, 0.0f, 0.0f,
0.0f, sy, 0.0f, 0.0f,
0.0f, 0.0f, sz, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f);
}
////////////////////////////////////////////////////////////////////
@ -1347,11 +1346,38 @@ scale_mat(FLOATTYPE sx, FLOATTYPE sy, FLOATTYPE sz) {
////////////////////////////////////////////////////////////////////
INLINE_LINMATH FLOATNAME(LMatrix4) FLOATNAME(LMatrix4)::
scale_mat(FLOATTYPE scale) {
return FLOATNAME(LMatrix4)(
scale, 0.0f, 0.0f, 0.0f,
0.0f, scale, 0.0f, 0.0f,
0.0f, 0.0f, scale, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f);
return FLOATNAME(LMatrix4)(scale, 0.0f, 0.0f, 0.0f,
0.0f, scale, 0.0f, 0.0f,
0.0f, 0.0f, scale, 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(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);
}
////////////////////////////////////////////////////////////////////

View File

@ -152,6 +152,11 @@ PUBLISHED:
INLINE_LINMATH static FLOATNAME(LMatrix4)
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) &z_to_y_up_mat();