David Rose 22 anni fa
parent
commit
5808fe2b1f

+ 7 - 0
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;
 }

+ 27 - 1
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

+ 5 - 0
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);
 

+ 39 - 13
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);
 }
 
 ////////////////////////////////////////////////////////////////////

+ 5 - 0
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();