From 09c9dec8ed80c310d0037240e9aa28255dff4ae0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomi=20Korpip=C3=A4=C3=A4?= Date: Tue, 22 Oct 2013 10:48:03 +0300 Subject: Slice view lighting fixed Task-number: QTRD-2490 + grid line lighting fixed Change-Id: Ieed6b3ab52baca958b84a814093ccd1e6fa8ba71 Change-Id: Ieed6b3ab52baca958b84a814093ccd1e6fa8ba71 Reviewed-by: Miikka Heikkinen --- src/datavisualization/engine/bars3drenderer.cpp | 47 +++++++----------- src/datavisualization/engine/scatter3drenderer.cpp | 56 ++++++--------------- src/datavisualization/engine/surface3drenderer.cpp | 58 ++++++---------------- 3 files changed, 46 insertions(+), 115 deletions(-) (limited to 'src/datavisualization') diff --git a/src/datavisualization/engine/bars3drenderer.cpp b/src/datavisualization/engine/bars3drenderer.cpp index 76af0713..d8db0c60 100644 --- a/src/datavisualization/engine/bars3drenderer.cpp +++ b/src/datavisualization/engine/bars3drenderer.cpp @@ -276,19 +276,19 @@ void Bars3DRenderer::drawSlicedScene(const LabelItem &xLabel, // Set up projection matrix QMatrix4x4 projectionMatrix; - projectionMatrix.perspective(45.0f, (GLfloat)m_sliceViewPort.width() - / (GLfloat)m_sliceViewPort.height(), 0.1f, 100.0f); + projectionMatrix.perspective(40.0f, (GLfloat)m_sliceViewPort.width() + / (GLfloat)m_sliceViewPort.height(), 0.1f, 10.0f); // Set view matrix QMatrix4x4 viewMatrix; // Adjust scaling (zoom rate based on aspect ratio) - GLfloat camZPosSliced = 5.0f / m_autoScaleAdjustment; + GLfloat camZPosSliced = cameraDistance / m_autoScaleAdjustment; viewMatrix.lookAt(QVector3D(0.0f, 0.0f, camZPosSliced), zeroVector, upVector); // Set light position - lightPos = QVector3D(0.0f, -m_yAdjustment, 0.0f); + lightPos = QVector3D(0.0f, -m_yAdjustment, camZPosSliced * 2.0f); // Bind bar shader m_barShader->bind(); @@ -1019,6 +1019,7 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle) // Draw grid lines if (m_cachedIsGridEnabled && m_heightNormalizer) { ShaderHelper *lineShader = m_backgroundShader; + // Bind bar shader lineShader->bind(); @@ -1028,6 +1029,18 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle) lineShader->setUniformValue(lineShader->view(), viewMatrix); lineShader->setUniformValue(lineShader->color(), barColor); lineShader->setUniformValue(lineShader->ambientS(), m_cachedTheme.m_ambientStrength); +#if !defined(QT_OPENGL_ES_2) + if (m_cachedShadowQuality > QDataVis::ShadowQualityNone) { + // Set shadowed shader bindings + lineShader->setUniformValue(lineShader->shadowQ(), m_shadowQualityToShader); + lineShader->setUniformValue(lineShader->lightS(), + m_cachedTheme.m_lightStrength / 20.0f); + } else +#endif + { + // Set shadowless shader bindings + lineShader->setUniformValue(lineShader->lightS(), m_cachedTheme.m_lightStrength / 2.5f); + } QVector3D gridLineScaler(rowScaleFactor, gridLineWidth, gridLineWidth); @@ -1060,18 +1073,12 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle) if (m_cachedShadowQuality > QDataVis::ShadowQualityNone) { // Set shadow shader bindings QMatrix4x4 depthMVPMatrix = depthProjectionViewMatrix * modelMatrix; - lineShader->setUniformValue(lineShader->shadowQ(), m_shadowQualityToShader); lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix); - lineShader->setUniformValue(lineShader->lightS(), adjustedLightStrength); - // Draw the object m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture); } else #endif { - // Set shadowless shader bindings - lineShader->setUniformValue(lineShader->lightS(), m_cachedTheme.m_lightStrength); - // Draw the object m_drawer->drawObject(lineShader, m_gridLineObj); } @@ -1108,18 +1115,12 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle) if (m_cachedShadowQuality > QDataVis::ShadowQualityNone) { // Set shadow shader bindings QMatrix4x4 depthMVPMatrix = depthProjectionViewMatrix * modelMatrix; - lineShader->setUniformValue(lineShader->shadowQ(), m_shadowQualityToShader); lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix); - lineShader->setUniformValue(lineShader->lightS(), adjustedLightStrength); - // Draw the object m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture); } else #endif { - // Set shadowless shader bindings - lineShader->setUniformValue(lineShader->lightS(), m_cachedTheme.m_lightStrength); - // Draw the object m_drawer->drawObject(lineShader, m_gridLineObj); } @@ -1164,18 +1165,12 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle) if (m_cachedShadowQuality > QDataVis::ShadowQualityNone) { // Set shadow shader bindings QMatrix4x4 depthMVPMatrix = depthProjectionViewMatrix * modelMatrix; - lineShader->setUniformValue(lineShader->shadowQ(), m_shadowQualityToShader); lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix); - lineShader->setUniformValue(lineShader->lightS(), adjustedLightStrength); - // Draw the object m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture); } else #endif { - // Set shadowless shader bindings - lineShader->setUniformValue(lineShader->lightS(), m_cachedTheme.m_lightStrength); - // Draw the object m_drawer->drawObject(lineShader, m_gridLineObj); } @@ -1213,18 +1208,12 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle) if (m_cachedShadowQuality > QDataVis::ShadowQualityNone) { // Set shadow shader bindings QMatrix4x4 depthMVPMatrix = depthProjectionViewMatrix * modelMatrix; - lineShader->setUniformValue(lineShader->shadowQ(), m_shadowQualityToShader); lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix); - lineShader->setUniformValue(lineShader->lightS(), adjustedLightStrength); - // Draw the object m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture); } else #endif { - // Set shadowless shader bindings - lineShader->setUniformValue(lineShader->lightS(), m_cachedTheme.m_lightStrength); - // Draw the object m_drawer->drawObject(lineShader, m_gridLineObj); } @@ -1349,7 +1338,7 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle) sideLabelRotation.setY(180.f); } QVector3D backLabelTrans = QVector3D(labelXTrans, 0.0f, - labelZTrans + labelMarginZTrans); + labelZTrans + labelMarginZTrans); QVector3D sideLabelTrans = QVector3D(-labelXTrans - labelMarginXTrans, 0.0f, -labelZTrans); diff --git a/src/datavisualization/engine/scatter3drenderer.cpp b/src/datavisualization/engine/scatter3drenderer.cpp index 68c74554..a187e3a4 100644 --- a/src/datavisualization/engine/scatter3drenderer.cpp +++ b/src/datavisualization/engine/scatter3drenderer.cpp @@ -654,6 +654,7 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle) if (m_cachedIsGridEnabled && m_heightNormalizer) { ShaderHelper *lineShader = m_backgroundShader; + // Bind line shader lineShader->bind(); @@ -663,6 +664,18 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle) lineShader->setUniformValue(lineShader->view(), viewMatrix); lineShader->setUniformValue(lineShader->color(), lineColor); lineShader->setUniformValue(lineShader->ambientS(), m_cachedTheme.m_ambientStrength); +#if !defined(QT_OPENGL_ES_2) + if (m_cachedShadowQuality > QDataVis::ShadowQualityNone) { + // Set shadowed shader bindings + lineShader->setUniformValue(lineShader->shadowQ(), m_shadowQualityToShader); + lineShader->setUniformValue(lineShader->lightS(), + m_cachedTheme.m_lightStrength / 20.0f); + } else +#endif + { + // Set shadowless shader bindings + lineShader->setUniformValue(lineShader->lightS(), m_cachedTheme.m_lightStrength / 2.5f); + } // Rows (= Z) if (m_axisCacheZ.segmentCount() > 0) { @@ -689,7 +702,6 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle) for (int segment = 0; segment <= lastSegment; segment++) { QMatrix4x4 modelMatrix; QMatrix4x4 MVPMatrix; - QMatrix4x4 depthMVPMatrix; QMatrix4x4 itModelMatrix; if (m_yFlipped) @@ -707,7 +719,6 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle) } MVPMatrix = projectionViewMatrix * modelMatrix; - depthMVPMatrix = depthProjectionViewMatrix * modelMatrix; // Set the rest of the shader bindings lineShader->setUniformValue(lineShader->model(), modelMatrix); @@ -717,20 +728,14 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle) #if !defined(QT_OPENGL_ES_2) if (m_cachedShadowQuality > QDataVis::ShadowQualityNone) { + QMatrix4x4 depthMVPMatrix = depthProjectionViewMatrix * modelMatrix; // Set shadow shader bindings - lineShader->setUniformValue(lineShader->shadowQ(), m_shadowQualityToShader); lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix); - lineShader->setUniformValue(lineShader->lightS(), adjustedLightStrength); - // Draw the object m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture); } else #endif { - // Set shadowless shader bindings - lineShader->setUniformValue(lineShader->lightS(), - m_cachedTheme.m_lightStrength); - // Draw the object m_drawer->drawObject(lineShader, m_gridLineObj); } @@ -771,19 +776,12 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle) if (m_cachedShadowQuality > QDataVis::ShadowQualityNone) { // Set shadow shader bindings QMatrix4x4 depthMVPMatrix = depthProjectionViewMatrix * modelMatrix; - lineShader->setUniformValue(lineShader->shadowQ(), m_shadowQualityToShader); lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix); - lineShader->setUniformValue(lineShader->lightS(), adjustedLightStrength); - // Draw the object m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture); } else #endif { - // Set shadowless shader bindings - lineShader->setUniformValue(lineShader->lightS(), - m_cachedTheme.m_lightStrength); - // Draw the object m_drawer->drawObject(lineShader, m_gridLineObj); } @@ -839,18 +837,12 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle) if (m_cachedShadowQuality > QDataVis::ShadowQualityNone) { // Set shadow shader bindings QMatrix4x4 depthMVPMatrix = depthProjectionViewMatrix * modelMatrix; - lineShader->setUniformValue(lineShader->shadowQ(), m_shadowQualityToShader); lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix); - lineShader->setUniformValue(lineShader->lightS(), adjustedLightStrength); - // Draw the object m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture); } else #endif { - // Set shadowless shader bindings - lineShader->setUniformValue(lineShader->lightS(), m_cachedTheme.m_lightStrength); - // Draw the object m_drawer->drawObject(lineShader, m_gridLineObj); } @@ -892,19 +884,12 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle) if (m_cachedShadowQuality > QDataVis::ShadowQualityNone) { // Set shadow shader bindings QMatrix4x4 depthMVPMatrix = depthProjectionViewMatrix * modelMatrix; - lineShader->setUniformValue(lineShader->shadowQ(), m_shadowQualityToShader); lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix); - lineShader->setUniformValue(lineShader->lightS(), adjustedLightStrength); - // Draw the object m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture); } else #endif { - // Set shadowless shader bindings - lineShader->setUniformValue(lineShader->lightS(), - m_cachedTheme.m_lightStrength); - // Draw the object m_drawer->drawObject(lineShader, m_gridLineObj); } @@ -955,18 +940,12 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle) if (m_cachedShadowQuality > QDataVis::ShadowQualityNone) { // Set shadow shader bindings QMatrix4x4 depthMVPMatrix = depthProjectionViewMatrix * modelMatrix; - lineShader->setUniformValue(lineShader->shadowQ(), m_shadowQualityToShader); lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix); - lineShader->setUniformValue(lineShader->lightS(), adjustedLightStrength); - // Draw the object m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture); } else #endif { - // Set shadowless shader bindings - lineShader->setUniformValue(lineShader->lightS(), m_cachedTheme.m_lightStrength); - // Draw the object m_drawer->drawObject(lineShader, m_gridLineObj); } @@ -1012,19 +991,12 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle) if (m_cachedShadowQuality > QDataVis::ShadowQualityNone) { // Set shadow shader bindings QMatrix4x4 depthMVPMatrix = depthProjectionViewMatrix * modelMatrix; - lineShader->setUniformValue(lineShader->shadowQ(), m_shadowQualityToShader); lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix); - lineShader->setUniformValue(lineShader->lightS(), adjustedLightStrength); - // Draw the object m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture); } else #endif { - // Set shadowless shader bindings - lineShader->setUniformValue(lineShader->lightS(), - m_cachedTheme.m_lightStrength); - // Draw the object m_drawer->drawObject(lineShader, m_gridLineObj); } diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp index 7d983022..444e0c43 100644 --- a/src/datavisualization/engine/surface3drenderer.cpp +++ b/src/datavisualization/engine/surface3drenderer.cpp @@ -484,7 +484,7 @@ void Surface3DRenderer::drawSlicedScene() viewMatrix.lookAt(QVector3D(0.0f, 0.0f, 1.0f), zeroVector, upVector); // Set light position - lightPos = m_cachedScene->activeLight()->position(); + lightPos = QVector3D(0.0f, 0.0f, 2.0f); QMatrix4x4 projectionViewMatrix = projectionMatrix * viewMatrix; @@ -1083,6 +1083,7 @@ void Surface3DRenderer::drawScene(GLuint defaultFboHandle) if (m_cachedIsGridEnabled && m_heightNormalizer) { ShaderHelper *lineShader = m_backgroundShader; + // Bind line shader lineShader->bind(); @@ -1092,6 +1093,18 @@ void Surface3DRenderer::drawScene(GLuint defaultFboHandle) lineShader->setUniformValue(lineShader->view(), viewMatrix); lineShader->setUniformValue(lineShader->color(), lineColor); lineShader->setUniformValue(lineShader->ambientS(), m_cachedTheme.m_ambientStrength); +#if !defined(QT_OPENGL_ES_2) + if (m_cachedShadowQuality > QDataVis::ShadowQualityNone) { + // Set shadowed shader bindings + lineShader->setUniformValue(lineShader->shadowQ(), m_shadowQualityToShader); + lineShader->setUniformValue(lineShader->lightS(), + m_cachedTheme.m_lightStrength / 20.0f); + } else +#endif + { + // Set shadowless shader bindings + lineShader->setUniformValue(lineShader->lightS(), m_cachedTheme.m_lightStrength / 2.5f); + } // Rows (= Z) if (m_axisCacheZ.segmentCount() > 0) { @@ -1132,19 +1145,12 @@ void Surface3DRenderer::drawScene(GLuint defaultFboHandle) #if !defined(QT_OPENGL_ES_2) if (m_cachedShadowQuality > QDataVis::ShadowQualityNone) { // Set shadow shader bindings - lineShader->setUniformValue(lineShader->shadowQ(), m_shadowQualityToShader); lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix); - lineShader->setUniformValue(lineShader->lightS(), adjustedLightStrength); - // Draw the object m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture); } else #endif { - // Set shadowless shader bindings - lineShader->setUniformValue(lineShader->lightS(), - m_cachedTheme.m_lightStrength); - // Draw the object m_drawer->drawObject(lineShader, m_gridLineObj); } @@ -1180,20 +1186,12 @@ void Surface3DRenderer::drawScene(GLuint defaultFboHandle) #if !defined(QT_OPENGL_ES_2) if (m_cachedShadowQuality > QDataVis::ShadowQualityNone) { // Set shadow shader bindings - lineShader->setUniformValue(lineShader->shadowQ(), m_shadowQualityToShader); lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix); - lineShader->setUniformValue(lineShader->lightS(), - adjustedLightStrength); - // Draw the object m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture); } else #endif { - // Set shadowless shader bindings - lineShader->setUniformValue(lineShader->lightS(), - m_cachedTheme.m_lightStrength); - // Draw the object m_drawer->drawObject(lineShader, m_gridLineObj); } @@ -1240,19 +1238,12 @@ void Surface3DRenderer::drawScene(GLuint defaultFboHandle) #if !defined(QT_OPENGL_ES_2) if (m_cachedShadowQuality > QDataVis::ShadowQualityNone) { // Set shadow shader bindings - lineShader->setUniformValue(lineShader->shadowQ(), m_shadowQualityToShader); lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix); - lineShader->setUniformValue(lineShader->lightS(), adjustedLightStrength); - // Draw the object m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture); } else #endif { - // Set shadowless shader bindings - lineShader->setUniformValue(lineShader->lightS(), - m_cachedTheme.m_lightStrength); - // Draw the object m_drawer->drawObject(lineShader, m_gridLineObj); } @@ -1288,19 +1279,12 @@ void Surface3DRenderer::drawScene(GLuint defaultFboHandle) #if !defined(QT_OPENGL_ES_2) if (m_cachedShadowQuality > QDataVis::ShadowQualityNone) { // Set shadow shader bindings - lineShader->setUniformValue(lineShader->shadowQ(), m_shadowQualityToShader); lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix); - lineShader->setUniformValue(lineShader->lightS(), adjustedLightStrength); - // Draw the object m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture); } else #endif { - // Set shadowless shader bindings - lineShader->setUniformValue(lineShader->lightS(), - m_cachedTheme.m_lightStrength); - // Draw the object m_drawer->drawObject(lineShader, m_gridLineObj); } @@ -1343,19 +1327,12 @@ void Surface3DRenderer::drawScene(GLuint defaultFboHandle) #if !defined(QT_OPENGL_ES_2) if (m_cachedShadowQuality > QDataVis::ShadowQualityNone) { // Set shadow shader bindings - lineShader->setUniformValue(lineShader->shadowQ(), m_shadowQualityToShader); lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix); - lineShader->setUniformValue(lineShader->lightS(), adjustedLightStrength); - // Draw the object m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture); } else #endif { - // Set shadowless shader bindings - lineShader->setUniformValue(lineShader->lightS(), - m_cachedTheme.m_lightStrength); - // Draw the object m_drawer->drawObject(lineShader, m_gridLineObj); } @@ -1393,19 +1370,12 @@ void Surface3DRenderer::drawScene(GLuint defaultFboHandle) #if !defined(QT_OPENGL_ES_2) if (m_cachedShadowQuality > QDataVis::ShadowQualityNone) { // Set shadow shader bindings - lineShader->setUniformValue(lineShader->shadowQ(), m_shadowQualityToShader); lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix); - lineShader->setUniformValue(lineShader->lightS(), adjustedLightStrength); - // Draw the object m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture); } else #endif { - // Set shadowless shader bindings - lineShader->setUniformValue(lineShader->lightS(), - m_cachedTheme.m_lightStrength); - // Draw the object m_drawer->drawObject(lineShader, m_gridLineObj); } -- cgit v1.2.3