diff options
-rw-r--r-- | examples/datavis3d/barchart/main.cpp | 8 | ||||
-rw-r--r-- | src/datavis3d/engine/q3dbars.cpp | 22 | ||||
-rw-r--r-- | src/datavis3d/engine/shaders/fragmentShader | 4 | ||||
-rw-r--r-- | src/datavis3d/engine/shaders/fragmentShaderColorOnY | 6 | ||||
-rw-r--r-- | src/datavis3d/utils/camerahelper.cpp | 4 |
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; |