Tatooine
orthographic_camera.h
Go to the documentation of this file.
1#ifndef TATOOINE_RENDERING_ORTHOGRAPHIC_CAMERA_H
2#define TATOOINE_RENDERING_ORTHOGRAPHIC_CAMERA_H
3//==============================================================================
4#include <tatooine/ray.h>
7#include <tatooine/vec.h>
8
9#include <cassert>
10//==============================================================================
11namespace tatooine::rendering {
12//==============================================================================
13template <arithmetic Real>
15 public:
16 using real_type = Real;
23
24 public:
25 //----------------------------------------------------------------------------
26 // constructors / destructor
27 //----------------------------------------------------------------------------
30 constexpr orthographic_camera(vec3 const& eye, vec3 const& lookat,
31 vec3 const& up, Real const left,
32 Real const right, Real const bottom,
33 Real const top, Real const near, Real const far,
36 lookat,
37 up,
39 orthographic_matrix(left, right, bottom, top, near, far)} {
40 // setup();
41 }
42 //----------------------------------------------------------------------------
45 constexpr orthographic_camera(vec3 const& eye,
46 vec3 const& lookat,
47 vec3 const& up,
48 Real const left, Real const right,
49 Real const bottom, Real const top,
50 Real const near, Real const far,
51 std::size_t const res_x,
52 std::size_t const res_y)
54 lookat,
55 up,
56 Vec4<std::size_t>{0, 0, res_x, res_y},
57 orthographic_matrix(left, right, bottom, top, near, far)} {
58 // setup();
59 }
60 //----------------------------------------------------------------------------
63 constexpr orthographic_camera(vec3 const& eye, vec3 const& lookat,
64 Real const left, Real const right,
65 Real const bottom, Real const top,
66 Real const near, Real const far,
67 Vec4<std::size_t> const& viewport)
68 : parent_type{eye,
69 lookat,
70 vec3{0, 1, 0},
71 viewport,
72 orthographic_matrix(left, right, bottom, top, near, far)} {
73 // setup();
74 }
75 //----------------------------------------------------------------------------
78 constexpr orthographic_camera(vec3 const& eye, vec3 const& lookat,
79 Real const left, Real const right,
80 Real const bottom, Real const top,
81 Real const near, Real const far,
82 std::size_t const res_x,
83 std::size_t const res_y)
84 : parent_type{eye,
85 lookat,
86 vec3{0, 1, 0},
87 Vec4<std::size_t>{0, 0, res_x, res_y},
88 orthographic_matrix(left, right, bottom, top, near, far)} {
89 // setup();
90 }
91 //----------------------------------------------------------------------------
94 constexpr orthographic_camera(vec3 const& eye, vec3 const& lookat,
95 vec3 const& up, Real const height,
96 Real const near, Real const far,
97 Vec4<std::size_t> const& viewport)
99 lookat,
100 up,
101 -height / 2 * Real(viewport[2]) * Real(viewport[3]),
102 height / 2 * Real(viewport[2]) * Real(viewport[3]),
103 -height / 2,
104 height / 2,
105 near,
106 far,
107 viewport} {
108 // setup();
109 }
110 //----------------------------------------------------------------------------
113 constexpr orthographic_camera(vec3 const& eye, vec3 const& lookat,
114 vec3 const& up, Real const height,
115 Real const near, Real const far,
116 std::size_t const res_x,
117 std::size_t const res_y)
119 lookat,
120 up,
121 -height / 2 * Real(res_x) / Real(res_y),
122 height / 2 * Real(res_x) / Real(res_y),
123 -height / 2,
124 height / 2,
125 near,
126 far,
127 res_x,
128 res_y} {
129 // setup();
130 }
131 //----------------------------------------------------------------------------
134 orthographic_camera(vec3 const& eye, vec3 const& lookat, Real const height,
135 Real const near, Real const far,
136 Vec4<std::size_t> const& viewport)
137 : orthographic_camera{eye, lookat, vec3{0, 1, 0}, height,
138 near, far, viewport} {}
139 //----------------------------------------------------------------------------
142 orthographic_camera(vec3 const& eye, vec3 const& lookat, Real const height,
143 Real const near, Real const far, std::size_t const res_x,
144 std::size_t const res_y)
146 lookat,
147 vec3{0, 1, 0},
148 height,
149 near,
150 far,
151 Vec4<std::size_t>{0, 0, res_x, res_y}} {}
152 //----------------------------------------------------------------------------
154 //----------------------------------------------------------------------------
155 // object methods
156 //----------------------------------------------------------------------------
157 auto constexpr set_projection_matrix(Real const left, Real const right,
158 Real const bottom, Real const top,
159 Real const near, Real const far) {
160 set_projection_matrix(
161 orthographic_matrix(left, right, bottom, top, near, far));
162 }
163 //----------------------------------------------------------------------------
164 auto constexpr set_projection_matrix(Real const height, Real const near = 100,
165 Real const far = -100) {
166 set_projection_matrix(-height / 2 * this->aspect_ratio(),
167 height / 2 * this->aspect_ratio(), -height / 2, height / 2,
168 near, far);
169 }
170 //----------------------------------------------------------------------------
171 auto width() const { return 2 / this->projection_matrix()(0, 0); }
172 auto height() const { return 2 / this->projection_matrix()(1, 1); }
173 auto depth() const { return -2 / this->projection_matrix()(2, 2); }
174 //----------------------------------------------------------------------------
175 // auto constexpr setup(vec3 const& eye, vec3 const& lookat, vec3 const& up,
176 // Real const width, Real const height, Real const near,
177 // Real const far, std::size_t const res_x,
178 // std::size_t const res_y) -> void {
179 // this->set_eye_without_update(eye);
180 // this->set_lookat_without_update(lookat);
181 // this->set_up_without_update(up);
182 // this->set_resolution_without_update(res_x, res_y);
183 // m_top = height / 2;
184 // m_bottom = -m_top;
185 // m_right = width / 2;
186 // m_left = -m_right;
187 // this->set_near_without_update(near);
188 // this->set_far_without_update(far);
189 // setup();
190 //}
192 // auto constexpr setup(Real const width, Real const height) -> void {
193 // m_top = height / 2;
194 // m_bottom = -m_top;
195 // m_right = width / 2;
196 // m_left = -m_right;
197 // setup();
198 // }
199};
200//==============================================================================
201} // namespace tatooine::rendering
202//==============================================================================
203#endif
Definition: camera.h:12
auto constexpr orthographic_matrix(Real const left, Real const right, Real const bottom, Real const top, Real const near, Real const far)
Definition: matrices.h:69
Definition: mat.h:14
Interface for camera implementations.
Definition: camera.h:19
auto constexpr eye() const -> auto
Definition: camera.h:78
auto constexpr viewport() const -> auto const &
Returns number of pixels of plane in x-direction.
Definition: camera.h:63
auto set_projection_matrix(mat4 const &projection_matrix) -> void
Definition: camera.h:280
Definition: orthographic_camera.h:14
constexpr orthographic_camera(vec3 const &eye, vec3 const &lookat, Real const left, Real const right, Real const bottom, Real const top, Real const near, Real const far, std::size_t const res_x, std::size_t const res_y)
Definition: orthographic_camera.h:78
constexpr orthographic_camera(vec3 const &eye, vec3 const &lookat, vec3 const &up, Real const left, Real const right, Real const bottom, Real const top, Real const near, Real const far, Vec4< std::size_t > const &viewport)
Definition: orthographic_camera.h:30
constexpr orthographic_camera(vec3 const &eye, vec3 const &lookat, vec3 const &up, Real const height, Real const near, Real const far, Vec4< std::size_t > const &viewport)
Definition: orthographic_camera.h:94
auto constexpr viewport() const -> auto const &
Returns number of pixels of plane in x-direction.
Definition: camera.h:63
constexpr orthographic_camera(vec3 const &eye, vec3 const &lookat, vec3 const &up, Real const left, Real const right, Real const bottom, Real const top, Real const near, Real const far, std::size_t const res_x, std::size_t const res_y)
Definition: orthographic_camera.h:45
orthographic_camera(vec3 const &eye, vec3 const &lookat, Real const height, Real const near, Real const far, Vec4< std::size_t > const &viewport)
Definition: orthographic_camera.h:134
auto width() const
Definition: orthographic_camera.h:171
orthographic_camera(vec3 const &eye, vec3 const &lookat, Real const height, Real const near, Real const far, std::size_t const res_x, std::size_t const res_y)
Definition: orthographic_camera.h:142
auto constexpr set_projection_matrix(Real const left, Real const right, Real const bottom, Real const top, Real const near, Real const far)
Definition: orthographic_camera.h:157
auto height() const
Definition: orthographic_camera.h:172
auto depth() const
Definition: orthographic_camera.h:173
Real real_type
Definition: orthographic_camera.h:16
constexpr orthographic_camera(vec3 const &eye, vec3 const &lookat, vec3 const &up, Real const height, Real const near, Real const far, std::size_t const res_x, std::size_t const res_y)
Definition: orthographic_camera.h:113
auto constexpr set_projection_matrix(Real const height, Real const near=100, Real const far=-100)
Definition: orthographic_camera.h:164
constexpr orthographic_camera(vec3 const &eye, vec3 const &lookat, Real const left, Real const right, Real const bottom, Real const top, Real const near, Real const far, Vec4< std::size_t > const &viewport)
Definition: orthographic_camera.h:63
Definition: vec.h:12