1 #ifndef BLOBS_GRAPHICS_CAMERA_HPP_
2 #define BLOBS_GRAPHICS_CAMERA_HPP_
4 #include "../math/glm.hpp"
19 explicit Camera(const world::Body &) noexcept;
22 Camera(const Camera &) = delete;
23 Camera &operator =(const Camera &) = delete;
25 Camera(Camera &&) = delete;
26 Camera &operator =(Camera &&) = delete;
29 Camera &FOV(float f) noexcept;
30 Camera &Aspect(float r) noexcept;
31 Camera &Aspect(float w, float h) noexcept;
32 Camera &Clip(float near, float far) noexcept;
34 const world::Body &Reference() const noexcept { return *ref; }
35 Camera &Reference(const world::Body &) noexcept;
37 /// standing on given surface, with pos.z being elevation over NN
38 /// looking at given coordinates
39 Camera &FirstPerson(int surface, const glm::vec3 &pos, const glm::vec3 &at) noexcept;
40 /// looking straight down at surface from above
41 Camera &MapView(int surface, const glm::vec3 &pos, float roll = 0.0f) noexcept;
42 /// look at center, position relative to orbital reference plane for children
43 Camera &Orbital(const glm::vec3 &pos) noexcept;
44 /// look at creature from above
45 Camera &TopDown(const creature::Creature &, float distance, float roll = 0.0f);
47 const glm::mat4 &Projection() const noexcept { return projection; }
48 const glm::mat4 &View() const noexcept { return view; }
49 glm::mat4 Model(const world::Body &) const noexcept;
52 void UpdateProjection() noexcept;
64 const world::Body *ref;
65 // track reference body's orientation