summaryrefslogtreecommitdiffstats
path: root/src/datavis3d/engine/scatter3drenderer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/datavis3d/engine/scatter3drenderer.cpp')
-rw-r--r--src/datavis3d/engine/scatter3drenderer.cpp99
1 files changed, 55 insertions, 44 deletions
diff --git a/src/datavis3d/engine/scatter3drenderer.cpp b/src/datavis3d/engine/scatter3drenderer.cpp
index 151d1d2f..43baaf4e 100644
--- a/src/datavis3d/engine/scatter3drenderer.cpp
+++ b/src/datavis3d/engine/scatter3drenderer.cpp
@@ -18,11 +18,12 @@
#include "scatter3drenderer_p.h"
#include "scatter3dcontroller_p.h"
-#include "camerahelper_p.h"
+#include "q3dcamera.h"
#include "shaderhelper_p.h"
#include "objecthelper_p.h"
#include "texturehelper_p.h"
#include "utils_p.h"
+#include "q3dlight.h"
#include <QMatrix4x4>
#include <QMouseEvent>
@@ -160,25 +161,37 @@ void Scatter3DRenderer::updateDataModel(QScatterDataProxy *dataProxy)
Abstract3DRenderer::updateDataModel(dataProxy);
}
-void Scatter3DRenderer::render(CameraHelper *camera, const GLuint defaultFboHandle)
+void Scatter3DRenderer::updateScene(Q3DScene *scene)
{
- // Handle GL state setup for FBO buffers and clearing of the render surface
- Abstract3DRenderer::render(camera, defaultFboHandle);
+ // TODO: Move these to more suitable place e.g. controller should be controlling the viewports.
+ scene->setMainViewport(m_mainViewPort);
+ scene->setUnderSideCameraEnabled(true);
if (m_hasHeightAdjustmentChanged) {
- // Set initial camera position. Also update if height adjustment has changed.
- camera->setDefaultCameraOrientation(QVector3D(0.0f, 0.0f, 6.0f + zComp),
- QVector3D(0.0f, 0.0f, zComp),
- QVector3D(0.0f, 1.0f, 0.0f));
+ // Set initial m_cachedScene->camera() position. Also update if height adjustment has changed.
+ scene->camera()->setDefaultOrientation(QVector3D(0.0f, 0.0f, 6.0f + zComp),
+ QVector3D(0.0f, 0.0f, zComp),
+ QVector3D(0.0f, 1.0f, 0.0f));
m_hasHeightAdjustmentChanged = false;
}
+ scene->camera()->updateViewMatrix(m_autoScaleAdjustment);
+ // Set light position (rotate light with m_cachedScene->camera(), a bit above it (as set in defaultLightPos))
+ scene->setLightPositionRelativeToCamera(defaultLightPos);
+
+ Abstract3DRenderer::updateScene(scene);
+}
+
+void Scatter3DRenderer::render(GLuint defaultFboHandle)
+{
+ // Handle GL state setup for FBO buffers and clearing of the render surface
+ Abstract3DRenderer::render(defaultFboHandle);
+
// Draw dots scene
- drawScene(camera, defaultFboHandle);
+ drawScene(defaultFboHandle);
}
-void Scatter3DRenderer::drawScene(CameraHelper *camera,
- const GLuint defaultFboHandle)
+void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
{
GLfloat backgroundRotation = 0;
@@ -192,11 +205,7 @@ void Scatter3DRenderer::drawScene(CameraHelper *camera,
/ (GLfloat)m_mainViewPort.height(), 0.1f, 100.0f);
// Calculate view matrix
- QMatrix4x4 viewMatrix = m_controller->calculateViewMatrix(
- m_cachedZoomLevel * m_autoScaleAdjustment,
- m_mainViewPort.width(),
- m_mainViewPort.height(),
- true);
+ QMatrix4x4 viewMatrix = m_cachedScene->camera()->viewMatrix();
// Calculate label flipping
if (viewMatrix.row(0).x() > 0)
@@ -224,8 +233,8 @@ void Scatter3DRenderer::drawScene(CameraHelper *camera,
else if (m_zFlipped && !m_xFlipped)
backgroundRotation = 0.0f;
- // Get light position (rotate light with camera, a bit above it (as set in defaultLightPos))
- QVector3D lightPos = camera->calculateLightPosition(defaultLightPos);
+ // Get light position from the scene
+ QVector3D lightPos = m_cachedScene->light()->position();
// Map adjustment direction to model matrix scaling
// TODO: Let's use these for testing the autoscaling of dots based on their number
@@ -260,12 +269,13 @@ void Scatter3DRenderer::drawScene(CameraHelper *camera,
// Get the depth view matrix
// It may be possible to hack lightPos here if we want to make some tweaks to shadow
- QVector3D depthLightPos = camera->calculateLightPosition(
+ QVector3D depthLightPos = m_cachedScene->camera()->calculatePositionRelativeToCamera(
defaultLightPos, 0.0f, 1.0f / m_autoScaleAdjustment);
depthViewMatrix.lookAt(depthLightPos, QVector3D(0.0f, 0.0f, zComp),
QVector3D(0.0f, 1.0f, 0.0f));
- // TODO: Why does depthViewMatrix.column(3).y() goes to zero when we're directly above? That causes the scene to be not drawn from above -> must be fixed
- //qDebug() << lightPos << depthViewMatrix << depthViewMatrix.column(3);
+ // TODO: Why does depthViewMatrix.column(3).y() goes to zero when we're directly above?
+ // That causes the scene to be not drawn from above -> must be fixed
+ // qDebug() << lightPos << depthViewMatrix << depthViewMatrix.column(3);
// Set the depth projection matrix
#ifndef USE_WIDER_SHADOWS
// Use this for perspective shadows
@@ -413,9 +423,10 @@ void Scatter3DRenderer::drawScene(CameraHelper *camera,
glEnable(GL_DITHER);
// Read color under cursor
- if (Scatter3DController::MouseOnScene == m_controller->mouseState())
- m_selection = Utils::getSelection(m_controller->mousePosition(),
+ if (QDataVis::InputOnScene == m_controller->inputState()) {
+ m_selection = Utils::getSelection(m_controller->inputPosition(),
m_cachedBoundingRect.height());
+ }
glBindFramebuffer(GL_FRAMEBUFFER, defaultFboHandle);
@@ -701,7 +712,7 @@ void Scatter3DRenderer::drawScene(CameraHelper *camera,
// Set the rest of the shader bindings
lineShader->setUniformValue(lineShader->model(), modelMatrix);
lineShader->setUniformValue(lineShader->nModel(),
- itModelMatrix.inverted().transposed());
+ itModelMatrix.inverted().transposed());
lineShader->setUniformValue(lineShader->MVP(), MVPMatrix);
#if !defined(QT_OPENGL_ES_2)
@@ -710,7 +721,7 @@ void Scatter3DRenderer::drawScene(CameraHelper *camera,
lineShader->setUniformValue(lineShader->shadowQ(), m_shadowQualityToShader);
lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix);
lineShader->setUniformValue(lineShader->lightS(),
- m_cachedTheme.m_lightStrength / 10.0f);
+ m_cachedTheme.m_lightStrength / 10.0f);
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture);
@@ -719,7 +730,7 @@ void Scatter3DRenderer::drawScene(CameraHelper *camera,
{
// Set shadowless shader bindings
lineShader->setUniformValue(lineShader->lightS(),
- m_cachedTheme.m_lightStrength);
+ m_cachedTheme.m_lightStrength);
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj);
@@ -755,7 +766,7 @@ void Scatter3DRenderer::drawScene(CameraHelper *camera,
// Set the rest of the shader bindings
lineShader->setUniformValue(lineShader->model(), modelMatrix);
lineShader->setUniformValue(lineShader->nModel(),
- itModelMatrix.inverted().transposed());
+ itModelMatrix.inverted().transposed());
lineShader->setUniformValue(lineShader->MVP(), MVPMatrix);
#if !defined(QT_OPENGL_ES_2)
@@ -764,7 +775,7 @@ void Scatter3DRenderer::drawScene(CameraHelper *camera,
lineShader->setUniformValue(lineShader->shadowQ(), m_shadowQualityToShader);
lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix);
lineShader->setUniformValue(lineShader->lightS(),
- m_cachedTheme.m_lightStrength / 10.0f);
+ m_cachedTheme.m_lightStrength / 10.0f);
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture);
@@ -773,7 +784,7 @@ void Scatter3DRenderer::drawScene(CameraHelper *camera,
{
// Set shadowless shader bindings
lineShader->setUniformValue(lineShader->lightS(),
- m_cachedTheme.m_lightStrength);
+ m_cachedTheme.m_lightStrength);
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj);
@@ -831,7 +842,7 @@ void Scatter3DRenderer::drawScene(CameraHelper *camera,
// Set the rest of the shader bindings
lineShader->setUniformValue(lineShader->model(), modelMatrix);
lineShader->setUniformValue(lineShader->nModel(),
- itModelMatrix.inverted().transposed());
+ itModelMatrix.inverted().transposed());
lineShader->setUniformValue(lineShader->MVP(), MVPMatrix);
#if !defined(QT_OPENGL_ES_2)
@@ -840,7 +851,7 @@ void Scatter3DRenderer::drawScene(CameraHelper *camera,
lineShader->setUniformValue(lineShader->shadowQ(), m_shadowQualityToShader);
lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix);
lineShader->setUniformValue(lineShader->lightS(),
- m_cachedTheme.m_lightStrength / 10.0f);
+ m_cachedTheme.m_lightStrength / 10.0f);
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture);
@@ -884,7 +895,7 @@ void Scatter3DRenderer::drawScene(CameraHelper *camera,
// Set the rest of the shader bindings
lineShader->setUniformValue(lineShader->model(), modelMatrix);
lineShader->setUniformValue(lineShader->nModel(),
- itModelMatrix.inverted().transposed());
+ itModelMatrix.inverted().transposed());
lineShader->setUniformValue(lineShader->MVP(), MVPMatrix);
#if !defined(QT_OPENGL_ES_2)
@@ -893,7 +904,7 @@ void Scatter3DRenderer::drawScene(CameraHelper *camera,
lineShader->setUniformValue(lineShader->shadowQ(), m_shadowQualityToShader);
lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix);
lineShader->setUniformValue(lineShader->lightS(),
- m_cachedTheme.m_lightStrength / 10.0f);
+ m_cachedTheme.m_lightStrength / 10.0f);
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture);
@@ -902,7 +913,7 @@ void Scatter3DRenderer::drawScene(CameraHelper *camera,
{
// Set shadowless shader bindings
lineShader->setUniformValue(lineShader->lightS(),
- m_cachedTheme.m_lightStrength);
+ m_cachedTheme.m_lightStrength);
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj);
@@ -956,7 +967,7 @@ void Scatter3DRenderer::drawScene(CameraHelper *camera,
// Set the rest of the shader bindings
lineShader->setUniformValue(lineShader->model(), modelMatrix);
lineShader->setUniformValue(lineShader->nModel(),
- itModelMatrix.inverted().transposed());
+ itModelMatrix.inverted().transposed());
lineShader->setUniformValue(lineShader->MVP(), MVPMatrix);
#if !defined(QT_OPENGL_ES_2)
@@ -965,7 +976,7 @@ void Scatter3DRenderer::drawScene(CameraHelper *camera,
lineShader->setUniformValue(lineShader->shadowQ(), m_shadowQualityToShader);
lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix);
lineShader->setUniformValue(lineShader->lightS(),
- m_cachedTheme.m_lightStrength / 10.0f);
+ m_cachedTheme.m_lightStrength / 10.0f);
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture);
@@ -1023,7 +1034,7 @@ void Scatter3DRenderer::drawScene(CameraHelper *camera,
// Set the rest of the shader bindings
lineShader->setUniformValue(lineShader->model(), modelMatrix);
lineShader->setUniformValue(lineShader->nModel(),
- itModelMatrix.inverted().transposed());
+ itModelMatrix.inverted().transposed());
lineShader->setUniformValue(lineShader->MVP(), MVPMatrix);
#if !defined(QT_OPENGL_ES_2)
@@ -1032,7 +1043,7 @@ void Scatter3DRenderer::drawScene(CameraHelper *camera,
lineShader->setUniformValue(lineShader->shadowQ(), m_shadowQualityToShader);
lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix);
lineShader->setUniformValue(lineShader->lightS(),
- m_cachedTheme.m_lightStrength / 10.0f);
+ m_cachedTheme.m_lightStrength / 10.0f);
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture);
@@ -1041,7 +1052,7 @@ void Scatter3DRenderer::drawScene(CameraHelper *camera,
{
// Set shadowless shader bindings
lineShader->setUniformValue(lineShader->lightS(),
- m_cachedTheme.m_lightStrength);
+ m_cachedTheme.m_lightStrength);
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj);
@@ -1120,7 +1131,7 @@ void Scatter3DRenderer::drawScene(CameraHelper *camera,
QVector3D(0.0f, 0.0f, zComp),
QVector3D(rotLabelX, rotLabelY, rotLabelZ),
0, m_cachedSelectionMode,
- m_labelShader, m_labelObj, camera, true, true, Drawer::LabelMid,
+ m_labelShader, m_labelObj, m_cachedScene->camera(), true, true, Drawer::LabelMid,
alignment);
}
labelNbr++;
@@ -1180,7 +1191,7 @@ void Scatter3DRenderer::drawScene(CameraHelper *camera,
QVector3D(0.0f, 0.0f, zComp),
QVector3D(rotLabelX, rotLabelY, rotLabelZ),
0, m_cachedSelectionMode,
- m_labelShader, m_labelObj, camera, true, true, Drawer::LabelMid,
+ m_labelShader, m_labelObj, m_cachedScene->camera(), true, true, Drawer::LabelMid,
alignment);
}
labelNbr++;
@@ -1233,7 +1244,7 @@ void Scatter3DRenderer::drawScene(CameraHelper *camera,
QVector3D(0.0f, 0.0f, zComp),
QVector3D(rotLabelX, rotLabelY, rotLabelZ),
0, m_cachedSelectionMode,
- m_labelShader, m_labelObj, camera, true, true, Drawer::LabelMid,
+ m_labelShader, m_labelObj, m_cachedScene->camera(), true, true, Drawer::LabelMid,
alignment);
// Side wall
@@ -1255,7 +1266,7 @@ void Scatter3DRenderer::drawScene(CameraHelper *camera,
QVector3D(0.0f, 0.0f, zComp),
QVector3D(rotLabelX, rotLabelY, rotLabelZ),
0, m_cachedSelectionMode,
- m_labelShader, m_labelObj, camera, true, true, Drawer::LabelMid,
+ m_labelShader, m_labelObj, m_cachedScene->camera(), true, true, Drawer::LabelMid,
alignment);
}
labelNbr++;
@@ -1323,7 +1334,7 @@ void Scatter3DRenderer::drawScene(CameraHelper *camera,
QVector3D(0.0f, 0.0f, zComp),
QVector3D(0.0f, 0.0f, 0.0f), 0,
m_cachedSelectionMode, m_labelShader,
- m_labelObj, camera, true, false, Drawer::LabelMid);
+ m_labelObj, m_cachedScene->camera(), true, false, Drawer::LabelMid);
// Reset label update flag; they should have been updated when we get here
m_updateLabels = false;