diff --git a/openVulkanoCpp/Scene/Geometry.cpp b/openVulkanoCpp/Scene/Geometry.cpp index 68dd790..080bd51 100644 --- a/openVulkanoCpp/Scene/Geometry.cpp +++ b/openVulkanoCpp/Scene/Geometry.cpp @@ -83,6 +83,46 @@ namespace OpenVulkano::Scene Geometry::Close(); } + void Geometry::CalculateAABB() + { + if (vertexCount == 0 || !vertices) + { + return; + } + for (int i = 0; i < vertexCount; i++) + { + float x = vertices[i].position.x; + float y = vertices[i].position.y; + float z = vertices[i].position.z; + + if (x < aabb.min.x) + { + aabb.min.x = x; + } + if (y < aabb.min.y) + { + aabb.min.y = y; + } + if (z < aabb.min.z) + { + aabb.min.z = z; + } + + if (x > aabb.max.x) + { + aabb.max.x = x; + } + if (y > aabb.max.y) + { + aabb.max.y = y; + } + if (z > aabb.max.z) + { + aabb.max.z = z; + } + } + } + void Geometry::Swap(Geometry& other) noexcept { RenderResourceHolder::Swap(other); diff --git a/openVulkanoCpp/Scene/Geometry.hpp b/openVulkanoCpp/Scene/Geometry.hpp index 6e12da0..df2d101 100644 --- a/openVulkanoCpp/Scene/Geometry.hpp +++ b/openVulkanoCpp/Scene/Geometry.hpp @@ -63,6 +63,7 @@ namespace OpenVulkano void SetOwnsMemory(bool val) { ownsMemory = val; } bool FreeAfterUpload() const { return freeAfterUpload; } void SetFreeAfterUpload(bool val) { freeAfterUpload = val; } + void CalculateAABB(); private: void Swap(Geometry& other) noexcept; };