evan 2026.1.4
Evan
Loading...
Searching...
No Matches
Bounds.hpp
1/*
2** ETIB PROJECT, 2026
3** evan
4** File description:
5** Bounds
6*/
7
8#pragma once
9
10#include <utility/math/aabb.hpp>
11
12#include <glm/glm.hpp>
13
14namespace evan
15{
36 inline utility::math::AabbF
37 transformedBounds(const utility::math::AabbF &localBounds,
38 const glm::mat4 &transform)
39 {
40 if (localBounds.isEmpty() || transform == glm::mat4(1.0f)) {
41 return localBounds;
42 }
43
44 const auto min = localBounds.getMin();
45 const auto max = localBounds.getMax();
46
47 utility::math::AabbF worldBounds;
48 for (unsigned int corner = 0; corner < 8; ++corner) {
49 const glm::vec4 position((corner & 1u) != 0u ? max.x : min.x,
50 (corner & 2u) != 0u ? max.y : min.y,
51 (corner & 4u) != 0u ? max.z : min.z, 1.0f);
52 worldBounds.include(utility::math::Vector<float, 3>(
53 glm::vec3(transform * position)));
54 }
55 return worldBounds;
56 }
57} // namespace evan