Toast Engine
Toggle main menu visibility
Loading...
Searching...
No Matches
volume_bounds.hpp
Go to the documentation of this file.
1
6
7
#pragma once
8
#include "
voxel_constants.hpp
"
9
10
#include <algorithm>
11
#include <cmath>
12
#include <glm/glm.hpp>
13
14
namespace
voxel {
15
16
[[nodiscard]]
17
inline
auto
localExtent(glm::uvec3 brick_dims)
noexcept
-> glm::vec3 {
18
return
glm::vec3(brick_dims) * k_brick_size;
19
}
20
22
[[nodiscard]]
23
inline
auto
worldBoundingSphere
(
const
glm::mat4& model, glm::uvec3 brick_dims) -> glm::vec4 {
24
const
glm::vec3 extent = localExtent(brick_dims);
25
const
glm::vec3 centre = glm::vec3(model * glm::vec4(extent * 0.5f, 1.0f));
26
27
float
radius_squared = 0.0f;
28
for
(
int
corner = 0; corner < 8; ++corner) {
29
const
glm::vec3 local(
30
(corner & 1) != 0 ? extent.x : 0.0f, (corner & 2) != 0 ? extent.y : 0.0f, (corner & 4) != 0 ? extent.z : 0.0f
31
);
32
const
glm::vec3 offset = glm::vec3(model * glm::vec4(local, 1.0f)) - centre;
33
radius_squared = std::max(radius_squared, glm::dot(offset, offset));
34
}
35
return
{centre, std::sqrt(radius_squared)};
36
}
37
39
[[nodiscard]]
40
inline
auto
containsPoint
(
const
glm::mat4& inverse_model, glm::uvec3 brick_dims, glm::vec3 world_point,
float
margin = 0.0f)
41
->
bool
{
42
const
glm::vec3 local = glm::vec3(inverse_model * glm::vec4(world_point, 1.0f));
43
const
float
largest_scale = std::max(
44
{glm::length(glm::vec3(inverse_model[0])),
45
glm::length(glm::vec3(inverse_model[1])),
46
glm::length(glm::vec3(inverse_model[2]))}
47
);
48
const
glm::vec3 guard(margin * largest_scale);
49
return
glm::all(glm::greaterThanEqual(local, -guard)) && glm::all(glm::lessThanEqual(local, localExtent(brick_dims) + guard));
50
}
51
52
}
voxel::worldBoundingSphere
auto worldBoundingSphere(const glm::mat4 &model, glm::uvec3 brick_dims) -> glm::vec4
Definition
volume_bounds.hpp:23
voxel::containsPoint
auto containsPoint(const glm::mat4 &inverse_model, glm::uvec3 brick_dims, glm::vec3 world_point, float margin=0.0f) -> bool
Pass the near plane distance as margin.
Definition
volume_bounds.hpp:40
voxel_constants.hpp
engine
src
toast
voxel
volume_bounds.hpp
Generated by
1.17.0