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