00001
00002
00004
00005 #ifndef MATRIX34F_H
00006 #define MATRIX34F_H
00007
00008 #include "SFVec3f.h"
00009 #include "SFPoint3f.h"
00010
00011 #include <iostream>
00012 #include <vector>
00013
00014 namespace X3DTK {
00015
00020
00021 class SFMatrix34f
00022 {
00023 public:
00025 float _11;
00027 float _21;
00029 float _31;
00030
00032 float _12;
00034 float _22;
00036 float _32;
00037
00039 float _13;
00041 float _23;
00043 float _33;
00044
00046 float _14;
00048 float _24;
00050 float _34;
00051
00053 SFMatrix34f();
00055 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);
00057 explicit SFMatrix34f(const float GLMatrix[16]);
00059 SFMatrix34f(const SFVec3f &vx, const SFVec3f &vy, const SFVec3f &vz, const SFPoint3f &p);
00061 SFMatrix34f(const SFMatrix34f &m);
00062
00064 friend SFMatrix34f operator+ (const SFMatrix34f &m1, const SFMatrix34f &m2);
00066 friend SFMatrix34f operator- (const SFMatrix34f &m1, const SFMatrix34f &m2);
00068 friend SFMatrix34f operator* (const SFMatrix34f &m1, const SFMatrix34f &m2);
00070 friend SFMatrix34f operator* (const float a, const SFMatrix34f &m);
00072 friend SFVec3f operator* (const SFMatrix34f &m, const SFVec3f &v);
00074 friend SFPoint3f operator* (const SFMatrix34f &m, const SFPoint3f &v);
00076 SFMatrix34f i();
00079 SFMatrix34f iu();
00081 void toFloat16(std::vector<float> &M) const;
00082 };
00083
00085 SFMatrix34f identity34();
00087 SFMatrix34f scale34(float sx, float sy, float sz);
00089 SFMatrix34f rotationX(float angle);
00091 SFMatrix34f rotationY(float angle);
00093 SFMatrix34f rotationZ(float angle);
00095 SFMatrix34f translation(const SFVec3f &t);
00097 SFMatrix34f rotation(float angle, const SFVec3f &u);
00099 std::ostream& operator<<(std::ostream& o, const SFMatrix34f &M);
00100
00101 }
00102
00103 #endif
00104