summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/datavis3d/barchart/main.cpp8
-rw-r--r--src/datavis3d/engine/q3dbars.cpp22
-rw-r--r--src/datavis3d/engine/shaders/fragmentShader4
-rw-r--r--src/datavis3d/engine/shaders/fragmentShaderColorOnY6
-rw-r--r--src/datavis3d/utils/camerahelper.cpp4
5 files changed, 26 insertions, 18 deletions
diff --git a/examples/datavis3d/barchart/main.cpp b/examples/datavis3d/barchart/main.cpp
index dba2d197..b3615dd7 100644
--- a/examples/datavis3d/barchart/main.cpp
+++ b/examples/datavis3d/barchart/main.cpp
@@ -81,9 +81,11 @@ ChartDataGenerator::ChartDataGenerator(Q3DBars *barchart)
// Set up sample space; make it twice as deep as it's wide
m_chart->setupSampleSpace(QPoint(m_columnCount, m_rowCount));
// Set bar type to smooth bar
- //m_chart->setBarType(Q3DBars::Bars, true);
+#ifndef CYCLE_THROUGH_STYLES
+ m_chart->setBarType(Q3DBars::Bars, true);
+#endif
// Set bar colors
- m_chart->setBarColor(QColor(Qt::black), QColor(Qt::green), QColor(Qt::black), false);
+ m_chart->setBarColor(QColor(Qt::black), QColor(Qt::red), QColor(Qt::darkBlue));//, false);
}
ChartDataGenerator::~ChartDataGenerator()
@@ -126,7 +128,7 @@ void ChartDataGenerator::addDataSet()
QVector<float> row;
for (int j = 0; j < m_rowCount; j++) {
for (int i = 0; i < m_columnCount; i++) {
- row.append(((float)i / (float)m_columnCount) / 2.0f + (float)(rand() % 30) / 100);
+ row.append(((float)i / (float)m_columnCount) / 1.5f + (float)(rand() % 30) / 100);
//row.append(1.0f);
}
data.append(row);
diff --git a/src/datavis3d/engine/q3dbars.cpp b/src/datavis3d/engine/q3dbars.cpp
index 63d5b9e5..45c7f86b 100644
--- a/src/datavis3d/engine/q3dbars.cpp
+++ b/src/datavis3d/engine/q3dbars.cpp
@@ -57,7 +57,7 @@ QTCOMMERCIALDATAVIS3D_BEGIN_NAMESPACE
#define USE_HAX0R_SELECTION // keep this defined until the "real" method works
-float zComp = 0.0f; // TODO: if can't fix shader, use this to move all stuff to positive z (causes problems with view matrix..)
+const float zComp = 3.0f; // Compensation for z position; move all objects to positive z, as shader can't handle negative values correctly
Q3DBars::Q3DBars()
: d_ptr(new Q3DBarsPrivate(this))
@@ -120,8 +120,8 @@ void Q3DBars::initialize()
// Set initial camera position
// X must be 0 for rotation to work - we can use "setCameraRotation" for setting it later
- CameraHelper::setDefaultCameraOrientation(QVector3D(0.0f, 0.0f, 6.0f)
- , QVector3D(0.0f, 0.0f, 0.0f)
+ CameraHelper::setDefaultCameraOrientation(QVector3D(0.0f, 0.0f, 6.0f + zComp)
+ , QVector3D(0.0f, 0.0f, zComp)
, QVector3D(0.0f, 1.0f, 0.0f));
CameraHelper::setCameraRotation(QPointF(d_ptr->m_horizontalRotation
@@ -197,9 +197,11 @@ void Q3DBars::render()
else if (viewMatrix.row(0).x() < 0 && viewMatrix.row(0).z() < 0) {
backgroundRotation = 0.0f;
}
- //qDebug() << "projectionMatrix" << projectionMatrix;
- //QVector3D lightPos = QVector3D(0.0f, 2.0f, zComp); // above the center of bar chart // TODO: test to keep all z's positive
- QVector3D lightPos = QVector3D(0.0f, 1.5f, (d_ptr->m_sampleCount.y() / 2.0f));
+
+ // TODO: Rotate light with camera (position light a bit above camera)
+ //QVector3D lightPos = QVector3D(0.0f, 2.0f, zComp); // above the center of bar chart
+ QVector3D lightPos = QVector3D(0.5f, 3.0f, zComp * 2.5f);
+// QVector3D lightPos = QVector3D(0.0f, 1.5f, (d_ptr->m_sampleCount.y() / 2.0f));
// QVector3D lightPos = QVector3D(0.0f, 2.0f, (float)qSqrt((float)d_ptr->m_sampleCount.y()/3.0f));
// QVector3D lightPos = viewMatrix.row(0).toVector3D();
// lightPos.setY(lightPos.y() + 3.0f);
@@ -219,7 +221,7 @@ void Q3DBars::render()
rowPos = (row + 1) * (d_ptr->m_barSpacing.y());
modelMatrix.translate((d_ptr->m_rowWidth - barPos) / d_ptr->m_scaleFactorX
, barHeight - 1.0f
- , (d_ptr->m_columnDepth - rowPos) / d_ptr->m_scaleFactorZ + zComp); // TODO: test to keep all z's positive
+ , (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;
@@ -322,7 +324,7 @@ void Q3DBars::render()
QMatrix4x4 modelMatrix;
QMatrix4x4 MVPMatrix;
if (zComp != 0)
- modelMatrix.translate(0.0f, 0.0f, zComp); // TODO: test to keep all z's positive
+ 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));
@@ -393,7 +395,7 @@ void Q3DBars::render()
//qDebug() << "z" << rowPos << "-" << d_ptr->m_columnDepth << "=" << rowPos - d_ptr->m_columnDepth;
modelMatrix.translate((d_ptr->m_rowWidth - barPos) / d_ptr->m_scaleFactorX
, barHeight - 1.0f
- , (d_ptr->m_columnDepth - rowPos) / d_ptr->m_scaleFactorZ + zComp); // TODO: test to keep all z's positive
+ , (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;
@@ -424,7 +426,7 @@ void Q3DBars::render()
barColor = QVector3D(1.0f, 1.0f, 1.0f) - barColor;
lightStrength = 10.0f;
if (d_ptr->m_mousePressed) {
- qDebug() << "selected object:" << barIndex << "(row:" << row + 1 << ", column:" << bar + 1;
+ qDebug() << "selected object:" << barIndex << "( row:" << row + 1 << ", column:" << bar + 1 << ")";
qDebug() << barIndex << "object position:" << modelMatrix.column(3).toVector3D();
qDebug() << "light position:" << lightPos;
}
diff --git a/src/datavis3d/engine/shaders/fragmentShader b/src/datavis3d/engine/shaders/fragmentShader
index ad78c75a..01e57fb9 100644
--- a/src/datavis3d/engine/shaders/fragmentShader
+++ b/src/datavis3d/engine/shaders/fragmentShader
@@ -14,12 +14,12 @@ void main() {
highp vec3 n = normalize(normal_cmr);
highp vec3 l = normalize(lightDirection_cmr);
highp float cosTheta = dot(n, l);
- if (cosTheta < 0.0) { cosTheta = -cosTheta; } //0.0; }
+ if (cosTheta < 0.0) { cosTheta = 0.0; }
if (cosTheta > 1.0) { cosTheta = 1.0; }
highp vec3 E = normalize(eyeDirection_cmr);
highp vec3 R = reflect(-l, n);
highp float cosAlpha = dot(E, R);
- if (cosAlpha < 0.0) { cosAlpha = -cosAlpha; } //0.0; }
+ if (cosAlpha < 0.0) { cosAlpha = 0.0; }
if (cosAlpha > 1.0) { cosAlpha = 1.0; }
gl_FragColor.rgb = //color_mdl + color_mdl * vec3(cosTheta * cosTheta) / (distance * distance) + vec3(cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha) / (distance * distance);
materialAmbientColor +
diff --git a/src/datavis3d/engine/shaders/fragmentShaderColorOnY b/src/datavis3d/engine/shaders/fragmentShaderColorOnY
index e2b336e1..a2e2e221 100644
--- a/src/datavis3d/engine/shaders/fragmentShaderColorOnY
+++ b/src/datavis3d/engine/shaders/fragmentShaderColorOnY
@@ -8,18 +8,18 @@ uniform highp vec3 color_mdl;
uniform highp float lightStrength;
void main() {
highp vec3 materialDiffuseColor = vec3(coords_mdl.y * color_mdl.x, coords_mdl.y * color_mdl.y, coords_mdl.y * color_mdl.z);
- highp vec3 materialAmbientColor = vec3(0.2, 0.2, 0.2) * color_mdl;//materialDiffuseColor;
+ highp vec3 materialAmbientColor = vec3(0.2, 0.2, 0.2) * materialDiffuseColor;
highp vec3 materialSpecularColor = vec3(1.0, 1.0, 1.0);
highp float distance = length(lightPosition_wrld - position_wrld);
highp vec3 n = normalize(normal_cmr);
highp vec3 l = normalize(lightDirection_cmr);
highp float cosTheta = dot(n, l);
- if (cosTheta < 0.0) { cosTheta = -cosTheta; }//0.0; } // this seems to be the problem when z position is negative
+ if (cosTheta < 0.0) { cosTheta = 0.0; }
if (cosTheta > 1.0) { cosTheta = 1.0; }
highp vec3 E = normalize(eyeDirection_cmr);
highp vec3 R = reflect(-l, n);
highp float cosAlpha = dot(E, R);
- if (cosAlpha < 0.0) { cosAlpha = -cosAlpha; }//0.0; } // this seems to be the problem when z position is negative
+ if (cosAlpha < 0.0) { cosAlpha = 0.0; }
if (cosAlpha > 1.0) { cosAlpha = 1.0; }
gl_FragColor.rgb = //color_mdl + color_mdl * vec3(cosTheta * cosTheta) / (distance * distance) + vec3(cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha) / (distance * distance);
materialAmbientColor +
diff --git a/src/datavis3d/utils/camerahelper.cpp b/src/datavis3d/utils/camerahelper.cpp
index ca32bffa..4e0a5409 100644
--- a/src/datavis3d/utils/camerahelper.cpp
+++ b/src/datavis3d/utils/camerahelper.cpp
@@ -73,11 +73,15 @@ QMatrix4x4 CameraHelper::calculateViewMatrix(QPoint mousePos, int zoom
, m_target // and looks here
, m_up // Head is up (set to 0,-1,0 to look upside-down)
);
+ // Compensate for translation (if m_target is off origin)
+ viewMatrix.translate(m_target.x(), m_target.y(), m_target.z());
// Apply rotations
// Handle x and z rotation when y -angle is other than 0
viewMatrix.rotate(m_xRotation, 0, cos(m_yRotation*m_pi/180), sin(m_yRotation*m_pi/180));
// y rotation is always "clean"
viewMatrix.rotate(m_yRotation, 1.0f, 0, 0);
+ // Compensate for translation (if m_target is off origin)
+ viewMatrix.translate(-m_target.x(), -m_target.y(), -m_target.z());
// handle zoom by scaling
viewMatrix.scale((float)zoom / 100.0f);
//qDebug() << m_xRotation << m_yRotation;