diff --git a/panda/src/linmath/compose_matrix_src.cxx b/panda/src/linmath/compose_matrix_src.cxx index 9ce80e39d6..1efcc5a59f 100644 --- a/panda/src/linmath/compose_matrix_src.cxx +++ b/panda/src/linmath/compose_matrix_src.cxx @@ -609,6 +609,13 @@ decompose_matrix(const FLOATNAME(LMatrix3) &mat, (fabs(new_mat(0, 1)) + fabs(new_mat(0, 2)) + 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; } diff --git a/panda/src/linmath/lmatrix3_src.I b/panda/src/linmath/lmatrix3_src.I index c2bc8ccad3..58f864d3b9 100644 --- a/panda/src/linmath/lmatrix3_src.I +++ b/panda/src/linmath/lmatrix3_src.I @@ -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 diff --git a/panda/src/linmath/lmatrix3_src.h b/panda/src/linmath/lmatrix3_src.h index e6d9a0b93c..fca0c34107 100644 --- a/panda/src/linmath/lmatrix3_src.h +++ b/panda/src/linmath/lmatrix3_src.h @@ -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); diff --git a/panda/src/linmath/lmatrix4_src.I b/panda/src/linmath/lmatrix4_src.I index 30672b2e14..11def498f6 100644 --- a/panda/src/linmath/lmatrix4_src.I +++ b/panda/src/linmath/lmatrix4_src.I @@ -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); } //////////////////////////////////////////////////////////////////// diff --git a/panda/src/linmath/lmatrix4_src.h b/panda/src/linmath/lmatrix4_src.h index 939f3c8d12..1567a4e8dc 100644 --- a/panda/src/linmath/lmatrix4_src.h +++ b/panda/src/linmath/lmatrix4_src.h @@ -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();