summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/engine/scatter3drenderer.cpp
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2014-01-24 13:45:18 +0200
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2014-01-27 07:51:17 +0200
commit71b501d31ae7c5d3aab987b54acccecce1136896 (patch)
tree7898e60da146dadd8ed665b21d35960efa5f61fa /src/datavisualization/engine/scatter3drenderer.cpp
parent8178f10769f7f7d84d4d1180994d0232e5fc8f93 (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.cpp34
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 &currentSeries = 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"));
}
}