/** ******************************************************************************* @file /gui/engine/Camera.h @brief Kamera @author Vajicek @version 0.1 ******************************************************************************/ #ifndef CAMERA_H #define CAMERA_H #include "gui/common/mymath.h" #include "gui/engine/Scene.h" #include "gui/engine/SceneGeom.h" namespace gui{ /** Konfigurace kamery. */ struct TCameraLocation{ int id; ///< Id konfigurace. // P4F p4fPos; ///< Pozice. P4F p4fDir; ///< Smer. P4F p4fUp; ///< Upvektor. }; /** Kamera. Udrzuje charakteristicke vektory a zaroveni transformacni matici zdedenou z TSceneObject matice se da pouzit v setcam stejne tak jako gluLookAt */ class TCamera : public TSceneObject { protected: /** Spocitej kamerove vektory. */ void calculateCamVectors(); /** Spocitej matici. */ void calculateMatrix(); public: // cam config float fViewAngle; ///< uhel ve stupnich ve smeru osy y float fRatio; ///< x/y float fNear,fFar; ///< Orezavaci roviny //cam pos - read only, modifikace se provadi na transformacni matici sceneobjektu P4F p4fPos; ///< Pozice. P4F p4fDir; ///< Smer. P4F p4fUp; ///< Upvektor. /// KONFIGURACE //@{. /// Vektor konfiguraci. std::vector locations; /** Uloz aktualni konfiguraci. */ void pushLocation(); /** Uloz aktualni konfiguraci pod id. @param id Id ukladane konfigurace. */ void storeLocation(int id); /** Obnov konfiguraci. @param id Id obnovovane konfigurace, neexisuje, nic se nestane. */ void recallLocation(int id); /** Smaz vsechny ulozene konfigurace. */ void clearLocations(); /** Smaz konfiguraci. @param id Id mazane konfigurace. */ void deleteLocation(int id); //@} ///POHLEDOVE TRANSFORMACE //@{ /** Zmenen zakladni konfigurace. Pretizenim je mozne modifikovat jine reprezentace. */ virtual void positionUpdated(); /** Pohyb kamery dopredu. @param step Krok pohybu. */ void moveForward(float step); /** Pohyb kamery dozadu. @param step Krok pohybu. */ void moveBackward(float step); /** Otoceni o uhel doleva. @param ang Uhel otoceni doleva. */ void rotateLeft(float ang); /** Otoceni o uhel doprava. @param ang Uhel otoceni doprava. */ void rotateRight(float ang); /** Pohled. @param eyex @param eyey @param eyez @param centerx @param centery @param centerz @param upx @param upy @param upz */ void lookAt(float eyex, float eyey, float eyez, float centerx, float centery, float centerz, float upx, float upy, float upz); //@} ///PROJEKCNI TRANSFORMACE //@{ /** Nastav perspektivu. @param av @param ar @param n @param f */ void setupPerspective(float av,float ar,float n,float f); //@} /** Inicializuj kameru. */ virtual void initCam(); /** Nastav renderer na parametry kamery. */ virtual void setCam(); /** Vytvor pohledovy jehlan. @param[out] fr Jehlan. */ virtual void getFrustum(TFrustum* fr); void getViewMatrix(MX4 m); void getProjectionMatrix(MX4 m); /** Konstruktor. @param av Verikalni uhel. @param ar Horizontalni pohledovy uhel. @param n Blizka orezavaci rovina. @param f Vzdalena orezavaci rovina. */ TCamera(float av,float ar,float n,float f); ///ladici funkce //@{ void dumpModelMatrix(); void dumpProjectionMatrix(); //@} }; }//namespace #endif /*****************************************************************************/