00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #include <PVLE/Physics/Converters.h>
00028
00029 namespace Physics {
00030
00031 graphMat toGraphMatInertia(const dReal * m) {
00032
00033 return graphMat(
00034 m[0], m[1], m[2], 0,
00035 m[4], m[5], m[6], 0,
00036 m[8], m[9], m[10],0,
00037 0, 0, 0, 1);
00038 }
00039
00040 graphMat toGraphMatRotation(const dReal * m) {
00041 graphMat matrix(
00042 m[0], m[1], m[2], m[3],
00043 m[4], m[5], m[6], m[7],
00044 m[8], m[9], m[10], m[11],
00045 0, 0, 0, 1);
00046
00047 graphQuat q; matrix.get(q);
00048 matrix.set(q.inverse());
00049 return matrix;
00050 }
00051
00052 graphMat toGraphMatRotationPosition(const dReal * m, const dReal * p) {
00053
00054 graphMat matrix(
00055 m[0], m[1], m[2], m[3],
00056 m[4], m[5], m[6], m[7],
00057 m[8], m[9], m[10], m[11],
00058 0, 0, 0, 1);
00059
00060
00061 graphQuat q; matrix.get(q);
00062 matrix.set(q.inverse());
00063 matrix.setTrans(p[0], p[1], p[2]);
00064 return matrix;
00065 }
00066
00067
00068 void toPhyMatRotation(const graphMat & matrix, dMatrix3 & out_matrix) {
00069
00070 graphQuat q; matrix.get(q);
00071 graphMat m(q.inverse());
00072
00073 out_matrix[0] = m(0,0); out_matrix[1] = m(0,1); out_matrix[2] = m(0,2); out_matrix[3] = m(0,3);
00074 out_matrix[4] = m(1,0); out_matrix[5] = m(1,1); out_matrix[6] = m(1,2); out_matrix[7] = m(1,3);
00075 out_matrix[8] = m(2,0); out_matrix[9] = m(2,1); out_matrix[10] = m(2,2); out_matrix[11] = m(2,3);
00076 }
00077
00078 }