r678 - trunk

lordhavoc at icculus.org lordhavoc at icculus.org
Sun Mar 26 03:40:05 EST 2006


Author: lordhavoc
Date: 2006-03-26 03:40:05 -0500 (Sun, 26 Mar 2006)
New Revision: 678

Modified:
   trunk/matrixlib.c
   trunk/matrixlib.h
Log:
added Matrix4x4_CreateFromDoom3Joint function


Modified: trunk/matrixlib.c
===================================================================
--- trunk/matrixlib.c	2006-03-13 22:27:57 UTC (rev 677)
+++ trunk/matrixlib.c	2006-03-26 08:40:05 UTC (rev 678)
@@ -467,3 +467,14 @@
 	return (double)sqrt(in->m[0][0] * in->m[0][0] + in->m[0][1] * in->m[0][1] + in->m[0][2] * in->m[0][2]);
 }
 
+// LordHavoc: I got this code from:
+//http://www.doom3world.org/phpbb2/viewtopic.php?t=2884
+void Matrix4x4_CreateFromDoom3Joint(matrix4x4_t *m, const double *joint)
+{
+	double x = joint[3], y = joint[4], z = joint[5], w = 1.0 - VectorLength2(joint + 3);
+	w = w > 0.0 ? -sqrt(w) : 0.0;
+	m->m[0][0]= 1-2*((y*y)+(z*z)) ;m->m[0][1]=   2*((x*y)-(z*w)) ;m->m[0][2]=   2*((x*z)+(y*w)) ;m->m[0][3]=joint[0];
+	m->m[1][0]=   2*((x*y)+(z*w)) ;m->m[1][1]= 1-2*((x*x)+(z*z)) ;m->m[1][2]=   2*((y*z)-(x*w)) ;m->m[1][3]=joint[1];
+	m->m[2][0]=   2*((x*z)-(y*w)) ;m->m[2][1]=   2*((y*z)+(x*w)) ;m->m[2][2]= 1-2*((x*x)+(y*y)) ;m->m[2][3]=joint[2];
+	m->m[3][0]=   0               ;m->m[3][1]=   0               ;m->m[3][2]=   0               ;m->m[3][3]=       1;
+}

Modified: trunk/matrixlib.h
===================================================================
--- trunk/matrixlib.h	2006-03-13 22:27:57 UTC (rev 677)
+++ trunk/matrixlib.h	2006-03-26 08:40:05 UTC (rev 678)
@@ -55,6 +55,8 @@
 void Matrix4x4_CreateScale3(matrix4x4_t *out, double x, double y, double z);
 // creates a matrix for a quake entity
 void Matrix4x4_CreateFromQuakeEntity(matrix4x4_t *out, double x, double y, double z, double pitch, double yaw, double roll, double scale);
+// creates a matrix from a doom3 joint
+void Matrix4x4_CreateFromDoom3Joint(matrix4x4_t *m, const double *joint);
 
 // converts a matrix4x4 to a set of 3D vectors for the 3 axial directions, and the translate
 void Matrix4x4_ToVectors(const matrix4x4_t *in, double vx[3], double vy[3], double vz[3], double t[3]);




More information about the neither-commits mailing list