00001 #ifndef X3DTK_SFMATRIX34F_H 00002 #define X3DTK_SFMATRIX34F_H 00003 00004 #include "SFVec3f.h" 00005 #include "SFPoint3f.h" 00006 00007 #include <iostream> 00008 #include <vector> 00009 00010 namespace X3DTK { 00011 00012 class SFRotation; 00013 00024 class SFMatrix34f 00025 { 00026 public: 00028 float _11; 00030 float _21; 00032 float _31; 00033 00035 float _12; 00037 float _22; 00039 float _32; 00040 00042 float _13; 00044 float _23; 00046 float _33; 00047 00049 float _14; 00051 float _24; 00053 float _34; 00054 00056 SFMatrix34f(); 00058 SFMatrix34f(float _11, float _21, float _31, float _12, float _22, float _32, float _13, float _23, float _33, float _14, float _24, float _34); 00060 explicit SFMatrix34f(const float GLMatrix[16]); 00062 SFMatrix34f(const SFVec3f &vx, const SFVec3f &vy, const SFVec3f &vz, const SFPoint3f &p); 00064 SFMatrix34f(const SFVec3f &translation, const SFVec3f ¢er, const SFRotation &rotation, const SFRotation &scaleOrientation, const SFVec3f &scale); 00066 SFMatrix34f(const SFMatrix34f &m); 00067 00069 friend SFMatrix34f operator+ (const SFMatrix34f &m1, const SFMatrix34f &m2); 00071 friend SFMatrix34f operator- (const SFMatrix34f &m1, const SFMatrix34f &m2); 00073 friend SFMatrix34f operator* (const SFMatrix34f &m1, const SFMatrix34f &m2); 00075 friend SFMatrix34f operator* (const float a, const SFMatrix34f &m); 00077 friend SFVec3f operator* (const SFMatrix34f &m, const SFVec3f &v); 00079 friend SFPoint3f operator* (const SFMatrix34f &m, const SFPoint3f &v); 00081 friend bool operator== (const SFMatrix34f &A, const SFMatrix34f &B); 00083 friend bool operator!= (const SFMatrix34f &A, const SFMatrix34f &B); 00085 SFMatrix34f i(); 00088 SFMatrix34f iu(); 00090 float *toFloat16() const; 00091 00093 static const SFMatrix34f null; 00095 static const SFMatrix34f identity; 00096 00098 static SFMatrix34f scale34(float sx, float sy, float sz); 00100 static SFMatrix34f rotationX(float angle); 00102 static SFMatrix34f rotationY(float angle); 00104 static SFMatrix34f rotationZ(float angle); 00106 static SFMatrix34f translation(const SFVec3f &t); 00108 static SFMatrix34f rotation(float angle, const SFVec3f &u); 00109 }; 00110 00111 00112 } 00113 00114 #endif 00115