Tatooine
render_axis_aligned_bounding_box.h
Go to the documentation of this file.
1#ifndef TATOOINE_RENDERING_RENDER_AXIS_ALIGNED_BOUNDING_BOX_H
2#define TATOOINE_RENDERING_RENDER_AXIS_ALIGNED_BOUNDING_BOX_H
3//==============================================================================
5#include <tatooine/concepts.h>
7//==============================================================================
8namespace tatooine::rendering {
9//==============================================================================
10template <typename Real>
11auto render(
12 AABB3<Real> const& aabb, int const line_width,
13 UniformRectilinearGrid2<Real> const& grid, camera auto const& cam,
15 std::size_t, std::size_t> auto&& callback) {
16 auto r = [&](auto const x0, auto const x1) {
17 render(x0, x1, line_width, grid, cam,
18 [&](auto const t, auto const... is) { callback(t, x0, x1, is...); });
19 };
20 r(Vec4<Real>{aabb.min(0), aabb.min(1), aabb.min(2), 1},
21 Vec4<Real>{aabb.max(0), aabb.min(1), aabb.min(2), 1});
22 r(Vec4<Real>{aabb.min(0), aabb.max(1), aabb.min(2), 1},
23 Vec4<Real>{aabb.max(0), aabb.max(1), aabb.min(2), 1});
24 r(Vec4<Real>{aabb.min(0), aabb.min(1), aabb.max(2), 1},
25 Vec4<Real>{aabb.max(0), aabb.min(1), aabb.max(2), 1});
26 r(Vec4<Real>{aabb.min(0), aabb.max(1), aabb.max(2), 1},
27 Vec4<Real>{aabb.max(0), aabb.max(1), aabb.max(2), 1});
28
29 r(Vec4<Real>{aabb.min(0), aabb.min(1), aabb.min(2), 1},
30 Vec4<Real>{aabb.min(0), aabb.max(1), aabb.min(2), 1});
31 r(Vec4<Real>{aabb.max(0), aabb.min(1), aabb.min(2), 1},
32 Vec4<Real>{aabb.max(0), aabb.max(1), aabb.min(2), 1});
33 r(Vec4<Real>{aabb.min(0), aabb.min(1), aabb.max(2), 1},
34 Vec4<Real>{aabb.min(0), aabb.max(1), aabb.max(2), 1});
35 r(Vec4<Real>{aabb.max(0), aabb.min(1), aabb.max(2), 1},
36 Vec4<Real>{aabb.max(0), aabb.max(1), aabb.max(2), 1});
37
38 r(Vec4<Real>{aabb.min(0), aabb.min(1), aabb.min(2), 1},
39 Vec4<Real>{aabb.min(0), aabb.min(1), aabb.max(2), 1});
40 r(Vec4<Real>{aabb.max(0), aabb.min(1), aabb.min(2), 1},
41 Vec4<Real>{aabb.max(0), aabb.min(1), aabb.max(2), 1});
42 r(Vec4<Real>{aabb.min(0), aabb.max(1), aabb.min(2), 1},
43 Vec4<Real>{aabb.min(0), aabb.max(1), aabb.max(2), 1});
44 r(Vec4<Real>{aabb.max(0), aabb.max(1), aabb.min(2), 1},
45 Vec4<Real>{aabb.max(0), aabb.max(1), aabb.max(2), 1});
46}
47//------------------------------------------------------------------------------
48template <typename Real, typename Callback>
49auto render(
51 camera auto const& cam,
53 std::size_t, std::size_t> auto&& callback) {
54 render(aabb, 1, grid, cam, std::forward<Callback>(callback));
55}
56//==============================================================================
57} // namespace tatooine::rendering
58//==============================================================================
59#endif
Definition: grid_edge.h:16
Definition: concepts.h:121
Definition: camera.h:312
Definition: camera.h:12
auto render(AABB3< Real > const &aabb, int const line_width, UniformRectilinearGrid2< Real > const &grid, camera auto const &cam, invocable< Real, typename AABB3< Real >::pos_type, typename AABB3< Real >::pos_type, std::size_t, std::size_t > auto &&callback)
Definition: render_axis_aligned_bounding_box.h:11
uniform_rectilinear_grid< Real, 2 > UniformRectilinearGrid2
Definition: rectilinear_grid.h:1912
Definition: axis_aligned_bounding_box.h:103
auto constexpr max() const -> auto const &
Definition: axis_aligned_bounding_box.h:156
auto constexpr min() const -> auto const &
Definition: axis_aligned_bounding_box.h:151