diff --git a/Escape-the-Dawn/Renderer.cpp b/Escape-the-Dawn/Renderer.cpp index 0948515..c554dc7 100644 --- a/Escape-the-Dawn/Renderer.cpp +++ b/Escape-the-Dawn/Renderer.cpp @@ -131,10 +131,19 @@ void Renderer::Draw(double dt) glEnable(GL_BLEND); glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ZERO); m_ShaderProgramDebugAABB.Bind(); - for (auto aabbModelMatrix : AABBsToRender) { + for (auto tuple : AABBsToRender) { + glm::mat4 modelMatrix; + bool colliding; + std::tie(modelMatrix, colliding) = tuple; + // Model matrix glm::mat4 cameraMatrix = m_Camera->ProjectionMatrix() * m_Camera->ViewMatrix(); - glm::mat4 MVP = cameraMatrix * aabbModelMatrix; + glm::mat4 MVP = cameraMatrix * modelMatrix; glUniformMatrix4fv(glGetUniformLocation(m_ShaderProgramDebugAABB.GetHandle(), "MVP"), 1, GL_FALSE, glm::value_ptr(MVP)); + // Color + glm::vec4 color(1.f, 1.f, 1.f, 0.f); + if (colliding) + color = glm::vec4(1.f, 0.f, 0.f, 0.f); + glUniform4fv(glGetUniformLocation(m_ShaderProgramDebugAABB.GetHandle(), "Color"), 1, glm::value_ptr(color)); glBindVertexArray(m_DebugAABB); glDrawArrays(GL_LINES, 0, 24); } @@ -318,6 +327,14 @@ void Renderer::AddPointLightToDraw( } +void Renderer::AddAABBToDraw(glm::vec3 origin, glm::vec3 volumeVector, bool colliding) +{ + glm::mat4 model; + model *= glm::translate(origin); + model *= glm::scale(volumeVector); + AABBsToRender.push_back(std::make_tuple(model, colliding)); +} + GLuint Renderer::CreateQuad() { float quadVertices[] = { @@ -409,11 +426,3 @@ GLuint Renderer::CreateAABB() return vao; } - -void Renderer::AddAABBToDraw(glm::vec3 origin, glm::vec3 volumeVector) -{ - glm::mat4 model; - model *= glm::translate(origin); - model *= glm::scale(volumeVector); - AABBsToRender.push_back(model); -} diff --git a/Escape-the-Dawn/Renderer.h b/Escape-the-Dawn/Renderer.h index 1f4ef77..3174fd5 100644 --- a/Escape-the-Dawn/Renderer.h +++ b/Escape-the-Dawn/Renderer.h @@ -46,7 +46,7 @@ public: std::vector Light_linearAttenuation; std::vector Light_quadraticAttenuation; std::vector Light_spotExponent; - std::vector AABBsToRender; + std::vector> AABBsToRender; Renderer(); @@ -65,7 +65,7 @@ public: float _quadraticAttenuation, float _spotExponent ); - void AddAABBToDraw(glm::vec3 origin, glm::vec3 volumeVector); + void AddAABBToDraw(glm::vec3 origin, glm::vec3 volumeVector, bool colliding); void LoadContent(); diff --git a/Escape-the-Dawn/Shaders/AABB.frag.glsl b/Escape-the-Dawn/Shaders/AABB.frag.glsl index 00cb7ab..16bbb30 100644 --- a/Escape-the-Dawn/Shaders/AABB.frag.glsl +++ b/Escape-the-Dawn/Shaders/AABB.frag.glsl @@ -1,5 +1,7 @@ #version 430 +uniform vec4 Color; + in VertexData { vec3 Position; vec3 Normal; @@ -11,5 +13,5 @@ out vec4 FragmentColor; void main() { //FragmentColor = vec4(1.0 - gl_Color.r, 1.0 - gl_Color.g, 1.0 - gl_Color.b, 0.0); - FragmentColor = vec4(1.0, 1.0, 1.0, 1.0); + FragmentColor = Color; } \ No newline at end of file diff --git a/Escape-the-Dawn/Systems/RenderSystem.cpp b/Escape-the-Dawn/Systems/RenderSystem.cpp index bed895a..899b3dd 100644 --- a/Escape-the-Dawn/Systems/RenderSystem.cpp +++ b/Escape-the-Dawn/Systems/RenderSystem.cpp @@ -32,9 +32,9 @@ void Systems::RenderSystem::UpdateEntity( double dt, EntityID entity, EntityID p #ifdef DEBUG auto bounds = m_World->GetComponent(entity, "Bounds"); if (bounds != nullptr) { - glm::vec3 origin = transformComponent->Scale * (transformComponent->Position + bounds->Origin); + glm::vec3 origin = transformComponent->Position + (transformComponent->Scale * bounds->Origin); glm::vec3 volumeVector = transformComponent->Scale * bounds->VolumeVector; - m_Renderer->AddAABBToDraw(origin, volumeVector); + m_Renderer->AddAABBToDraw(origin, volumeVector, true); } #endif