fshake3d  0.0.1
FreeformDensity3DSurfaceEditor
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Defines
math_transform.hpp
Go to the documentation of this file.
00001 #ifndef MATH_TRANSFORM_HPP
00002 #define MATH_TRANSFORM_HPP
00003 
00004 #include "math.hpp"
00005 #include "opengl.hpp"
00006 
00007 template<typename FloatT>
00008 gmtl::Matrix<FloatT,4,4> makeTransformPerspective(FloatT fovy, FloatT aspect, FloatT znear, FloatT zfar)
00009 {
00010   FloatT f = 1/Math::tan( Math::deg2Rad(fovy)/2 ),
00011          dp = znear - zfar;
00012   gmtl::Matrix<FloatT,4,4> r;
00013   r.set(
00014       f/aspect, 0,0,0
00015     , 0, f, 0, 0
00016     , 0, 0, (zfar+znear)/dp, (2*zfar*znear)/dp
00017     , 0, 0, -1, 0
00018   );
00019   return r;
00020 }
00021 
00022 template<typename FloatT>
00023 gmtl::Matrix<FloatT,4,4> makeInversePerspective(FloatT fovy, FloatT aspect, FloatT znear, FloatT zfar)
00024 {
00025   FloatT f = 1/Math::tan( Math::deg2Rad(fovy)/2 ),
00026          dp = znear - zfar;
00027   gmtl::Matrix<FloatT,4,4> r;
00028   r.set(
00029       aspect/f, 0,0,0
00030     , 0, 1/f, 0, 0
00031     , 0, 0, (zfar+znear)/dp, (2*zfar*znear)/dp
00032     , 0, 0, -1, 0
00033     );
00034   return r;
00035 }
00036 
00037 template<typename FloatT>
00038 gmtl::Matrix<FloatT,4,4> makeTransformOrtho(FloatT l, FloatT r, FloatT b, FloatT t, FloatT n, FloatT f)
00039 {
00040 
00041   gmtl::Matrix<FloatT,4,4> result;
00042   result.set(
00043     FloatT(2.0)/(r-l), 0, 0, -(r+l)/(r-l),
00044     0, FloatT(2.0)/(t-b), 0, -(t+b)/(t-b),
00045     0, 0, FloatT(-2.0)/(f-n), -(f+n)/(f-n),
00046     0, 0, 0, FloatT(1)
00047   );
00048   return result;
00049 }
00050 
00051 template<typename FloatT>
00052 gmtl::Matrix<FloatT,4,4> makeInverseOrtho(FloatT l, FloatT r, FloatT b, FloatT t, FloatT n, FloatT f)
00053 {
00054   gmtl::Matrix<FloatT,4,4> result;
00055   result.set(
00056     (r-l)/2, 0, 0, (r+l)/2,
00057     0, (t-b)/2, 0, (t+b)/2,
00058     0, 0, (f-n)/-2, (n+f)/2,
00059     0, 0, 0, 1
00060   );
00061   return result;
00062 }
00063 
00064 #endif // MATH_TRANSFORM_HPP