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