00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef OST_GEOM_TRANSFORM_HH
00020 #define OST_GEOM_TRANSFORM_HH
00021
00022
00023
00024
00025
00026 #include <ost/config.hh>
00027
00028 #include "module_config.hh"
00029 #include "vec3.hh"
00030 #include "vec4.hh"
00031 #include "mat3.hh"
00032 #include "mat.hh"
00033 #include "aligned_cuboid.hh"
00034
00035 namespace geom {
00036
00039 class DLLEXPORT_OST_GEOM Transform {
00040 public:
00041 Transform();
00042
00044 void Reset() {*this=Transform();}
00045
00047 Mat4 GetMatrix() const {return tm_;}
00049 Mat4 GetTransposedMatrix() const {return ttm_;}
00051 Mat4 GetInvertedMatrix() const {return itm_;}
00052
00054 void SetCenter(const Vec3& c);
00056 Vec3 GetCenter() const;
00057
00058
00059 void SetMatrix(const Mat4& m);
00060
00062
00063
00064 void ApplyXAxisRotation(float delta);
00065 void ApplyYAxisRotation(float delta);
00066 void ApplyZAxisRotation(float delta);
00067 void ApplyAxisRotation(float delta, const Vec3& axis);
00068
00069 Mat3 GetXAxisRotation(float delta);
00070 Mat3 GetYAxisRotation(float delta);
00071 Mat3 GetZAxisRotation(float delta);
00072
00073 Mat3 GetRot() const;
00074 void SetRot(const Mat3& r);
00076
00077
00078 void ApplyXAxisTranslation(float delta);
00079 void ApplyYAxisTranslation(float delta);
00080 void ApplyZAxisTranslation(float delta);
00081 void SetTrans(const Vec3& t);
00082 Vec3 GetTrans() const;
00084
00085
00086 Vec3 Apply(const Vec3& v) const;
00087
00088 Vec4 Apply(const Vec4& v) const;
00089
00090 Vec3 ApplyInverse(const Vec3& v) const;
00091
00092 Vec4 ApplyInverse(const Vec4& v) const;
00093
00094 AlignedCuboid Apply(const AlignedCuboid& c) const;
00095 Transform Apply(const Transform& tf) const;
00096
00097 private:
00098 Mat3 rot_;
00099 Vec3 trans_;
00100 Vec3 cen_;
00101 Mat4 tm_;
00102 Mat4 ttm_;
00103 Mat4 itm_;
00104
00105 void update_tm();
00106 void update_components();
00107 };
00108
00109 }
00110
00111 #endif