GEL
2
GEL is a library for Geometry and Linear Algebra
|
00001 #ifndef __CGLA_MAT4X4D_H__ 00002 #define __CGLA_MAT4X4D_H__ 00003 00004 #include "ExceptionStandard.h" 00005 #include "CGLA.h" 00006 #include "Vec3d.h" 00007 #include "Vec3Hf.h" 00008 #include "Vec4d.h" 00009 #include "ArithSqMat4x4Float.h" 00010 00011 00012 namespace CGLA { 00013 00014 00019 class Mat4x4d: public ArithSqMat4x4Float<Vec4d, Mat4x4d> 00020 { 00021 public: 00022 00024 Mat4x4d(Vec4d _a, Vec4d _b, Vec4d _c, Vec4d _d): 00025 ArithSqMat4x4Float<Vec4d, Mat4x4d> (_a,_b,_c,_d) {} 00026 00028 Mat4x4d() {} 00029 00031 explicit Mat4x4d(double a): ArithSqMat4x4Float<Vec4d, Mat4x4d> (a) {} 00032 }; 00033 00035 Mat4x4d rotation_Mat4x4d(CGLA::Axis axis, float angle); 00036 00038 Mat4x4d translation_Mat4x4d(const Vec3d&); 00039 00041 Mat4x4d scaling_Mat4x4d(const Vec3d&); 00042 00044 inline Mat4x4d identity_Mat4x4d() 00045 { 00046 return Mat4x4d(Vec4d(1,0,0,0), 00047 Vec4d(0,1,0,0), 00048 Vec4d(0,0,1,0), 00049 Vec4d(0,0,0,1)); 00050 } 00051 00056 inline Mat4x4d invert_ortho(const Mat4x4d& m) 00057 { 00058 Vec3d rx(m[0][0], m[1][0], m[2][0]); 00059 Vec3d ry(m[0][1], m[1][1], m[2][1]); 00060 Vec3d rz(m[0][2], m[1][2], m[2][2]); 00061 Vec3d t(m[0][3], m[1][3], m[2][3]); 00062 00063 return Mat4x4d(Vec4d(rx, -dot(t, rx)), 00064 Vec4d(ry, -dot(t, ry)), 00065 Vec4d(rz, -dot(t, rz)), 00066 Vec4d(0.0, 0.0, 0.0, 1.0)); 00067 } 00068 } 00069 #endif 00070 00071 00072 00073 00074 00075 00076