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
00031
00032 #ifndef PHY_CONVERTERS_H
00033 #define PHY_CONVERTERS_H
00034
00035 #include <PVLE/Export.h>
00036 #include <ode/ode.h>
00037
00038
00039 #if defined(dSINGLE)
00040 #include <osg/Vec3f>
00041 #include <osg/Vec4f>
00042 #include <osg/Quat>
00043 #include <osg/Matrixf>
00044 #include <osg/BoundingBox>
00045 #elif defined(dDOUBLE)
00046 #include <osg/Vec3d>
00047 #include <osg/Vec4d>
00048 #include <osg/Quat>
00049 #include <osg/Matrixd>
00050 #include <osg/BoundingBox>
00051 #else
00052 #error You must #define dSINGLE or dDOUBLE
00053 #endif
00054
00055
00056
00057 namespace Physics {
00058
00059
00060 #if defined(dSINGLE)
00061 #define graphVec3 osg::Vec3f
00062 #define graphVec4 osg::Vec4f
00063 #define graphQuat osg::Quat
00064 #define graphMat osg::Matrixf
00065 #define graphBB osg::BoundingBox
00066 #else
00067 #define graphVec3 osg::Vec3d
00068 #define graphVec4 osg::Vec4d
00069 #define graphQuat osg::Quat
00070 #define graphMat osg::Matrixd
00071 #define graphBB osg::BoundingBox
00072 #endif
00073
00075
00076
00077
00078
00079 inline graphVec3 toGraphVec3(const dReal * v) { return graphVec3(v[0], v[1], v[2]); }
00080 inline graphVec4 toGraphVec4(const dVector4 & v) { return graphVec4(v[0], v[1], v[2], v[3]); }
00081
00082 inline void toPhyVec3(const graphVec3 & v, dVector3 out_ret) { out_ret[0] = v.x(); out_ret[1] = v.y(); out_ret[2] = v.z(); }
00083 inline void toPhyVec3(const dReal & x, const dReal & y, const dReal & z, dVector3 out_ret) { out_ret[0] = x; out_ret[1] = y; out_ret[2] = z; }
00084 inline void toPhyVec4(const graphVec4 & v, dVector4 out_ret) { out_ret[0] = v.x(); out_ret[1] = v.y(); out_ret[2] = v.z(); out_ret[3] = v.w(); }
00085 inline void toPhyVec4(const dReal & x, const dReal & y, const dReal & z, const dReal & w, dVector3 out_ret) { out_ret[0] = x; out_ret[1] = y; out_ret[2] = z; out_ret[3] = w; }
00086
00087
00088 inline graphQuat toGraphQuat(const dReal * v) { return osg::Quat(v[1], v[2], v[3], v[0]); }
00089
00090 inline void toPhyQuat(const graphQuat & quat, dQuaternion & out_q) { out_q[0]=quat.w(); out_q[1]=quat.x(); out_q[2]=quat.y(); out_q[3]=quat.z(); }
00091
00092 PVLE_EXPORT graphMat toGraphMatInertia(const dReal * m);
00093 PVLE_EXPORT graphMat toGraphMatRotation(const dReal * m);
00094 PVLE_EXPORT graphMat toGraphMatRotationPosition(const dReal * m, const dReal * p);
00095 PVLE_EXPORT void toPhyMatRotation(const graphMat & matrix, dMatrix3 & out_matrix);
00096
00097
00098 inline graphBB toGraphBB(dReal * bb) { return graphBB(graphVec3(bb[0], bb[2], bb[4]), graphVec3(bb[1], bb[3], bb[5])); }
00099 inline void toPhyBB(const graphBB & bb, dReal * out_bb) { out_bb[0]=bb._min.x(); out_bb[1]=bb._max.x(); out_bb[2]=bb._min.y(); out_bb[3]=bb._max.y(); out_bb[4]=bb._min.z(); out_bb[5]=bb._max.z(); }
00100
00101
00103 inline dReal kmhToms(dReal v) { return v*static_cast<dReal>(0.2777777777); }
00105 inline dReal msTokmh(dReal v) { return v*static_cast<dReal>(3.6); }
00106
00107 }
00108
00109
00110
00111 #endif // PHY_CONVERTERS_H