From 57f84a6683f6554b19a1463df1070603380f189e Mon Sep 17 00:00:00 2001 From: Mika Salmela Date: Fri, 4 Oct 2013 16:18:39 +0300 Subject: No perspective for surface slice Task-number: QTRD-2375 Change-Id: I6e6da54628a0b16fcfe7a9371deaff02686d1b1e Reviewed-by: Mika Salmela --- src/datavisualization/engine/selectionpointer.cpp | 10 +++++--- src/datavisualization/engine/surface3drenderer.cpp | 27 ++++++++-------------- 2 files changed, 17 insertions(+), 20 deletions(-) (limited to 'src/datavisualization') diff --git a/src/datavisualization/engine/selectionpointer.cpp b/src/datavisualization/engine/selectionpointer.cpp index 421c547e..8a68d792 100644 --- a/src/datavisualization/engine/selectionpointer.cpp +++ b/src/datavisualization/engine/selectionpointer.cpp @@ -100,13 +100,17 @@ void SelectionPointer::render(GLuint defaultFboHandle) // Get view matrix QMatrix4x4 viewMatrix; + QMatrix4x4 projectionMatrix; if (m_cachedIsSlicingActivated) { GLfloat camZPosSliced = 5.0f / m_autoScaleAdjustment + zComp; viewMatrix.lookAt(QVector3D(0.0f, 0.0f, camZPosSliced), QVector3D(0.0f, 0.0f, zComp), QVector3D(0.0f, 1.0f, 0.0f)); + projectionMatrix.ortho(-3.0f, 3.0, -3.0, 3.0, 0.1f, 100.0f); } else { viewMatrix = camera->viewMatrix(); + projectionMatrix.perspective(45.0f, (GLfloat)m_mainViewPort.width() + / (GLfloat)m_mainViewPort.height(), 0.1f, 100.0f); } // Calculate scale factor to get uniform font size @@ -114,9 +118,9 @@ void SelectionPointer::render(GLuint defaultFboHandle) GLfloat scaleFactor = scaledFontSize / (GLfloat)textureSize.height(); // Set up projection matrix - QMatrix4x4 projectionMatrix; - projectionMatrix.perspective(45.0f, (GLfloat)m_mainViewPort.width() - / (GLfloat)m_mainViewPort.height(), 0.1f, 100.0f); +// QMatrix4x4 projectionMatrix; +// projectionMatrix.perspective(45.0f, (GLfloat)m_mainViewPort.width() +// / (GLfloat)m_mainViewPort.height(), 0.1f, 100.0f); QMatrix4x4 modelMatrix; QMatrix4x4 MVPMatrix; diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp index 28a81e0d..559679ab 100644 --- a/src/datavisualization/engine/surface3drenderer.cpp +++ b/src/datavisualization/engine/surface3drenderer.cpp @@ -271,16 +271,18 @@ void Surface3DRenderer::updateSliceDataModel(int selectionId) m_sliceDataArray.reserve(2); QSurfaceDataRow *sliceRow; + qreal adjust = (0.025 * m_heightNormalizer) / 2.0; + qreal stepDown = 2.0 * adjust; if (m_cachedSelectionMode == QDataVis::SelectionModeSliceRow) { QSurfaceDataRow *src = m_dataArray.at(row); sliceRow = new QSurfaceDataRow(src->size()); for (int i = 0; i < sliceRow->size(); i++) - (*sliceRow)[i].setPosition(QVector3D(src->at(i).x(), src->at(i).y(), -1.0)); + (*sliceRow)[i].setPosition(QVector3D(src->at(i).x(), src->at(i).y() + adjust, -1.0)); } else if (m_cachedSelectionMode == QDataVis::SelectionModeSliceColumn) { sliceRow = new QSurfaceDataRow(m_sampleSpace.height()); for (int i = 0; i < m_sampleSpace.height(); i++) { (*sliceRow)[i].setPosition(QVector3D(m_dataArray.at(i)->at(column).z(), - m_dataArray.at(i)->at(column).y(), + m_dataArray.at(i)->at(column).y() + adjust, -1.0)); } } @@ -290,7 +292,7 @@ void Surface3DRenderer::updateSliceDataModel(int selectionId) // Make a duplicate, so that we get a little bit depth QSurfaceDataRow *duplicateRow = new QSurfaceDataRow(*sliceRow); for (int i = 0; i < sliceRow->size(); i++) - (*sliceRow)[i].setPosition(QVector3D(sliceRow->at(i).x(), sliceRow->at(i).y(), 1.0)); + (*sliceRow)[i].setPosition(QVector3D(sliceRow->at(i).x(), sliceRow->at(i).y() - stepDown, 1.0)); m_sliceDataArray << duplicateRow; @@ -469,8 +471,7 @@ void Surface3DRenderer::drawSlicedScene() // Set up projection matrix QMatrix4x4 projectionMatrix; - projectionMatrix.perspective(45.0f, (GLfloat)m_sliceViewPort.width() - / (GLfloat)m_sliceViewPort.height(), 0.1f, 100.0f); + projectionMatrix.ortho(-3.0f, 3.0, -3.0, 3.0, 0.1f, 100.0f); // Set view matrix QMatrix4x4 viewMatrix; @@ -576,6 +577,10 @@ void Surface3DRenderer::drawSlicedScene() lineShader->setUniformValue(lineShader->color(), lineColor); lineShader->setUniformValue(lineShader->ambientS(), m_cachedTheme.m_ambientStrength); + // Set shadowless shader bindings, no shadows on slice view + lineShader->setUniformValue(lineShader->lightS(), + m_cachedTheme.m_lightStrength * 0.5f); + // Back wall GLfloat lineStep = 2.0f * m_axisCacheY.subSegmentStep() / m_heightNormalizer; GLfloat linePos = -1.0f; @@ -599,10 +604,6 @@ void Surface3DRenderer::drawSlicedScene() itModelMatrix.inverted().transposed()); lineShader->setUniformValue(lineShader->MVP(), MVPMatrix); - // Set shadowless shader bindings, no shadows on slice view - lineShader->setUniformValue(lineShader->lightS(), - m_cachedTheme.m_lightStrength); - // Draw the object m_drawer->drawObject(lineShader, m_gridLineObj); @@ -645,10 +646,6 @@ void Surface3DRenderer::drawSlicedScene() itModelMatrix.inverted().transposed()); lineShader->setUniformValue(lineShader->MVP(), MVPMatrix); - // Set shadowless shader bindings - lineShader->setUniformValue(lineShader->lightS(), - m_cachedTheme.m_lightStrength); - // Draw the object m_drawer->drawObject(lineShader, m_gridLineObj); @@ -677,10 +674,6 @@ void Surface3DRenderer::drawSlicedScene() itModelMatrix.inverted().transposed()); lineShader->setUniformValue(lineShader->MVP(), MVPMatrix); - // 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