1. Vytvořte třídu Camera
2. Shader rozšiřte o pohledovou a projekční matici (na začátku je nastavte na jednotkovou).
uniform mat4 modelMatrix; uniform mat4 viewMatrix; uniform mat4 projectionMatrix;3. Pro pohledovou matici použije funkci glm::LookAt(eye, look, up); viz přednáška
glm::mat4 Camera::getCamera(void){ return glm::lookAt(eye, eye+target, up); }4. Pro výpočet směru kamery můžete použít (viz. přednáška):
target.x=cos(fi); target.z=sin(fi); target.y=sin(psi);5. Nastavte projekční matici na perspektivní promítání
//Projection matrix : //45° Field of View, 4:3 ratio, display range : 0.1 unit <-> 100 units mat4 projection=glm::perspective(glm::radians(45.0f), 4.0f / 3.0f, 0.1f, 100.0f);6. Upravte OOP – příklad přemapování callback funkcí [singleton_callback.zip]
7. Křížový odkaz
Dopředná deklarace (Forward declaration) odstraňuje problémy z důvodu křížového odkazu.//------- Shader.h ------ class Camera; // dopredna deklarace (z duvodu krizoveho odkazu) class Shader{ private: Camera* m_camera; public: Shader(Camera* camera); void metoda(); };//------- Shader.cpp ------ #include "Shader.h" #include "Camera.h" Shader::Shader(){ ... }//------- Camera.h ------ class Shader; // dopredna deklarace (z duvodu krizoveho odkazu) class Camera{ private: Shader* m_shader; public: Camera(Shader* shader); void metoda(); };//------- Camera.cpp ------ #include "Camera.h" #include "Shader.h" Camera::Camera(){ ... }8. Pro propojení třídy Camera a Shader můžete využijte návrhový vzor Observer (proč?).
Upravte si prosím zdrojový kód do rozumné slušné objektové formy (kontrola příští cvičení).