diff options
author | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2014-01-24 13:45:18 +0200 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2014-01-27 07:51:17 +0200 |
commit | 71b501d31ae7c5d3aab987b54acccecce1136896 (patch) | |
tree | 7898e60da146dadd8ed665b21d35960efa5f61fa /src/datavisualization/engine/scatter3drenderer.cpp | |
parent | 8178f10769f7f7d84d4d1180994d0232e5fc8f93 (diff) |
Added series rotation and bar item rotation support
Task-number: QTRD-2654
Change-Id: I864d33bc173b35b8680eddb402bdf1817ecb031f
Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Diffstat (limited to 'src/datavisualization/engine/scatter3drenderer.cpp')
-rw-r--r-- | src/datavisualization/engine/scatter3drenderer.cpp | 34 |
1 files changed, 22 insertions, 12 deletions
diff --git a/src/datavisualization/engine/scatter3drenderer.cpp b/src/datavisualization/engine/scatter3drenderer.cpp index 9cbffcdb..7a2bf568 100644 --- a/src/datavisualization/engine/scatter3drenderer.cpp +++ b/src/datavisualization/engine/scatter3drenderer.cpp @@ -204,15 +204,16 @@ void Scatter3DRenderer::updateData() for (int i = 0; i < dataSize; i++) { QVector3D dotPos = dataArray.at(i).position(); + ScatterRenderItem &renderItem = m_renderingArrays[series][i]; if ((dotPos.x() >= minX && dotPos.x() <= maxX ) && (dotPos.y() >= minY && dotPos.y() <= maxY) && (dotPos.z() >= minZ && dotPos.z() <= maxZ)) { - m_renderingArrays[series][i].setPosition(dotPos); - m_renderingArrays[series][i].setVisible(true); - m_renderingArrays[series][i].setRotation(dataArray.at(i).rotation()); - calculateTranslation(m_renderingArrays[series][i]); + renderItem.setPosition(dotPos); + renderItem.setVisible(true); + renderItem.setRotation(dataArray.at(i).rotation()); + calculateTranslation(renderItem); } else { - m_renderingArrays[series][i].setVisible(false); + renderItem.setVisible(false); } } } @@ -372,6 +373,7 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle) // Draw dots to depth buffer for (int series = 0; series < seriesCount; series++) { ObjectHelper *dotObj = m_visibleSeriesList.at(series).object(); + QQuaternion seriesRotation = m_visibleSeriesList.at(series).meshRotation(); bool drawingPoints = (m_visibleSeriesList.at(series).mesh() == QAbstract3DSeries::MeshPoint); float itemSize = m_cachedItemSize.at(series) / itemScaler; @@ -393,7 +395,8 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle) modelMatrix.translate(item.translation()); if (!drawingPoints) { - modelMatrix.rotate(item.rotation()); + if (!seriesRotation.isIdentity() || !item.rotation().isIdentity()) + modelMatrix.rotate(seriesRotation * item.rotation()); modelMatrix.scale(modelScaler); } @@ -467,6 +470,7 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle) bool previousDrawingPoints = (m_visibleSeriesList.at(0).mesh() != QAbstract3DSeries::MeshPoint); for (int series = 0; series < seriesCount; series++) { ObjectHelper *dotObj = m_visibleSeriesList.at(series).object(); + QQuaternion seriesRotation = m_visibleSeriesList.at(series).meshRotation(); bool drawingPoints = (m_visibleSeriesList.at(series).mesh() == QAbstract3DSeries::MeshPoint); float itemSize = m_cachedItemSize.at(series) / itemScaler; @@ -504,7 +508,8 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle) modelMatrix.translate(item.translation()); if (!drawingPoints) { - modelMatrix.rotate(item.rotation()); + if (!seriesRotation.isIdentity() || !item.rotation().isIdentity()) + modelMatrix.rotate(seriesRotation * item.rotation()); modelMatrix.scale(modelScaler); } @@ -601,6 +606,7 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle) for (int series = 0; series < seriesCount; series++) { const SeriesRenderCache ¤tSeries = m_visibleSeriesList.at(series); + QQuaternion seriesRotation = currentSeries.meshRotation(); ObjectHelper *dotObj = currentSeries.object(); bool drawingPoints = (currentSeries.mesh() == QAbstract3DSeries::MeshPoint); Q3DTheme::ColorStyle colorStyle = currentSeries.colorStyle(); @@ -662,10 +668,13 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle) modelMatrix.translate(item.translation()); if (!drawingPoints) { - modelMatrix.rotate(item.rotation()); + if (!seriesRotation.isIdentity() || !item.rotation().isIdentity()) { + QQuaternion totalRotation = seriesRotation * item.rotation(); + modelMatrix.rotate(totalRotation); + itModelMatrix.rotate(totalRotation); + } modelMatrix.scale(modelScaler); itModelMatrix.scale(modelScaler); - itModelMatrix.rotate(item.rotation()); } #ifdef SHOW_DEPTH_TEXTURE_SCENE MVPMatrix = depthProjectionViewMatrix * modelMatrix; @@ -862,8 +871,8 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle) m_cachedTheme->lightStrength() / 2.5f); } - QQuaternion lineYRotation = QQuaternion(); - QQuaternion lineXRotation = QQuaternion(); + QQuaternion lineYRotation; + QQuaternion lineXRotation; if (m_xFlipped) lineYRotation = QQuaternion::fromAxisAndAngle(0.0f, 1.0f, 0.0f, -90.0f); @@ -1618,7 +1627,8 @@ void Scatter3DRenderer::fixMeshFileName(QString &fileName, QAbstract3DSeries::Me // Load full version of meshes that have it available if (mesh != QAbstract3DSeries::MeshSphere && mesh != QAbstract3DSeries::MeshMinimal - && mesh != QAbstract3DSeries::MeshPoint) { + && mesh != QAbstract3DSeries::MeshPoint + && mesh != QAbstract3DSeries::MeshArrow) { fileName.append(QStringLiteral("Full")); } } |