diff options
author | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2013-10-11 11:50:10 +0300 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2013-10-11 11:55:38 +0300 |
commit | f00046bf71227ddc1332e54951bb8ed0ac1a4d1a (patch) | |
tree | f54d8c3e40796c860f2e4204ecefca2ebfc09129 /src | |
parent | a483fa13f4d4acebe0bb21fc569a8de23b76b56f (diff) |
Make grid visibility affect surface slice mode
Change-Id: I26d4b150cb7cd2aa30b651ee92bbd90554d63187
Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/datavisualization/engine/surface3drenderer.cpp | 171 |
1 files changed, 87 insertions, 84 deletions
diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp index 8d0d7203..4a718066 100644 --- a/src/datavisualization/engine/surface3drenderer.cpp +++ b/src/datavisualization/engine/surface3drenderer.cpp @@ -561,36 +561,79 @@ void Surface3DRenderer::drawSlicedScene() // Disable textures glDisable(GL_TEXTURE_2D); - ShaderHelper *lineShader = m_backgroundShader; - // Bind line shader - lineShader->bind(); - // lines to the back - if (m_axisCacheY.segmentCount() > 0) { - QVector3D gridLineScaleX(scaleXBackground, gridLineWidth, gridLineWidth); + if (m_cachedIsGridEnabled && m_heightNormalizer) { + ShaderHelper *lineShader = m_backgroundShader; + // Bind line shader + lineShader->bind(); - // Set unchanging shader bindings - QVector3D lineColor = Utils::vectorFromColor(m_cachedTheme.m_gridLine); - lineShader->setUniformValue(lineShader->lightP(), lightPos); - lineShader->setUniformValue(lineShader->view(), viewMatrix); - lineShader->setUniformValue(lineShader->color(), lineColor); - lineShader->setUniformValue(lineShader->ambientS(), m_cachedTheme.m_ambientStrength * 2.0f); - lineShader->setUniformValue(lineShader->lightS(), 0.25f); + if (m_axisCacheY.segmentCount() > 0) { + QVector3D gridLineScaleX(scaleXBackground, gridLineWidth, gridLineWidth); - // Back wall - GLfloat lineStep = 2.0f * m_axisCacheY.subSegmentStep() / m_heightNormalizer; - GLfloat linePos = -1.0f; - int lastSegment = m_axisCacheY.subSegmentCount() * m_axisCacheY.segmentCount(); + // Set unchanging shader bindings + QVector3D lineColor = Utils::vectorFromColor(m_cachedTheme.m_gridLine); + lineShader->setUniformValue(lineShader->lightP(), lightPos); + lineShader->setUniformValue(lineShader->view(), viewMatrix); + lineShader->setUniformValue(lineShader->color(), lineColor); + lineShader->setUniformValue(lineShader->ambientS(), m_cachedTheme.m_ambientStrength * 2.0f); + lineShader->setUniformValue(lineShader->lightS(), 0.25f); + + // Back wall + GLfloat lineStep = 2.0f * m_axisCacheY.subSegmentStep() / m_heightNormalizer; + GLfloat linePos = -1.0f; + int lastSegment = m_axisCacheY.subSegmentCount() * m_axisCacheY.segmentCount(); + + for (int segment = 0; segment <= lastSegment; segment++) { + QMatrix4x4 modelMatrix; + QMatrix4x4 MVPMatrix; + QMatrix4x4 itModelMatrix; + + modelMatrix.translate(0.0f, linePos, zComp - sliceZScale); + + modelMatrix.scale(gridLineScaleX); + itModelMatrix.scale(gridLineScaleX); + + MVPMatrix = projectionViewMatrix * modelMatrix; + + // Set the rest of the shader bindings + lineShader->setUniformValue(lineShader->model(), modelMatrix); + lineShader->setUniformValue(lineShader->nModel(), + itModelMatrix.inverted().transposed()); + lineShader->setUniformValue(lineShader->MVP(), MVPMatrix); + + // Draw the object + m_drawer->drawObject(lineShader, m_gridLineObj); + + linePos += lineStep; + } + } + + // Floor lines + QVector3D gridLineScaleZ(gridLineWidth, gridLineWidth, sliceZScale); + QVector3D gridLineScaleY(gridLineWidth, backgroundMargin, gridLineWidth); + + int lastSegment; + GLfloat lineStep; + GLfloat linePos; + if (m_cachedSelectionMode == QDataVis::SelectionModeSliceRow) { + lineStep = -2.0f * aspectRatio * m_axisCacheX.subSegmentStep() / m_scaleFactor; + lastSegment = m_axisCacheX.subSegmentCount() * m_axisCacheX.segmentCount(); + linePos = m_scaleX; + } else { + lineStep = -2.0f * aspectRatio * m_axisCacheZ.subSegmentStep() / m_scaleFactor; + lastSegment = m_axisCacheZ.subSegmentCount() * m_axisCacheZ.segmentCount(); + linePos = m_scaleZ; + } for (int segment = 0; segment <= lastSegment; segment++) { QMatrix4x4 modelMatrix; QMatrix4x4 MVPMatrix; QMatrix4x4 itModelMatrix; - modelMatrix.translate(0.0f, linePos, zComp - sliceZScale); + modelMatrix.translate(linePos, -backgroundMargin, zComp); - modelMatrix.scale(gridLineScaleX); - itModelMatrix.scale(gridLineScaleX); + modelMatrix.scale(gridLineScaleZ); + itModelMatrix.scale(gridLineScaleZ); MVPMatrix = projectionViewMatrix * modelMatrix; @@ -605,80 +648,39 @@ void Surface3DRenderer::drawSlicedScene() linePos += lineStep; } - } - // Floor lines - QVector3D gridLineScaleZ(gridLineWidth, gridLineWidth, sliceZScale); - QVector3D gridLineScaleY(gridLineWidth, backgroundMargin, gridLineWidth); - - int lastSegment; - GLfloat lineStep; - GLfloat linePos; - if (m_cachedSelectionMode == QDataVis::SelectionModeSliceRow) { - lineStep = -2.0f * aspectRatio * m_axisCacheX.subSegmentStep() / m_scaleFactor; - lastSegment = m_axisCacheX.subSegmentCount() * m_axisCacheX.segmentCount(); - linePos = m_scaleX; - } else { - lineStep = -2.0f * aspectRatio * m_axisCacheZ.subSegmentStep() / m_scaleFactor; - lastSegment = m_axisCacheZ.subSegmentCount() * m_axisCacheZ.segmentCount(); - linePos = m_scaleZ; - } - - for (int segment = 0; segment <= lastSegment; segment++) { - QMatrix4x4 modelMatrix; - QMatrix4x4 MVPMatrix; - QMatrix4x4 itModelMatrix; - - modelMatrix.translate(linePos, -backgroundMargin, zComp); - - modelMatrix.scale(gridLineScaleZ); - itModelMatrix.scale(gridLineScaleZ); - - MVPMatrix = projectionViewMatrix * modelMatrix; - - // Set the rest of the shader bindings - lineShader->setUniformValue(lineShader->model(), modelMatrix); - lineShader->setUniformValue(lineShader->nModel(), - itModelMatrix.inverted().transposed()); - lineShader->setUniformValue(lineShader->MVP(), MVPMatrix); - - // Draw the object - m_drawer->drawObject(lineShader, m_gridLineObj); - - linePos += lineStep; - } + if (m_cachedSelectionMode == QDataVis::SelectionModeSliceRow) + linePos = m_scaleX; + else + linePos = m_scaleZ; - if (m_cachedSelectionMode == QDataVis::SelectionModeSliceRow) - linePos = m_scaleX; - else - linePos = m_scaleZ; + for (int segment = 0; segment <= lastSegment; segment++) { + QMatrix4x4 modelMatrix; + QMatrix4x4 MVPMatrix; + QMatrix4x4 itModelMatrix; - for (int segment = 0; segment <= lastSegment; segment++) { - QMatrix4x4 modelMatrix; - QMatrix4x4 MVPMatrix; - QMatrix4x4 itModelMatrix; + modelMatrix.translate(linePos, 0.0f, zComp - sliceZScale); + modelMatrix.scale(gridLineScaleY); + itModelMatrix.scale(gridLineScaleY); - modelMatrix.translate(linePos, 0.0f, zComp - sliceZScale); - modelMatrix.scale(gridLineScaleY); - itModelMatrix.scale(gridLineScaleY); + MVPMatrix = projectionViewMatrix * modelMatrix; - MVPMatrix = projectionViewMatrix * modelMatrix; + // Set the rest of the shader bindings + lineShader->setUniformValue(lineShader->model(), modelMatrix); + lineShader->setUniformValue(lineShader->nModel(), + itModelMatrix.inverted().transposed()); + lineShader->setUniformValue(lineShader->MVP(), MVPMatrix); - // Set the rest of the shader bindings - lineShader->setUniformValue(lineShader->model(), modelMatrix); - lineShader->setUniformValue(lineShader->nModel(), - itModelMatrix.inverted().transposed()); - lineShader->setUniformValue(lineShader->MVP(), MVPMatrix); + // Draw the object + m_drawer->drawObject(lineShader, m_gridLineObj); - // Draw the object - m_drawer->drawObject(lineShader, m_gridLineObj); + linePos += lineStep; + } - linePos += lineStep; + // Release line shader + lineShader->release(); } - // Release line shader - lineShader->release(); - // Draw axis labels m_labelShader->bind(); glEnable(GL_TEXTURE_2D); @@ -715,6 +717,7 @@ void Surface3DRenderer::drawSlicedScene() // X Labels to ground int countLabelItems; + int lastSegment; if (m_cachedSelectionMode == QDataVis::SelectionModeSliceRow) { posStep = 2.0f * aspectRatio * m_axisCacheX.segmentStep() / m_scaleFactor; labelPos = -m_scaleX; |