This is an automated email from the git hooks/post-receive script. odyx pushed a commit to branch upstream/latest in repository colobot.
commit d112971c3e44fe59887eb3b2ca1384db8b41518f Author: Tomasz Kapuściński <tomaszka...@gmail.com> Date: Mon Jun 1 17:22:49 2015 +0200 Corrected shadow mapping and added experimental self-shadowing --- src/graphics/engine/engine.cpp | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/graphics/engine/engine.cpp b/src/graphics/engine/engine.cpp index bb21834..1a27cc5 100644 --- a/src/graphics/engine/engine.cpp +++ b/src/graphics/engine/engine.cpp @@ -3310,7 +3310,8 @@ void CEngine::Draw3DScene() } } - UseShadowMapping(false); + if (!m_qualityShadows) + UseShadowMapping(false); // Draws the shadows , if shadows enabled if (m_shadowVisible) @@ -3564,6 +3565,8 @@ void CEngine::RenderShadowMap() m_device->SetRenderState(RENDER_STATE_ALPHA_TEST, true); m_device->SetRenderState(RENDER_STATE_DEPTH_BIAS, false); m_device->SetAlphaTestFunc(COMP_FUNC_GREATER, 0.5f); + m_device->SetRenderState(RENDER_STATE_DEPTH_BIAS, true); + m_device->SetDepthBias(2.0f, 4.0f); m_device->SetViewport(0, 0, m_shadowMap.size.x, m_shadowMap.size.y); @@ -3578,29 +3581,34 @@ void CEngine::RenderShadowMap() lightOffset.Normalize(); float scale = log(m_shadowMap.size.x) / log(2.0f) - 6.5f; - float dist = 100.0f * scale; + float dist = 75.0f * scale; float depth = 2000.0f; Math::Vector pos = m_lookatPt;// +0.25f * dist * dir;// +0.25f * dist * lightOffset; - Math::Vector lightPos = m_lookatPt + Math::Vector(0.0f, -200.0f, 0.0f); + pos.x = round(pos.x); + pos.y = round(pos.y); + pos.z = round(pos.z); + + Math::Vector lightPos = pos + Math::Vector(0.0f, -200.0f, 0.0f); Math::Vector lookAt = lightPos - lightDir; Math::LoadOrthoProjectionMatrix(m_shadowProjMat, -dist, dist, -dist, dist, -depth, depth); Math::LoadViewMatrix(m_shadowViewMat, lightPos, lookAt, worldUp); + Math::Matrix scaleMat; + Math::LoadScaleMatrix(scaleMat, Math::Vector(1.0f, 1.0f, -1.0f)); + m_shadowViewMat = Math::MultiplyMatrices(scaleMat, m_shadowViewMat); + Math::Matrix temporary = Math::MultiplyMatrices(m_shadowProjMat, m_shadowViewMat); m_shadowTextureMat = Math::MultiplyMatrices(m_shadowBias, temporary); + m_shadowViewMat = Math::MultiplyMatrices(scaleMat, m_shadowViewMat); + m_device->SetTransform(TRANSFORM_PROJECTION, m_shadowProjMat); m_device->SetTransform(TRANSFORM_VIEW, m_shadowViewMat); - Math::Matrix scaleMat; - Math::LoadScaleMatrix(scaleMat, Math::Vector(1.0f, 1.0f, -1.0f)); - - m_shadowViewMat = Math::MultiplyMatrices(scaleMat, m_shadowViewMat); - m_device->SetTexture(0, 0); m_device->SetTexture(1, 0); @@ -3649,7 +3657,7 @@ void CEngine::RenderShadowMap() } m_device->SetRenderState(RENDER_STATE_DEPTH_BIAS, false); - m_device->SetDepthBias(1.0f, 0.0f); + m_device->SetDepthBias(0.0f, 0.0f); m_device->SetRenderState(RENDER_STATE_ALPHA_TEST, false); if (m_offscreenShadowRendering) // shadow map texture already have depth information, just unbind it -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/colobot.git _______________________________________________ Pkg-games-commits mailing list Pkg-games-commits@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits