00001
00002 #ifndef _GK_ORBITER_H
00003 #define _GK_ORBITER_H
00004
00005 #include "Transform.h"
00006
00007
00008 namespace gk {
00009
00010
00011 class Orbiter
00012 {
00013 protected:
00014 Transform m_transform;
00015
00016 Point m_position;
00017 float m_rotation_x;
00018 float m_rotation_y;
00019 float m_rotation_z;
00020
00021
00022 const Point origin( ) const
00023 {
00024 return m_transform.inverse( Point(0.f, 0.f, 0.f) );
00025 }
00026
00027
00028 const Vector up( ) const
00029 {
00030 return m_transform.inverse( Vector(0.f, 1.f, 0.f) );
00031 }
00032
00033
00034 const Vector right( ) const
00035 {
00036 return m_transform.inverse( Vector(1.f, 0.f, 0.f) );
00037 }
00038
00039
00040 const Vector forward( ) const
00041 {
00042 return m_transform.inverse( Vector(0.f, 0.f, 1.f) );
00043 }
00044
00045 public:
00046
00047 Orbiter( )
00048 :
00049 m_transform(),
00050 m_position(),
00051 m_rotation_x(0.f),
00052 m_rotation_y(0.f),
00053 m_rotation_z(0.f)
00054 {}
00055
00056
00057 Orbiter( const float rx, const float ry, const float rz, const Point& position= Point(0.f, 0.f, 0.f) )
00058 :
00059 m_transform(),
00060 m_position(position),
00061 m_rotation_x(rx),
00062 m_rotation_y(ry),
00063 m_rotation_z(rz)
00064 {
00065 transform();
00066 }
00067
00068
00069 ~Orbiter( ) {}
00070
00071
00072 void moveForward( const float v )
00073 {
00074 m_position= m_position + forward() * v;
00075 }
00076
00077
00078 void moveRight( const float v )
00079 {
00080 m_position= m_position + right() * v;
00081 }
00082
00083
00084 void moveUp( const float v )
00085 {
00086 m_position= m_position + up() * v;
00087 }
00088
00089
00090 void move( const Point& p )
00091 {
00092 m_position= p;
00093 }
00094
00095
00096 void rotateUp( const float v )
00097 {
00098 m_rotation_y+= v;
00099 }
00100
00101
00102 void rotateRight( const float v )
00103 {
00104 m_rotation_x+= v;
00105 }
00106
00107
00108 void rotateForward( const float v )
00109 {
00110 m_rotation_z+= v;
00111 }
00112
00113
00114 const Matrix4x4& matrix( )
00115 {
00116 return transform().matrix();
00117 }
00118
00119
00120 const Transform& transform( )
00121 {
00122 m_transform= Translate( Vector(m_position) ) * RotateZ(m_rotation_z) * RotateX(m_rotation_x) * RotateY(m_rotation_y);
00123 return m_transform;
00124 }
00125 };
00126
00127 }
00128
00129 #endif