From 47f7759566bd2fa03eaf5943887417900e38280b Mon Sep 17 00:00:00 2001 From: sippeangelo Date: Thu, 13 Mar 2014 18:23:56 +0100 Subject: [PATCH] More awesome shadows --- Escape-the-Dawn/Renderer.cpp | 8 +++++--- Escape-the-Dawn/Shaders/Fragment.glsl | 4 ++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/Escape-the-Dawn/Renderer.cpp b/Escape-the-Dawn/Renderer.cpp index 1f6bef8..87a7e79 100644 --- a/Escape-the-Dawn/Renderer.cpp +++ b/Escape-the-Dawn/Renderer.cpp @@ -16,7 +16,7 @@ Renderer::Renderer() m_ShadowMapRes = 2048*2; m_SunPosition = glm::vec3(0, 0.3f, 10); m_SunTarget = glm::vec3(0, 0, 0); - m_SunProjection = glm::ortho(-200, 200, -10, 100, -800, 400); + m_SunProjection = glm::ortho(-200, 200, -10, 100, -800, 800); Lights = 0; } @@ -209,14 +209,16 @@ void Renderer::DrawScene() glBindTexture(GL_TEXTURE_2D, m_ShadowDepthTexture); //DrawModels(m_ShaderProgram); glm::mat4 cameraMatrix = m_Camera->ProjectionMatrix() * m_Camera->ViewMatrix(); + glm::mat4 depthCameraMatrix = biasMatrix * depthCamera; glm::mat4 MVP; + glm::mat4 depthMVP; for (auto tuple : ModelsToRender) { Model* model; glm::mat4 modelMatrix; std::tie(model, modelMatrix) = tuple; MVP = cameraMatrix * modelMatrix; - glm::mat4 depthMVP = biasMatrix * depthCamera * modelMatrix; + depthMVP = depthCameraMatrix * modelMatrix; glUniformMatrix4fv(glGetUniformLocation(m_ShaderProgram.GetHandle(), "MVP"), 1, GL_FALSE, glm::value_ptr(MVP)); glUniformMatrix4fv(glGetUniformLocation(m_ShaderProgram.GetHandle(), "DepthMVP"), 1, GL_FALSE, glm::value_ptr(depthMVP)); glUniformMatrix4fv(glGetUniformLocation(m_ShaderProgram.GetHandle(), "model"), 1, GL_FALSE, glm::value_ptr(modelMatrix)); @@ -243,7 +245,7 @@ void Renderer::DrawShadowMap() { glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); - glCullFace(GL_BACK); + glCullFace(GL_FRONT); glBindFramebuffer(GL_FRAMEBUFFER, m_ShadowFrameBuffer); glViewport(0, 0, m_ShadowMapRes, m_ShadowMapRes); diff --git a/Escape-the-Dawn/Shaders/Fragment.glsl b/Escape-the-Dawn/Shaders/Fragment.glsl index 8eeca87..a16878d 100644 --- a/Escape-the-Dawn/Shaders/Fragment.glsl +++ b/Escape-the-Dawn/Shaders/Fragment.glsl @@ -51,9 +51,9 @@ void main() { //bias = clamp(bias, 0.0, 0.01); float visibility = 1.0; if (Input.ShadowCoord.x >= 0.0 && Input.ShadowCoord.x <= 1.0 && Input.ShadowCoord.y >= 0.0 && Input.ShadowCoord.y <= 1.0) { - float bias = 0.003; + float bias = 0.0005; vec4 shadowMapValue = texture(shadowMap, Input.ShadowCoord.xy); - if (shadowMapValue.z < Input.ShadowCoord.z - bias) { + if (shadowMapValue.z < clamp(Input.ShadowCoord.z - bias, 0, 1)) { visibility = 0.5; } }