|
From: Rodrigo H. <kw...@us...> - 2005-07-08 23:27:57
|
Update of /cvsroot/freesolid/freesolid/include/3D In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5632/include/3D Modified Files: Quaternion.h Log Message: Added depth penetration test app, more stuff on depth penetration computation Index: Quaternion.h =================================================================== RCS file: /cvsroot/freesolid/freesolid/include/3D/Quaternion.h,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** Quaternion.h 21 Apr 2005 23:20:54 -0000 1.3 --- Quaternion.h 8 Jul 2005 23:27:48 -0000 1.4 *************** *** 63,66 **** --- 63,68 ---- } + inline void getMatrix(float *pMatrix) const; + Quaternion& operator+=(const Quaternion& q); Quaternion& operator-=(const Quaternion& q); *************** *** 210,213 **** --- 212,242 ---- } + inline void Quaternion::getMatrix(float *pMatrix) const + { + if(!pMatrix) return; + pMatrix[ 0] = 1.0f - 2.0f * ( comp[Y] * comp[Y] + comp[Z] * comp[Z] ); + pMatrix[ 1] = 2.0f * (comp[X] * comp[Y] + comp[Z] * comp[W]); + pMatrix[ 2] = 2.0f * (comp[X] * comp[Z] - comp[Y] * comp[W]); + pMatrix[ 3] = 0.0f; + + // Second row + pMatrix[ 4] = 2.0f * ( comp[X] * comp[Y] - comp[Z] * comp[W] ); + pMatrix[ 5] = 1.0f - 2.0f * ( comp[X] * comp[X] + comp[Z] * comp[Z] ); + pMatrix[ 6] = 2.0f * (comp[Z] * comp[Y] + comp[X] * comp[W] ); + pMatrix[ 7] = 0.0f; + + // Third row + pMatrix[ 8] = 2.0f * ( comp[X] * comp[Z] + comp[Y] * comp[W] ); + pMatrix[ 9] = 2.0f * ( comp[Y] * comp[Z] - comp[X] * comp[W] ); + pMatrix[10] = 1.0f - 2.0f * ( comp[X] * comp[X] + comp[Y] * comp[Y] ); + pMatrix[11] = 0.0f; + + // Fourth row + pMatrix[12] = 0; + pMatrix[13] = 0; + pMatrix[14] = 0; + pMatrix[15] = 1.0f; + } + #endif |