2 #include "Viewport.hpp"
4 #include "../creature/Creature.hpp"
5 #include "../math/const.hpp"
6 #include "../world/Body.hpp"
7 #include "../world/Planet.hpp"
11 #include <glm/gtx/transform.hpp>
17 Camera::Camera(const world::Body &r) noexcept
22 , projection(glm::infinitePerspective(fov, aspect, near))
25 , track_orient(false) {
29 Camera::~Camera() noexcept {
32 Camera &Camera::FOV(float f) noexcept {
38 Camera &Camera::Aspect(float r) noexcept {
44 Camera &Camera::Aspect(float w, float h) noexcept {
49 Camera &Camera::Clip(float n, float f) noexcept {
56 Camera &Camera::Reference(const world::Body &r) noexcept {
61 Camera &Camera::LookAt(const glm::vec3 &pos, const glm::vec3 &tgt, const glm::vec3 &up) noexcept {
62 view = glm::lookAt(pos, tgt, up);
66 glm::mat4 Camera::Model(const world::Body &b) const noexcept {
68 return track_orient ? glm::mat4(1.0f) : glm::mat4(ref->LocalTransform());
69 } else if (b.HasParent() && &b.Parent() == ref) {
70 return glm::mat4(track_orient
71 ? ref->InverseTransform() * b.FromParent() * b.LocalTransform()
72 : b.FromParent() * b.LocalTransform());
73 } else if (ref->HasParent() && &ref->Parent() == &b) {
74 return glm::mat4(track_orient
75 ? ref->InverseTransform() * ref->ToParent() * b.LocalTransform()
76 : ref->ToParent() * b.LocalTransform());
78 return glm::mat4(track_orient
79 ? ref->InverseTransform() * ref->ToUniverse() * b.FromUniverse() * b.LocalTransform()
80 : ref->ToUniverse() * b.FromUniverse() * b.LocalTransform());
84 glm::mat4 Camera::Universe() const noexcept {
85 return glm::mat4(track_orient
86 ? ref->InverseTransform() * ref->ToUniverse()
90 void Camera::UpdateProjection() noexcept {
91 projection = glm::infinitePerspective(fov, aspect, near);
95 Viewport::Viewport(int w, int h)
99 glClearColor(0.0, 0.0, 0.0, 1.0);
102 Viewport::~Viewport() {
106 void Viewport::Resize(int w, int h) {
109 glViewport(0, 0, w, h);
112 void Viewport::Clear() {
113 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
116 void Viewport::ClearDepth() {
117 glClear(GL_DEPTH_BUFFER_BIT);