Skip to content

Commit 08ee11a

Browse files
committed
Add AABB rendering support to DebugRenderer
1 parent e58e6bc commit 08ee11a

File tree

3 files changed

+30
-0
lines changed

3 files changed

+30
-0
lines changed

source/Geometry/AABB.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ namespace Geometry
4747

4848
AABB2D() : min(0.f), max(0.f) {}
4949
AABB2D(const glm::vec2& min, const glm::vec2& max) : min(min), max(max) {}
50+
AABB2D(const glm::vec2& center, float half_size) : min(center - glm::vec2(half_size)), max(center + glm::vec2(half_size)) {}
5051
bool operator==(const AABB2D& other) const = default;
5152

5253
glm::vec2 size() const { return max - min; }

source/OpenGL/DebugRenderer.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,34 @@ namespace OpenGL
140140
m_tri_mb.set_colour(p_colour);
141141
m_tri_mb.add_triangle(p_triangle);
142142
}
143+
void DebugRenderer::add(const Geometry::AABB& p_AABB, const glm::vec4& p_colour, bool fill)
144+
{
145+
if (fill) add(Geometry::Cuboid(p_AABB.get_center(), p_AABB.get_size() * 0.5f), p_colour);
146+
147+
// Get the 8 corners of the AABB
148+
auto min_x_min_y_max_z = glm::vec3(p_AABB.m_min.x, p_AABB.m_min.y, p_AABB.m_max.z);
149+
auto min_x_max_y_min_z = glm::vec3(p_AABB.m_min.x, p_AABB.m_max.y, p_AABB.m_min.z);
150+
auto min_x_max_y_max_z = glm::vec3(p_AABB.m_min.x, p_AABB.m_max.y, p_AABB.m_max.z);
151+
auto max_x_min_y_min_z = glm::vec3(p_AABB.m_max.x, p_AABB.m_min.y, p_AABB.m_min.z);
152+
auto max_x_min_y_max_z = glm::vec3(p_AABB.m_max.x, p_AABB.m_min.y, p_AABB.m_max.z);
153+
auto max_x_max_y_min_z = glm::vec3(p_AABB.m_max.x, p_AABB.m_max.y, p_AABB.m_min.z);
154+
155+
// Bottom face edges
156+
add(Geometry::LineSegment(p_AABB.m_min, max_x_min_y_min_z), p_colour); // Bottom front edge
157+
add(Geometry::LineSegment(max_x_min_y_min_z, max_x_max_y_min_z), p_colour); // Bottom right edge
158+
add(Geometry::LineSegment(max_x_max_y_min_z, min_x_max_y_min_z), p_colour); // Bottom back edge
159+
add(Geometry::LineSegment(min_x_max_y_min_z, p_AABB.m_min), p_colour); // Bottom left edge
160+
// Top face edges
161+
add(Geometry::LineSegment(min_x_min_y_max_z, max_x_min_y_max_z), p_colour); // Top front edge
162+
add(Geometry::LineSegment(max_x_min_y_max_z, p_AABB.m_max), p_colour); // Top right edge
163+
add(Geometry::LineSegment(p_AABB.m_max, min_x_max_y_max_z), p_colour); // Top back edge
164+
add(Geometry::LineSegment(min_x_max_y_max_z, min_x_min_y_max_z), p_colour); // Top left edge
165+
// Vertical edges connecting bottom and top faces
166+
add(Geometry::LineSegment(p_AABB.m_min, min_x_min_y_max_z), p_colour); // Front left vertical edge
167+
add(Geometry::LineSegment(max_x_min_y_min_z, max_x_min_y_max_z), p_colour); // Front right vertical edge
168+
add(Geometry::LineSegment(max_x_max_y_min_z, p_AABB.m_max), p_colour); // Back right vertical edge
169+
add(Geometry::LineSegment(min_x_max_y_min_z, min_x_max_y_max_z), p_colour); // Back left vertical edge
170+
}
143171
void DebugRenderer::add_axes(const glm::vec3& p_point, float length)
144172
{
145173
float scale = 0.01f * length;

source/OpenGL/DebugRenderer.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ namespace OpenGL
8888
static void add(const Geometry::Ray& p_ray, const glm::vec4& p_colour = glm::vec4(1.f));
8989
static void add(const Geometry::Sphere& p_sphere, const glm::vec4& p_colour = glm::vec4(1.f), size_t subdivisions = m_debug_options.m_subdivisions);
9090
static void add(const Geometry::Triangle& p_triangle, const glm::vec4& p_colour = glm::vec4(1.f));
91+
static void add(const Geometry::AABB& p_AABB, const glm::vec4& p_colour = glm::vec4(1.f), bool fill = false);
9192

9293
static void add_axes(const glm::vec3& p_point, float length = 1.f);
9394
};

0 commit comments

Comments
 (0)