diff options
author | Tomi Korpipää <tomi.korpipaa@digia.com> | 2013-05-16 10:01:59 +0300 |
---|---|---|
committer | Tomi Korpipää <tomi.korpipaa@digia.com> | 2013-05-17 08:11:47 +0300 |
commit | 64d9d0d2aed2b0046fc8aac8696484e7c6f9df21 (patch) | |
tree | 7706436573e52434f6733c153d9de1ef8cb996e8 /src/engine/q3dbars.cpp | |
parent | 49475810c0030850b63b5f468cd0a9df8cdab53e (diff) |
Made grid lines subject to shadows
Change-Id: Iae09c937b9b1d26c4ac4a120ec5447ec790061a7
Change-Id: Iae09c937b9b1d26c4ac4a120ec5447ec790061a7
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
Diffstat (limited to 'src/engine/q3dbars.cpp')
-rw-r--r-- | src/engine/q3dbars.cpp | 98 |
1 files changed, 88 insertions, 10 deletions
diff --git a/src/engine/q3dbars.cpp b/src/engine/q3dbars.cpp index 027ec996..b2b19d4c 100644 --- a/src/engine/q3dbars.cpp +++ b/src/engine/q3dbars.cpp @@ -996,8 +996,6 @@ void Q3DBars::drawScene() d_ptr->m_barShader->setUniformValue(d_ptr->m_barShader->lightP(), lightPos); d_ptr->m_barShader->setUniformValue(d_ptr->m_barShader->view(), viewMatrix); d_ptr->m_barShader->setUniformValue(d_ptr->m_barShader->color(), barColor); - d_ptr->m_barShader->setUniformValue(d_ptr->m_barShader->lightS(), - d_ptr->m_theme->m_lightStrength); d_ptr->m_barShader->setUniformValue(d_ptr->m_barShader->ambientS(), d_ptr->m_theme->m_ambientStrength); @@ -1005,6 +1003,7 @@ void Q3DBars::drawScene() for (GLfloat row = 0.0f; row <= d_ptr->m_sampleCount.second; row++) { QMatrix4x4 modelMatrix; QMatrix4x4 MVPMatrix; + QMatrix4x4 depthMVPMatrix; QMatrix4x4 itModelMatrix; rowPos = (row + 0.5f) * (d_ptr->m_barSpacing.height()); @@ -1016,6 +1015,7 @@ void Q3DBars::drawScene() gridLineWidth)); MVPMatrix = projectionMatrix * viewMatrix * modelMatrix; + depthMVPMatrix = depthProjectionMatrix * depthViewMatrix * modelMatrix; // Set the rest of the shader bindings d_ptr->m_barShader->setUniformValue(d_ptr->m_barShader->model(), modelMatrix); @@ -1023,14 +1023,33 @@ void Q3DBars::drawScene() itModelMatrix.inverted().transposed()); d_ptr->m_barShader->setUniformValue(d_ptr->m_barShader->MVP(), MVPMatrix); - // Draw the object - d_ptr->m_drawer->drawObject(d_ptr->m_barShader, d_ptr->m_gridLineObj); + if (d_ptr->m_shadowQuality > ShadowNone) { + // Set shadow shader bindings + d_ptr->m_barShader->setUniformValue(d_ptr->m_barShader->shadowQ(), + d_ptr->m_shadowQualityToShader); + d_ptr->m_barShader->setUniformValue(d_ptr->m_barShader->depth(), + depthMVPMatrix); + d_ptr->m_barShader->setUniformValue(d_ptr->m_barShader->lightS(), + d_ptr->m_theme->m_lightStrength / 10.0f); + + // Draw the object + d_ptr->m_drawer->drawObject(d_ptr->m_barShader, d_ptr->m_gridLineObj, + 0, d_ptr->m_depthTexture); + } else { + // Set shadowless shader bindings + d_ptr->m_barShader->setUniformValue(d_ptr->m_barShader->lightS(), + d_ptr->m_theme->m_lightStrength); + + // Draw the object + d_ptr->m_drawer->drawObject(d_ptr->m_barShader, d_ptr->m_gridLineObj); + } } // Floor lines: columns for (GLfloat bar = 0.0f; bar <= d_ptr->m_sampleCount.first; bar++) { QMatrix4x4 modelMatrix; QMatrix4x4 MVPMatrix; + QMatrix4x4 depthMVPMatrix; QMatrix4x4 itModelMatrix; barPos = (bar + 0.5f) * (d_ptr->m_barSpacing.width()); @@ -1042,6 +1061,7 @@ void Q3DBars::drawScene() d_ptr->m_columnDepth / d_ptr->m_scaleFactor)); MVPMatrix = projectionMatrix * viewMatrix * modelMatrix; + depthMVPMatrix = depthProjectionMatrix * depthViewMatrix * modelMatrix; // Set the rest of the shader bindings d_ptr->m_barShader->setUniformValue(d_ptr->m_barShader->model(), modelMatrix); @@ -1049,8 +1069,26 @@ void Q3DBars::drawScene() itModelMatrix.inverted().transposed()); d_ptr->m_barShader->setUniformValue(d_ptr->m_barShader->MVP(), MVPMatrix); - // Draw the object - d_ptr->m_drawer->drawObject(d_ptr->m_barShader, d_ptr->m_gridLineObj); + if (d_ptr->m_shadowQuality > ShadowNone) { + // Set shadow shader bindings + d_ptr->m_barShader->setUniformValue(d_ptr->m_barShader->shadowQ(), + d_ptr->m_shadowQualityToShader); + d_ptr->m_barShader->setUniformValue(d_ptr->m_barShader->depth(), + depthMVPMatrix); + d_ptr->m_barShader->setUniformValue(d_ptr->m_barShader->lightS(), + d_ptr->m_theme->m_lightStrength / 10.0f); + + // Draw the object + d_ptr->m_drawer->drawObject(d_ptr->m_barShader, d_ptr->m_gridLineObj, + 0, d_ptr->m_depthTexture); + } else { + // Set shadowless shader bindings + d_ptr->m_barShader->setUniformValue(d_ptr->m_barShader->lightS(), + d_ptr->m_theme->m_lightStrength); + + // Draw the object + d_ptr->m_drawer->drawObject(d_ptr->m_barShader, d_ptr->m_gridLineObj); + } } // Wall lines: back wall @@ -1059,6 +1097,7 @@ void Q3DBars::drawScene() barHeight += heightStep) { QMatrix4x4 modelMatrix; QMatrix4x4 MVPMatrix; + QMatrix4x4 depthMVPMatrix; QMatrix4x4 itModelMatrix; if (d_ptr->m_zFlipped) { @@ -1076,6 +1115,7 @@ void Q3DBars::drawScene() gridLineWidth)); MVPMatrix = projectionMatrix * viewMatrix * modelMatrix; + depthMVPMatrix = depthProjectionMatrix * depthViewMatrix * modelMatrix; // Set the rest of the shader bindings d_ptr->m_barShader->setUniformValue(d_ptr->m_barShader->model(), modelMatrix); @@ -1083,8 +1123,26 @@ void Q3DBars::drawScene() itModelMatrix.inverted().transposed()); d_ptr->m_barShader->setUniformValue(d_ptr->m_barShader->MVP(), MVPMatrix); - // Draw the object - d_ptr->m_drawer->drawObject(d_ptr->m_barShader, d_ptr->m_gridLineObj); + if (d_ptr->m_shadowQuality > ShadowNone) { + // Set shadow shader bindings + d_ptr->m_barShader->setUniformValue(d_ptr->m_barShader->shadowQ(), + d_ptr->m_shadowQualityToShader); + d_ptr->m_barShader->setUniformValue(d_ptr->m_barShader->depth(), + depthMVPMatrix); + d_ptr->m_barShader->setUniformValue(d_ptr->m_barShader->lightS(), + d_ptr->m_theme->m_lightStrength / 10.0f); + + // Draw the object + d_ptr->m_drawer->drawObject(d_ptr->m_barShader, d_ptr->m_gridLineObj, + 0, d_ptr->m_depthTexture); + } else { + // Set shadowless shader bindings + d_ptr->m_barShader->setUniformValue(d_ptr->m_barShader->lightS(), + d_ptr->m_theme->m_lightStrength); + + // Draw the object + d_ptr->m_drawer->drawObject(d_ptr->m_barShader, d_ptr->m_gridLineObj); + } } // Wall lines: side wall @@ -1092,6 +1150,7 @@ void Q3DBars::drawScene() barHeight += heightStep) { QMatrix4x4 modelMatrix; QMatrix4x4 MVPMatrix; + QMatrix4x4 depthMVPMatrix; QMatrix4x4 itModelMatrix; if (d_ptr->m_xFlipped) { @@ -1109,6 +1168,7 @@ void Q3DBars::drawScene() d_ptr->m_columnDepth / d_ptr->m_scaleFactor)); MVPMatrix = projectionMatrix * viewMatrix * modelMatrix; + depthMVPMatrix = depthProjectionMatrix * depthViewMatrix * modelMatrix; // Set the rest of the shader bindings d_ptr->m_barShader->setUniformValue(d_ptr->m_barShader->model(), modelMatrix); @@ -1116,8 +1176,26 @@ void Q3DBars::drawScene() itModelMatrix.inverted().transposed()); d_ptr->m_barShader->setUniformValue(d_ptr->m_barShader->MVP(), MVPMatrix); - // Draw the object - d_ptr->m_drawer->drawObject(d_ptr->m_barShader, d_ptr->m_gridLineObj); + if (d_ptr->m_shadowQuality > ShadowNone) { + // Set shadow shader bindings + d_ptr->m_barShader->setUniformValue(d_ptr->m_barShader->shadowQ(), + d_ptr->m_shadowQualityToShader); + d_ptr->m_barShader->setUniformValue(d_ptr->m_barShader->depth(), + depthMVPMatrix); + d_ptr->m_barShader->setUniformValue(d_ptr->m_barShader->lightS(), + d_ptr->m_theme->m_lightStrength / 10.0f); + + // Draw the object + d_ptr->m_drawer->drawObject(d_ptr->m_barShader, d_ptr->m_gridLineObj, + 0, d_ptr->m_depthTexture); + } else { + // Set shadowless shader bindings + d_ptr->m_barShader->setUniformValue(d_ptr->m_barShader->lightS(), + d_ptr->m_theme->m_lightStrength); + + // Draw the object + d_ptr->m_drawer->drawObject(d_ptr->m_barShader, d_ptr->m_gridLineObj); + } } // Release bar shader |