diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2025-03-06 02:41:09 +0000 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2025-03-11 01:13:52 +0000 |
commit | ba69d51cc372197ef55feb87a33ed03afd1b0ca3 (patch) | |
tree | ce50ac42a8d30d5246ca767107d76886d7237e69 /gfx/aabb.cpp | |
parent | Pass frustum into render functions (diff) | |
download | ilt-ba69d51cc372197ef55feb87a33ed03afd1b0ca3.tar.bz2 ilt-ba69d51cc372197ef55feb87a33ed03afd1b0ca3.tar.xz ilt-ba69d51cc372197ef55feb87a33ed03afd1b0ca3.zip |
Create AxisAlignedBoundingBox
Used to define the extents of GeoData mesh
Diffstat (limited to 'gfx/aabb.cpp')
-rw-r--r-- | gfx/aabb.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/gfx/aabb.cpp b/gfx/aabb.cpp new file mode 100644 index 0000000..862dacb --- /dev/null +++ b/gfx/aabb.cpp @@ -0,0 +1,24 @@ +#include "aabb.h" +#include <algorithm> +#include <tuple> + +AxisAlignedBoundingBox +AxisAlignedBoundingBox::fromPoints(const std::span<const GlobalPosition3D> points) +{ + using Limits = std::numeric_limits<GlobalDistance>; + static constexpr const auto INITIAL + = std::make_pair(GlobalPosition3D {Limits::max()}, GlobalPosition3D {Limits::min()}); + return std::make_from_tuple<AxisAlignedBoundingBox>( + std::ranges::fold_left(points, INITIAL, [](const auto & prev, const auto & point) { + auto & [min, max] = prev; + return std::make_pair(glm::min(min, point), glm::max(max, point)); + })); +} + +AxisAlignedBoundingBox & +AxisAlignedBoundingBox::operator+=(const GlobalPosition3D & point) +{ + min = glm::min(min, point); + max = glm::max(max, point); + return *this; +} |