• Main Page
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

src/util/header/m4x4.h

Go to the documentation of this file.
00001 
00005 template<typename Real = RV_PRECISSION_TYPENAME>
00006 class m4x4 {
00007 public:
00008         union{
00009                 struct{ Real m[4][4]; };
00010                 struct{ Real m16[16]; };
00011                 struct{ v4<Real> v[4]; };
00012         };
00013 
00017         m4x4(){}
00018 
00023         m4x4(const m3x3<Real>& mat){
00024                 for(char i=0; i<3; i++){
00025                         for(char j=0; j<3; j++)
00026                                 m[i][j] = mat(i,j);
00027                         m[i][3] = 0.f;
00028                 }
00029                 m[3][0] = m[3][1] = m[3][2] = 0.f;
00030                 m[3][3] = 1.f;
00031         }
00032 
00037         m4x4(const m4x4<Real>& mat){
00038                 for(int i=0; i<4; i++)
00039                         for(int j=0; j<4; j++)
00040                                 m[i][j] = mat(i,j);
00041         }
00042 
00045         m4x4(const Real* f){
00046                 m[0][0]=f[ 0]; m[0][1]=f[ 1]; m[0][2]=f[ 2]; m[0][3]=f[ 3];
00047                 m[1][0]=f[ 4]; m[1][1]=f[ 5]; m[1][2]=f[ 6]; m[1][3]=f[ 7];
00048                 m[2][0]=f[ 8]; m[2][1]=f[ 9]; m[2][2]=f[10]; m[2][3]=f[11];
00049                 m[3][0]=f[12]; m[3][1]=f[13]; m[3][2]=f[14]; m[3][3]=f[15];
00050         }
00051 
00054         m4x4(const Real a, const Real b, const Real c, const Real d,
00055                 const Real e, const Real f, const Real g, const Real h,
00056                 const Real i, const Real j, const Real k, const Real l,
00057                 const Real m, const Real n, const Real o, const Real p)
00058         {
00059                 this->m[0][0]=a; this->m[0][1]=b; this->m[0][2]=c; this->m[0][3]=d;
00060                 this->m[1][0]=e; this->m[1][1]=f; this->m[1][2]=g; this->m[1][3]=h;
00061                 this->m[2][0]=i; this->m[2][1]=j; this->m[2][2]=k; this->m[2][3]=l;
00062                 this->m[3][0]=m; this->m[3][1]=n; this->m[3][2]=o; this->m[3][3]=p;
00063         }
00064 
00065         inline m4x4<Real>& set(
00066                 const Real a, const Real b, const Real c, const Real d,
00067                 const Real e, const Real f, const Real g, const Real h,
00068                 const Real i, const Real j, const Real k, const Real l,
00069                 const Real m, const Real n, const Real o, const Real p);
00070         inline m4x4<Real>& get(
00071                 Real& a, Real& b, Real& c, Real& d,
00072                 Real& e, Real& f, Real& g, Real& h,
00073                 Real& i, Real& j, Real& k, Real& l,
00074                 Real& m, Real& n, Real& o, Real& p);
00075 
00076         inline m4x4<Real>& zero(void);
00078         inline m4x4<Real>& identity(void);
00080         inline Real det(void);
00082         inline m4x4<Real>& transpose(void);
00084         inline m4x4<Real>& invert(void);
00085 
00087         inline m4x4<Real>& asTranslation(const Real x, const Real y,const  Real z);
00089         inline m4x4<Real>& asRotation(const Real x, const Real y, const Real z);
00091         inline m4x4<Real>& asRotationX(const Real angle);
00093         inline m4x4<Real>& asRotationY(const Real angle);
00095         inline m4x4<Real>& asRotationZ(const Real angle);
00097         inline m4x4<Real>& asScale(const Real x, const Real y, const Real z);
00098 
00099         inline m4x4<Real>& projection(const int width, const int height, const Real Near, const Real Far, const Real FOV);
00100         inline m4x4<Real>& lookAt(const v3<Real>& camPos, const v3<Real>& camDirUnion, const v3<Real>& camUp);
00101         inline m4x4<Real>& lookAt(const Real eyex, const Real eyey, const Real eyez,
00102                 const Real centerx, const Real centery, const Real centerz,
00103                 const Real upx, const Real upy, const Real upz);
00104 
00106         inline m3x3<Real> as3x3(void);
00108         inline const m3x3<Real> as3x3(void) const;
00109 
00110         inline m4x4<Real>& operator = (const m4x4<Real>& a);
00111         inline m4x4<Real>& operator += (const m4x4<Real>& a);
00112         inline m4x4<Real>& operator -= (const m4x4<Real>& a);
00113         inline m4x4<Real>& operator *= (const m4x4<Real>& a);
00114         inline bool operator == (const m4x4<Real>& a);
00115         inline bool operator != (const m4x4<Real>& a);
00116 
00117         inline v4<Real>& operator [] (const int i);
00118         inline const v4<Real>& operator [] (const int i) const;
00119         inline Real& operator () (const int i);
00120         inline const Real operator () (const int i) const;
00121         inline Real& operator () (const int row, const int col);
00122         inline const Real operator () (const int row, const int col) const;
00123 };
00124 
00125 template<typename Real> inline m4x4<Real> add(const m4x4<Real>& a, const m4x4<Real>& b);
00126 template<typename Real> inline m4x4<Real> sub(const m4x4<Real>& a, const m4x4<Real>& b);
00127 template<typename Real> inline m4x4<Real> mul(const m4x4<Real>& a, const m4x4<Real>& b);
00128 template<typename Real> inline void       mul(m4x4<Real>& out, const m4x4<Real>& a, const m4x4<Real>& b);
00129 template<typename Real> inline v4<Real>   mul(const v4<Real>& v, const m4x4<Real>& m);
00130 template<typename Real> inline void       mul(v4<Real>& out, const v4<Real>& v, const m4x4<Real>& m);
00131 template<typename Real> inline v4<Real>   mul(const m4x4<Real>& m, const v4<Real>& v);
00132 template<typename Real> inline void       mul(v4<Real>& out, const m4x4<Real>& m, const v4<Real>& v);
00133 
00134 template<typename Real> inline v4<Real>   operator * (const v4<Real>& a, const m4x4<Real>& b);
00135 template<typename Real> inline v4<Real>   operator * (const m4x4<Real>& a, const v4<Real>& b);
00136 template<typename Real> inline m4x4<Real> operator * (const m4x4<Real>& a, const m4x4<Real>& b);
00137 template<typename Real> inline m4x4<Real> operator + (const m4x4<Real>& a, const m4x4<Real>& b);
00138 template<typename Real> inline m4x4<Real> operator - (const m4x4<Real>& a, const m4x4<Real>& b);
00139 
00140 template<typename Real> inline m4x4<Real> Identity4x4();
00141 template<typename Real> inline m4x4<Real> Zero4x4();
00142 
00143 template<typename Real> inline m4x4<Real> Translation(const Real x, const Real y, const Real z);
00144 template<typename Real> inline m4x4<Real> Scale(const Real x, const Real y, const Real z);
00145 template<typename Real> inline m4x4<Real> RotationX(const Real angle);
00146 template<typename Real> inline m4x4<Real> RotationY(const Real angle);
00147 template<typename Real> inline m4x4<Real> RotationZ(const Real angle);
00149 template<typename Real> inline m4x4<Real> inverse(const m4x4<Real> m);
00150 template<typename Real> inline m4x4<Real> transpose(const m4x4<Real> m);
00152 template<typename Real> inline m4x4<Real> Projection(const int width, const int height,
00153         const Real Near, const Real Far, const Real FOV);
00155 template<typename Real> inline m4x4<Real> LookAt(const Real eyex, const Real eyey, const Real eyez,
00156         const Real atx, const Real aty, const Real atz,
00157         const Real upx, const Real upy, const Real upz);
00158 
00159 template<typename Real> inline m4x4<Real> ProjectionStereo(
00160                 const int screenWidth,
00161                 const int screenHeight,
00162                 const Real nearPlane,
00163                 const Real farPlane,
00164                 const Real camFOV,
00165                 const Real distToEyeCenter,
00166                 const Real focalLength = 20.f);
00167 
00168 template<typename Real> inline m4x4<Real> LookAtStereo(
00169                 const v3<Real> camPos,
00170                 const v3<Real> camLookAt,
00171                 const v3<Real> camUp,
00172                 const Real distToEyeCenter,
00173                 const Real focalLength = 20.f);
00174 
00175 typedef m4x4<float> float4x4;
00176 typedef m4x4<double> double4x4;

Generated on Fri Jun 18 2010 17:48:40 for Cannonball by  doxygen 1.7.0