From f4a1d120897584d7645741dd3b79354a92397efd Mon Sep 17 00:00:00 2001 From: Erik Broberg Date: Tue, 21 Jun 2016 12:25:38 -0400 Subject: [PATCH] Enable easy access to screen space points for AABB3s through DebugRenderer --- modules/debugging/rendering/debugrenderer.cpp | 27 +++++++++++++++++++ modules/debugging/rendering/debugrenderer.h | 7 +++++ 2 files changed, 34 insertions(+) diff --git a/modules/debugging/rendering/debugrenderer.cpp b/modules/debugging/rendering/debugrenderer.cpp index 6cb8a58037..929cd30400 100644 --- a/modules/debugging/rendering/debugrenderer.cpp +++ b/modules/debugging/rendering/debugrenderer.cpp @@ -208,4 +208,31 @@ namespace openspace { glEnable(GL_CULL_FACE); } + void DebugRenderer::renderAABB2(const AABB2& screenSpaceAABB, glm::vec4 rgba) const { + std::vector vertices(4); + vertices[0] = vec4(screenSpaceAABB.min.x, screenSpaceAABB.min.y, 1, 1); + vertices[1] = vec4(screenSpaceAABB.min.x, screenSpaceAABB.max.y, 1, 1); + vertices[2] = vec4(screenSpaceAABB.max.x, screenSpaceAABB.min.y, 1, 1); + vertices[3] = vec4(screenSpaceAABB.max.x, screenSpaceAABB.max.y, 1, 1); + + renderVertices(vertices, GL_LINES, rgba); + } + + const std::vector DebugRenderer::screenSpacePointsFor(const AABB3& screenSpaceAABB) const { + std::vector vertices(8); + for (size_t i = 0; i < 8; i++) { + bool cornerIsRight = i % 2 == 0; + bool cornerIsUp = i > 3; + bool cornerIsFar = (i / 2) % 2 == 1; + + double x = cornerIsRight ? screenSpaceAABB.max.x : screenSpaceAABB.min.x; + double y = cornerIsUp ? screenSpaceAABB.max.y : screenSpaceAABB.min.y; + double z = cornerIsFar ? screenSpaceAABB.max.z : screenSpaceAABB.min.z; + + vertices[i] = vec4(x, y, z, 1); + } + return std::move(vertices); + } + + } // namespace openspace \ No newline at end of file diff --git a/modules/debugging/rendering/debugrenderer.h b/modules/debugging/rendering/debugrenderer.h index 86936f499c..770598d9f6 100644 --- a/modules/debugging/rendering/debugrenderer.h +++ b/modules/debugging/rendering/debugrenderer.h @@ -29,6 +29,7 @@ #include #include +#include #include @@ -52,11 +53,17 @@ namespace openspace { static std::shared_ptr ref(); + void renderVertices(const std::vector& clippingSpacePoints, GLenum mode, glm::vec4 rgba = {1, 0, 0, 1}) const; void renderBoxFaces(const std::vector& clippingSpacePoints, glm::vec4 rgba = { 1, 0, 0, 1 }) const; void renderBoxEdges(const std::vector& clippingSpacePoints, glm::vec4 rgba = { 1, 0, 0, 1 }) const; void renderNiceBox(const std::vector& clippingSpacePoints, glm::vec4 rgba = { 1, 0, 0, 0.3 }) const; + void renderCameraFrustum(const RenderData& data, const Camera& otherCamera) const; + void renderAABB2(const AABB2& screenSpaceAABB, glm::vec4 rgba = { 1, 1, 1, 0.3 }) const; + + const std::vector screenSpacePointsFor(const AABB3& screenSpaceAABB) const; + private: