Bladeren bron

add alternate rotate_mat

cxgeorge 24 jaren geleden
bovenliggende
commit
80a12dbe26
2 gewijzigde bestanden met toevoegingen van 31 en 20 verwijderingen
  1. 26 20
      panda/src/linmath/lmatrix4_src.I
  2. 5 0
      panda/src/linmath/lmatrix4_src.h

+ 26 - 20
panda/src/linmath/lmatrix4_src.I

@@ -1173,7 +1173,7 @@ rotate_mat(FLOATTYPE angle, FLOATNAME(LVecBase3) axis,
   return mat;
 }
 
-
+  
 ////////////////////////////////////////////////////////////////////
 //     Function: LMatrix::rotate_mat_normaxis
 //       Access: Public, Static
@@ -1185,10 +1185,18 @@ INLINE_LINMATH FLOATNAME(LMatrix4) FLOATNAME(LMatrix4)::
 rotate_mat_normaxis(FLOATTYPE angle, const FLOATNAME(LVecBase3) &axis,
 	   CoordinateSystem cs) {
 
+  FLOATNAME(LMatrix4) mat;
+  rotate_mat_normaxis(angle,axis,mat,cs);
+  return mat;
+}
+
+INLINE_LINMATH void FLOATNAME(LMatrix4)::
+rotate_mat_normaxis(FLOATTYPE angle, const FLOATNAME(LVecBase3) &axis,
+					FLOATNAME(LMatrix4) &result_mat, CoordinateSystem cs) {
+
   if (cs == CS_default) {
     cs = default_coordinate_system;
   }
-  FLOATNAME(LMatrix4) mat;
 
   if(IS_LEFT_HANDED_COORDSYSTEM(cs)) {
     // In a left-handed coordinate system, counterclockwise is the
@@ -1214,28 +1222,26 @@ rotate_mat_normaxis(FLOATTYPE angle, const FLOATNAME(LVecBase3) &axis,
   s1 = s * axis_1;
   s2 = s * axis_2;
 
-  mat._m.m._00 = t0 * axis_0 + c;
-  mat._m.m._01 = t0 * axis_1 + s2;
-  mat._m.m._02 = t0 * axis_2 - s1;
-
-  mat._m.m._10 = t1 * axis_0 - s2;
-  mat._m.m._11 = t1 * axis_1 + c;
-  mat._m.m._12 = t1 * axis_2 + s0;
+  result_mat._m.m._00 = t0 * axis_0 + c;
+  result_mat._m.m._01 = t0 * axis_1 + s2;
+  result_mat._m.m._02 = t0 * axis_2 - s1;
 
-  mat._m.m._20 = t2 * axis_0 + s1;
-  mat._m.m._21 = t2 * axis_1 - s0;
-  mat._m.m._22 = t2 * axis_2 + c;
+  result_mat._m.m._10 = t1 * axis_0 - s2;
+  result_mat._m.m._11 = t1 * axis_1 + c;
+  result_mat._m.m._12 = t1 * axis_2 + s0;
 
-  mat._m.m._03 = 0.0;
-  mat._m.m._13 = 0.0;
-  mat._m.m._23 = 0.0;
+  result_mat._m.m._20 = t2 * axis_0 + s1;
+  result_mat._m.m._21 = t2 * axis_1 - s0;
+  result_mat._m.m._22 = t2 * axis_2 + c;
 
-  mat._m.m._30 = 0.0;
-  mat._m.m._31 = 0.0;
-  mat._m.m._32 = 0.0;
-  mat._m.m._33 = 1.0;
+  result_mat._m.m._03 = 0.0;
+  result_mat._m.m._13 = 0.0;
+  result_mat._m.m._23 = 0.0;
 
-  return mat;
+  result_mat._m.m._30 = 0.0;
+  result_mat._m.m._31 = 0.0;
+  result_mat._m.m._32 = 0.0;
+  result_mat._m.m._33 = 1.0;
 }
 
 ////////////////////////////////////////////////////////////////////

+ 5 - 0
panda/src/linmath/lmatrix4_src.h

@@ -115,6 +115,11 @@ PUBLISHED:
     rotate_mat_normaxis(FLOATTYPE angle,
 			const FLOATNAME(LVecBase3) &axis,
 			CoordinateSystem cs = CS_default);
+  INLINE_LINMATH static void
+    rotate_mat_normaxis(FLOATTYPE angle,
+			const FLOATNAME(LVecBase3) &axis,
+			FLOATNAME(LMatrix4) &result_mat,
+			CoordinateSystem cs = CS_default);
   INLINE_LINMATH static FLOATNAME(LMatrix4)
     scale_mat(const FLOATNAME(LVecBase3) &scale);
   INLINE_LINMATH static FLOATNAME(LMatrix4)