@@ -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;
0 commit comments