Lesson 4

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í).