]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - matrixlib.h
damn, committed the old version of my patch... this now is the REAL v_flipped
[xonotic/darkplaces.git] / matrixlib.h
index af2555dd1fbe9b67a4f65c503b57807b3de26fc4..f510f3d9d567975b99ad0c624f89a0383d334871 100644 (file)
@@ -6,6 +6,8 @@
 #define M_PI           3.14159265358979323846  // matches value in gcc v2 math.h
 #endif
 
+//#define MATRIX4x4_OPENGLORIENTATION
+
 typedef struct matrix4x4_s
 {
        float m[4][4];
@@ -28,9 +30,12 @@ void Matrix4x4_Concat (matrix4x4_t *out, const matrix4x4_t *in1, const matrix4x4
 // swaps the rows and columns of the matrix
 // (is this useful for anything?)
 void Matrix4x4_Transpose (matrix4x4_t *out, const matrix4x4_t *in1);
-// swaps the rows and columns of the rotation matrix
-// (inverting the rotation, but leaving everything else the same)
-void Matrix4x4_Transpose3x3 (matrix4x4_t *out, const matrix4x4_t *in1);
+// creates a matrix that does the opposite of the matrix provided
+// this is a full matrix inverter, it should be able to invert any matrix that
+// is possible to invert
+// (non-uniform scaling, rotation, shearing, and translation, possibly others)
+// warning: this function is SLOW
+int Matrix4x4_Invert_Full (matrix4x4_t *out, const matrix4x4_t *in1);
 // creates a matrix that does the opposite of the matrix provided
 // only supports translate, rotate, scale (not scale3) matrices
 void Matrix4x4_Invert_Simple (matrix4x4_t *out, const matrix4x4_t *in1);
@@ -64,9 +69,13 @@ void Matrix4x4_ToVectors(const matrix4x4_t *in, float vx[3], float vy[3], float
 // creates a matrix4x4 from a set of 3D vectors for axial directions, and translate
 void Matrix4x4_FromVectors(matrix4x4_t *out, const float vx[3], const float vy[3], const float vz[3], const float t[3]);
 
-// creates a matrix4x4 from a float[16] array in the OpenGL orientation
+// converts a matrix4x4 to a double[16] array in the OpenGL orientation
+void Matrix4x4_ToArrayDoubleGL(const matrix4x4_t *in, double out[16]);
+// creates a matrix4x4 from a double[16] array in the OpenGL orientation
 void Matrix4x4_FromArrayDoubleGL(matrix4x4_t *out, const double in[16]);
-// creates a matrix4x4 from a float[16] array in the Direct3D orientation
+// converts a matrix4x4 to a double[16] array in the Direct3D orientation
+void Matrix4x4_ToArrayDoubleD3D(const matrix4x4_t *in, double out[16]);
+// creates a matrix4x4 from a double[16] array in the Direct3D orientation
 void Matrix4x4_FromArrayDoubleD3D(matrix4x4_t *out, const double in[16]);
 
 // converts a matrix4x4 to a float[12] array in the OpenGL orientation
@@ -118,5 +127,7 @@ double Matrix4x4_ScaleFromMatrix (const matrix4x4_t *in);
 void Matrix4x4_SetOrigin (matrix4x4_t *out, double x, double y, double z);
 // moves origin vector (translate) in matrix by a simple translate
 void Matrix4x4_AdjustOrigin (matrix4x4_t *out, double x, double y, double z);
+// scales vectors of a matrix in place and allows you to scale origin as well
+void Matrix4x4_Scale (matrix4x4_t *out, double rotatescale, double originscale);
 
 #endif