summaryrefslogtreecommitdiffstats
path: root/src/datavis3d
diff options
context:
space:
mode:
authorTomi Korpipää <tomi.korpipaa@digia.com>2013-04-22 11:37:29 +0300
committerTomi Korpipää <tomi.korpipaa@digia.com>2013-04-22 11:43:16 +0300
commite6f2c15d221885bb2fac4c17c6b782e94ff41205 (patch)
treed745499272a01af77fab3c1c766cabdd22c92aac /src/datavis3d
parent603afaebc81b8240657b58a1a349c2027a622ef3 (diff)
Added example on how to use 3d bars on qwidget
Initial version, more to be added Change-Id: I9c947f2e5ac525ab1821fc06e2f02c67da37fe70 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
Diffstat (limited to 'src/datavis3d')
-rw-r--r--src/datavis3d/engine/q3dbars.cpp146
-rw-r--r--src/datavis3d/engine/q3dwindow.h3
2 files changed, 85 insertions, 64 deletions
diff --git a/src/datavis3d/engine/q3dbars.cpp b/src/datavis3d/engine/q3dbars.cpp
index 175e2902..bfb79049 100644
--- a/src/datavis3d/engine/q3dbars.cpp
+++ b/src/datavis3d/engine/q3dbars.cpp
@@ -344,6 +344,11 @@ void Q3DBars::drawZoomScene()
GLfloat barHeight = item->d_ptr->value() / d_ptr->m_heightNormalizer;
+ if (barHeight < 0)
+ glCullFace(GL_FRONT);
+ else
+ glCullFace(GL_BACK);
+
QMatrix4x4 modelMatrix;
QMatrix4x4 MVPMatrix;
@@ -407,7 +412,7 @@ void Q3DBars::drawZoomScene()
}
}
#endif
- if (barHeight > 0) {
+ if (barHeight != 0) {
// Set shader bindings
d_ptr->m_barShader->setUniformValue(d_ptr->m_barShader->lightP(), lightPos);
d_ptr->m_barShader->setUniformValue(d_ptr->m_barShader->view(), viewMatrix);
@@ -447,6 +452,7 @@ void Q3DBars::drawZoomScene()
d_ptr->m_labelShader->bind();
glDisable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);
+ glCullFace(GL_BACK);
if (d_ptr->m_labelTransparency > TransparencyNone) {
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
@@ -612,6 +618,11 @@ void Q3DBars::drawScene()
GLfloat barHeight = item->d_ptr->value() / d_ptr->m_heightNormalizer;
+ if (barHeight < 0)
+ glCullFace(GL_FRONT);
+ else
+ glCullFace(GL_BACK);
+
QMatrix4x4 modelMatrix;
QMatrix4x4 MVPMatrix;
@@ -619,13 +630,15 @@ void Q3DBars::drawScene()
rowPos = (row + 1) * (d_ptr->m_barSpacing.y());
modelMatrix.translate((d_ptr->m_rowWidth - barPos) / d_ptr->m_scaleFactorX,
- barHeight - 1.0f,
+ barHeight - 1.0f, // TODO: Doesn't work right with negative values; calculate a variable based on bar heights instead of using -1.0f
(d_ptr->m_columnDepth - rowPos) / d_ptr->m_scaleFactorZ
+ zComp);
modelMatrix.scale(QVector3D(d_ptr->m_scaleX, barHeight, d_ptr->m_scaleZ));
MVPMatrix = projectionMatrix * viewMatrix * modelMatrix;
+ // TODO: Save position to qdataitem, so that we don't need to calculate it each time?
+
// add +2 to avoid black
QVector3D barColor = QVector3D((GLfloat)(row + 2)
/ (GLfloat)(d_ptr->m_sampleCount.y() + 2),
@@ -716,61 +729,6 @@ void Q3DBars::drawScene()
#endif
}
- // Bind background shader
- d_ptr->m_backgroundShader->bind();
-
- // TODO: If we want to use background texture, we should create it in initBackground instead of here and keep the texture id in d_ptr
- // Create texture
- //glEnable(GL_TEXTURE_2D);
- //GLuint bgrTexture = d_ptr->m_textureHelper->create2DTexture(
- // QImage(QStringLiteral(":/textures/cubetex")), true);
-
- // Draw background
- if (d_ptr->m_backgroundObj) {
- QMatrix4x4 modelMatrix;
- QMatrix4x4 MVPMatrix;
- if (zComp != 0)
- modelMatrix.translate(0.0f, 0.0f, zComp);
- modelMatrix.scale(QVector3D(d_ptr->m_rowWidth * d_ptr->m_sceneScale,
- 1.0f,
- d_ptr->m_columnDepth * d_ptr->m_sceneScale));
- modelMatrix.rotate(backgroundRotation, 0.0f, 1.0f, 0.0f);
-
- MVPMatrix = projectionMatrix * viewMatrix * modelMatrix;
-
- QVector3D backgroundColor = Utils::vectorFromColor(d_ptr->m_theme->m_backgroundColor);
-
- // Set shader bindings
- d_ptr->m_backgroundShader->setUniformValue(d_ptr->m_backgroundShader->lightP(),
- lightPos);
- d_ptr->m_backgroundShader->setUniformValue(d_ptr->m_backgroundShader->view(),
- viewMatrix);
- d_ptr->m_backgroundShader->setUniformValue(d_ptr->m_backgroundShader->model(),
- modelMatrix);
- d_ptr->m_backgroundShader->setUniformValue(d_ptr->m_backgroundShader->nModel(),
- modelMatrix.inverted().transposed());
- d_ptr->m_backgroundShader->setUniformValue(d_ptr->m_backgroundShader->MVP(),
- MVPMatrix);
- d_ptr->m_backgroundShader->setUniformValue(d_ptr->m_backgroundShader->color(),
- backgroundColor);
- d_ptr->m_backgroundShader->setUniformValue(d_ptr->m_backgroundShader->lightS(),
- d_ptr->m_theme->m_lightStrength);
- d_ptr->m_backgroundShader->setUniformValue(d_ptr->m_backgroundShader->ambientS(),
- d_ptr->m_theme->m_ambientStrength);
-
- // Draw the object
- d_ptr->m_drawer->drawObject(d_ptr->m_backgroundShader, d_ptr->m_backgroundObj);
- //d_ptr->m_drawer->drawObject(d_ptr->m_backgroundShader, d_ptr->m_backgroundObj, true, bgrTexture);
- }
-
- // Disable textures
- //glBindTexture(GL_TEXTURE_2D, 0);
- //glDeleteTextures(1, &bgrTexture); // TODO: If we want to use background texture, we should create it in initBackground and delete on exit
- //glDisable(GL_TEXTURE_2D);
-
- // Release background shader
- d_ptr->m_backgroundShader->release();
-
// Bind bar shader
d_ptr->m_barShader->bind();
@@ -788,13 +746,18 @@ void Q3DBars::drawScene()
GLfloat barHeight = item->d_ptr->value() / d_ptr->m_heightNormalizer;
+ if (barHeight < 0)
+ glCullFace(GL_FRONT);
+ else
+ glCullFace(GL_BACK);
+
QMatrix4x4 modelMatrix;
QMatrix4x4 MVPMatrix;
// TODO: Laske rivi- ja sarakelabelien paikat (sijainnit: min-1 ja max+1) ja pistä johonki talteen?
barPos = (bar + 1) * (d_ptr->m_barSpacing.x());
rowPos = (row + 1) * (d_ptr->m_barSpacing.y());
modelMatrix.translate((d_ptr->m_rowWidth - barPos) / d_ptr->m_scaleFactorX,
- barHeight - 1.0f,
+ barHeight - 1.0f, // TODO: Doesn't work right with negative values; calculate a variable based on bar heights instead of using -1.0f
(d_ptr->m_columnDepth - rowPos) / d_ptr->m_scaleFactorZ + zComp);
modelMatrix.scale(QVector3D(d_ptr->m_scaleX, barHeight, d_ptr->m_scaleZ));
@@ -890,7 +853,7 @@ void Q3DBars::drawScene()
}
}
- if (barHeight > 0) {
+ if (barHeight != 0) {
// Set shader bindings
d_ptr->m_barShader->setUniformValue(d_ptr->m_barShader->lightP(), lightPos);
d_ptr->m_barShader->setUniformValue(d_ptr->m_barShader->view(), viewMatrix);
@@ -908,6 +871,68 @@ void Q3DBars::drawScene()
}
}
}
+
+ // Release bar shader
+ d_ptr->m_barShader->release();
+
+ // Bind background shader
+ d_ptr->m_backgroundShader->bind();
+
+ // TODO: If we want to use background texture, we should create it in initBackground instead of here and keep the texture id in d_ptr
+ // Create texture
+ //glEnable(GL_TEXTURE_2D);
+ //GLuint bgrTexture = d_ptr->m_textureHelper->create2DTexture(
+ // QImage(QStringLiteral(":/textures/cubetex")), true);
+
+ glCullFace(GL_BACK);
+
+ // Draw background
+ if (d_ptr->m_backgroundObj) {
+ QMatrix4x4 modelMatrix;
+ QMatrix4x4 MVPMatrix;
+ if (zComp != 0)
+ modelMatrix.translate(0.0f, 0.0f, zComp);
+ modelMatrix.scale(QVector3D(d_ptr->m_rowWidth * d_ptr->m_sceneScale,
+ 1.0f,
+ d_ptr->m_columnDepth * d_ptr->m_sceneScale));
+ modelMatrix.rotate(backgroundRotation, 0.0f, 1.0f, 0.0f);
+
+ MVPMatrix = projectionMatrix * viewMatrix * modelMatrix;
+
+ QVector3D backgroundColor = Utils::vectorFromColor(d_ptr->m_theme->m_backgroundColor);
+
+ // Set shader bindings
+ d_ptr->m_backgroundShader->setUniformValue(d_ptr->m_backgroundShader->lightP(),
+ lightPos);
+ d_ptr->m_backgroundShader->setUniformValue(d_ptr->m_backgroundShader->view(),
+ viewMatrix);
+ d_ptr->m_backgroundShader->setUniformValue(d_ptr->m_backgroundShader->model(),
+ modelMatrix);
+ d_ptr->m_backgroundShader->setUniformValue(d_ptr->m_backgroundShader->nModel(),
+ modelMatrix.inverted().transposed());
+ d_ptr->m_backgroundShader->setUniformValue(d_ptr->m_backgroundShader->MVP(),
+ MVPMatrix);
+ d_ptr->m_backgroundShader->setUniformValue(d_ptr->m_backgroundShader->color(),
+ backgroundColor);
+ d_ptr->m_backgroundShader->setUniformValue(d_ptr->m_backgroundShader->lightS(),
+ d_ptr->m_theme->m_lightStrength);
+ d_ptr->m_backgroundShader->setUniformValue(d_ptr->m_backgroundShader->ambientS(),
+ d_ptr->m_theme->m_ambientStrength);
+
+ // Draw the object
+ d_ptr->m_drawer->drawObject(d_ptr->m_backgroundShader, d_ptr->m_backgroundObj);
+ //d_ptr->m_drawer->drawObject(d_ptr->m_backgroundShader, d_ptr->m_backgroundObj, true, bgrTexture);
+ }
+
+ // Disable textures
+ //glBindTexture(GL_TEXTURE_2D, 0);
+ //glDeleteTextures(1, &bgrTexture); // TODO: If we want to use background texture, we should create it in initBackground and delete on exit
+ //glDisable(GL_TEXTURE_2D);
+
+ // Release background shader
+ d_ptr->m_backgroundShader->release();
+
+ // Handle zoom activation and label drawing
if (!barSelectionFound) {
// We have no ownership, don't delete. Just NULL the pointer.
d_ptr->m_selectedBar = NULL;
@@ -982,9 +1007,6 @@ void Q3DBars::drawScene()
d_ptr->m_labelShader->release();
#endif
}
-
- // Release bar shader
- d_ptr->m_barShader->release();
}
void Q3DBars::drawLabel(const QDataItem &item, const LabelItem &label,
diff --git a/src/datavis3d/engine/q3dwindow.h b/src/datavis3d/engine/q3dwindow.h
index 18d2e69b..10a9414b 100644
--- a/src/datavis3d/engine/q3dwindow.h
+++ b/src/datavis3d/engine/q3dwindow.h
@@ -54,7 +54,7 @@ QTCOMMERCIALDATAVIS3D_BEGIN_NAMESPACE
class Q3DWindowPrivate;
-class Q3DWindow : public QWindow, protected QOpenGLFunctions
+class QTCOMMERCIALDATAVIS3D_EXPORT Q3DWindow : public QWindow, protected QOpenGLFunctions
{
Q_OBJECT
public:
@@ -74,7 +74,6 @@ public slots:
protected:
bool event(QEvent *event);
-
void exposeEvent(QExposeEvent *event);
// void resizeEvent(QResizeEvent *event);