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
00016 class SFRotation;
00017
00022
00023 class SFMatrix34f
00024 {
00025 public:
00027 float _11;
00029 float _21;
00031 float _31;
00032
00034 float _12;
00036 float _22;
00038 float _32;
00039
00041 float _13;
00043 float _23;
00045 float _33;
00046
00048 float _14;
00050 float _24;
00052 float _34;
00053
00055 SFMatrix34f();
00057 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);
00059 explicit SFMatrix34f(const float GLMatrix[16]);
00061 SFMatrix34f(const SFVec3f &vx, const SFVec3f &vy, const SFVec3f &vz, const SFPoint3f &p);
00063 SFMatrix34f(const SFVec3f &translation, const SFVec3f ¢er, const SFRotation &rotation, const SFRotation &scaleOrientation, const SFVec3f &scale);
00065 SFMatrix34f(const SFMatrix34f &m);
00066
00068 friend SFMatrix34f operator+ (const SFMatrix34f &m1, const SFMatrix34f &m2);
00070 friend SFMatrix34f operator- (const SFMatrix34f &m1, const SFMatrix34f &m2);
00072 friend SFMatrix34f operator* (const SFMatrix34f &m1, const SFMatrix34f &m2);
00074 friend SFMatrix34f operator* (const float a, const SFMatrix34f &m);
00076 friend SFVec3f operator* (const SFMatrix34f &m, const SFVec3f &v);
00078 friend SFPoint3f operator* (const SFMatrix34f &m, const SFPoint3f &v);
00080 friend bool operator== (const SFMatrix34f &A, const SFMatrix34f &B);
00082 friend bool operator!= (const SFMatrix34f &A, const SFMatrix34f &B);
00084 SFMatrix34f i();
00087 SFMatrix34f iu();
00089 float *toFloat16() const;
00090
00092 static const SFMatrix34f null;
00094 static const SFMatrix34f identity;
00095
00097 static SFMatrix34f scale34(float sx, float sy, float sz);
00099 static SFMatrix34f rotationX(float angle);
00101 static SFMatrix34f rotationY(float angle);
00103 static SFMatrix34f rotationZ(float angle);
00105 static SFMatrix34f translation(const SFVec3f &t);
00107 static SFMatrix34f rotation(float angle, const SFVec3f &u);
00108 };
00109
00110
00111 }
00112
00113 #endif
00114