summaryrefslogtreecommitdiffstats
path: root/src/datavis3d/engine
diff options
context:
space:
mode:
authorTomi Korpipää <tomi.korpipaa@digia.com>2013-04-11 10:20:33 +0300
committerTomi Korpipää <tomi.korpipaa@digia.com>2013-04-11 10:21:00 +0300
commit645e55729f5b1eb40699b426e0828e2fc448b5a4 (patch)
tree6345da16485609ff01f71f24293fd519c5528cde /src/datavis3d/engine
parent268f96670c05719d14775aeb3c80b58b9421c990 (diff)
Texture stuff added (lots of test hacks still included, to be removed)
Change-Id: Ib6a68df778970a3339ed16cd579f0bd9fa411e0b Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Diffstat (limited to 'src/datavis3d/engine')
-rw-r--r--src/datavis3d/engine/engine.qrc3
-rw-r--r--src/datavis3d/engine/q3dbars.cpp36
-rw-r--r--src/datavis3d/engine/shaders/fragmentShaderTexture39
-rw-r--r--src/datavis3d/engine/textures/cube.pngbin0 -> 30341 bytes
4 files changed, 46 insertions, 32 deletions
diff --git a/src/datavis3d/engine/engine.qrc b/src/datavis3d/engine/engine.qrc
index 8e781f05..6803d1b7 100644
--- a/src/datavis3d/engine/engine.qrc
+++ b/src/datavis3d/engine/engine.qrc
@@ -22,4 +22,7 @@
<file alias="fragmentTexture">shaders/fragmentShaderTexture</file>
<file alias="vertexTexture">shaders/vertexShaderTexture</file>
</qresource>
+ <qresource prefix="/textures">
+ <file alias="cubetex">textures/cube.png</file>
+ </qresource>
</RCC>
diff --git a/src/datavis3d/engine/q3dbars.cpp b/src/datavis3d/engine/q3dbars.cpp
index 5965cc37..9a72bd1a 100644
--- a/src/datavis3d/engine/q3dbars.cpp
+++ b/src/datavis3d/engine/q3dbars.cpp
@@ -47,6 +47,7 @@
#include "qdataset_p.h"
#include "shaderhelper_p.h"
#include "objecthelper_p.h"
+#include "texturehelper_p.h"
#include "utils_p.h"
#include <QMatrix4x4>
@@ -85,8 +86,11 @@ void Q3DBars::initialize()
d_ptr->initShaders(QStringLiteral(":/shaders/vertex")
, QStringLiteral(":/shaders/fragment"));
}
- d_ptr->initBackgroundShaders(QStringLiteral(":/shaders/vertex")
- , QStringLiteral(":/shaders/fragment"));
+ // TODO: Texture test
+ d_ptr->initBackgroundShaders(QStringLiteral(":/shaders/vertexTexture")
+ , QStringLiteral(":/shaders/fragmentTexture"));
+// d_ptr->initBackgroundShaders(QStringLiteral(":/shaders/vertexTexture")
+// , QStringLiteral(":/shaders/fragmentTexture"));
d_ptr->initSelectionShader();
#ifndef USE_HAX0R_SELECTION
@@ -623,11 +627,9 @@ void Q3DBars::drawScene()
// Bind background shader
d_ptr->m_backgroundShader->bind();
- // Texture test
- //glEnable(GL_TEXTURE_2D);
- //GLuint bgrTexture = QGLContext::bindTexture(QImage(":/cube.png"));
- //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ // TODO: Texture test
+ glEnable(GL_TEXTURE_2D);
+ GLuint bgrTexture = TextureHelper::create2DTexture(QImage(QStringLiteral(":/textures/cubetex")));
// Draw background
if (d_ptr->m_backgroundObj) {
@@ -660,11 +662,11 @@ void Q3DBars::drawScene()
, d_ptr->m_lightStrength);
d_ptr->m_backgroundShader->setUniformValue(d_ptr->m_backgroundShader->ambientS()
, d_ptr->m_ambientStrength);
-
- // Bind the texture in texture unit 0
-// glActiveTexture(GL_TEXTURE0);
-// glBindTexture(GL_TEXTURE_2D, bgrTexture);
-// glUniform1i(d_ptr->m_backgroundShader->texture(), 0);
+ // TODO: Texture test
+ glActiveTexture(GL_TEXTURE0);
+ glBindTexture(GL_TEXTURE_2D, bgrTexture);
+ d_ptr->m_backgroundShader->setUniformValue(d_ptr->m_backgroundShader->texture()
+ , 0);
// 1st attribute buffer : vertices
glEnableVertexAttribArray(d_ptr->m_backgroundShader->posAtt());
@@ -678,6 +680,7 @@ void Q3DBars::drawScene()
glVertexAttribPointer(d_ptr->m_backgroundShader->normalAtt()
, 3, GL_FLOAT, GL_FALSE, 0, (void*)0);
+ // TODO: Texture test
// 3rd attribute buffer : UVs
glEnableVertexAttribArray(d_ptr->m_backgroundShader->uvAtt());
glBindBuffer(GL_ARRAY_BUFFER, d_ptr->m_backgroundObj->uvBuf());
@@ -695,11 +698,18 @@ void Q3DBars::drawScene()
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
- //glDisableVertexAttribArray(d_ptr->m_backgroundShader->uvAtt());
+ // TODO: Texture test
+ glDisableVertexAttribArray(d_ptr->m_backgroundShader->uvAtt());
+
glDisableVertexAttribArray(d_ptr->m_backgroundShader->normalAtt());
glDisableVertexAttribArray(d_ptr->m_backgroundShader->posAtt());
}
+ // TODO: Texture test
+ glBindTexture(GL_TEXTURE_2D, 0);
+ glDeleteTextures(1, &bgrTexture);
+ glDisable(GL_TEXTURE_2D);
+
// Release background shader
d_ptr->m_backgroundShader->release();
diff --git a/src/datavis3d/engine/shaders/fragmentShaderTexture b/src/datavis3d/engine/shaders/fragmentShaderTexture
index f1b11908..9f2692f2 100644
--- a/src/datavis3d/engine/shaders/fragmentShaderTexture
+++ b/src/datavis3d/engine/shaders/fragmentShaderTexture
@@ -10,24 +10,25 @@ uniform highp float lightStrength;
uniform highp float ambientStrength;
uniform sampler2D textureSampler;
void main() {
- highp vec3 materialDiffuseColor = texture2D(textureSampler, UV);
- highp vec3 materialAmbientColor = vec3(ambientStrength, ambientStrength, ambientStrength) * 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 = 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 = 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 +
- materialDiffuseColor * lightStrength * (cosTheta * cosTheta) / distance +
- materialSpecularColor * lightStrength * (cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha) / distance;//(distance * distance);
- gl_FragColor.a = 1.0;
+ //highp vec3 materialDiffuseColor = texture2D(textureSampler, UV).rgb;
+ //highp vec3 materialAmbientColor = vec3(ambientStrength, ambientStrength, ambientStrength) * 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 = 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 = 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 +
+ // materialDiffuseColor * lightStrength * (cosTheta * cosTheta) / distance +
+ // materialSpecularColor * lightStrength * (cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha) / distance;//(distance * distance);
+ //gl_FragColor.a = 1.0;
+ gl_FragColor = texture2D(textureSampler, UV);
}
diff --git a/src/datavis3d/engine/textures/cube.png b/src/datavis3d/engine/textures/cube.png
new file mode 100644
index 00000000..42c8c51b
--- /dev/null
+++ b/src/datavis3d/engine/textures/cube.png
Binary files differ