From c5d4d904634a52a7fb0aead7f0601eb850860f5c Mon Sep 17 00:00:00 2001 From: Anselme Date: Thu, 28 Apr 2016 16:17:17 +0200 Subject: [PATCH] bug fixes (normal mapping, directionnal lighting) --- shaders/forward.frag.glsl | 4 +-- shaders/forward.vert.glsl | 4 +-- src/forwardmodule.cpp | 2 +- src/light.cpp | 4 +-- src/mesh.cpp | 73 ++++++++++++++++----------------------- 5 files changed, 36 insertions(+), 51 deletions(-) diff --git a/shaders/forward.frag.glsl b/shaders/forward.frag.glsl index 571c570..3bfb81f 100644 --- a/shaders/forward.frag.glsl +++ b/shaders/forward.frag.glsl @@ -75,7 +75,7 @@ void main(void) { #endif #ifdef NORMAL_MAP - vec3 normal = normalize(texture(normalMap, varTexCoord).xyz * tangentSpace); + vec3 normal = normalize((texture(normalMap, varTexCoord).xyz*2 - 1) * tangentSpace); #else vec3 normal = normalize(varNormal); #endif @@ -112,7 +112,7 @@ void main(void) { #endif #ifdef AMBIENT_LIGHT - outColor = vec4(ambient+diffuse*0.1f, 1); + outColor = vec4(diffuse*0, 1); #else vec3 light = phongLighting(diffuse, specular, materialNs, lightColor, normal, lightDirInView, halfVecInView); outColor = vec4(light*shadow*(1+cos(1.57 + att*1.57)), 1); diff --git a/shaders/forward.vert.glsl b/shaders/forward.vert.glsl index aebb2de..38a409a 100644 --- a/shaders/forward.vert.glsl +++ b/shaders/forward.vert.glsl @@ -75,8 +75,8 @@ void main(void) { #ifdef NORMAL_MAP tangentSpace = transpose(mat3(normalize(normalMatrix*inTangent), - normalize(normalMatrix*inBinormal), - normalize(normalMatrix*inNormal))); + normalize(normalMatrix*inBinormal), + normalize(normalMatrix*inNormal))); #else varNormal = normalize(normalMatrix*inNormal); #endif diff --git a/src/forwardmodule.cpp b/src/forwardmodule.cpp index a1655c5..baad211 100644 --- a/src/forwardmodule.cpp +++ b/src/forwardmodule.cpp @@ -16,7 +16,7 @@ void ForwardModule::renderGL(Camera* myCamera, Scene* scene) { for(Light *light : p.lights) { - if(light->getFlags() & Light::AMBIENT_FLAG) + if(light->getFlags() & (1 << Light::AMBIENT_FLAG)) { // render ambient lighting (opaque) glEnable(GL_DEPTH_TEST); diff --git a/src/light.cpp b/src/light.cpp index 8c30571..50ff93f 100644 --- a/src/light.cpp +++ b/src/light.cpp @@ -117,11 +117,11 @@ void Light::generateShadowMap(Scene* scene) geometryIt->isValid(); geometryIt->next()) { GeometryNode* node = geometryIt->getItem(); - if(node->mesh->getFlags() & Mesh::MESH_SHADOWED) + if(node->mesh->getFlags() & (1 << Mesh::MESH_SHADOWED)) { // compute matrix attributes glm::mat4 lightMVP = getProjectionMatrix() * (getViewMatrix() * node->modelMatrix); - int hasAlpha = (node->mesh->getFlags() & Mesh::MATERIAL_ALPHA_MASK) > 0; + int hasAlpha = (node->mesh->getFlags() & (1 << Mesh::MATERIAL_ALPHA_MASK)) > 0; shaders[hasAlpha]->bind(); shaders[hasAlpha]->bindMat4(shaders[hasAlpha]->getLocation("MVP"), lightMVP); node->mesh->draw(shaders[hasAlpha], false, hasAlpha, false); diff --git a/src/mesh.cpp b/src/mesh.cpp index 720b17b..2c88be1 100644 --- a/src/mesh.cpp +++ b/src/mesh.cpp @@ -66,7 +66,7 @@ void Mesh::clearBuffers() void Mesh::initGL() { destroyGL(); - + // create VAO glGenVertexArrays(1, &vao); glBindVertexArray(vao); @@ -89,8 +89,8 @@ void Mesh::initGL() if(!tangents.empty()) { auto tangentsBuffer = new TBuffer(tangents, Buffer::VBO); - tangentsBuffer->setVertexAttrib(3, 3); - tangentsBuffer->setVertexAttrib(4, 3); + tangentsBuffer->setVertexAttrib(3, 3, 0); + tangentsBuffer->setVertexAttrib(4, 3, sizeof(glm::vec3)); addBuffer(tangentsBuffer, TANGENT_BUFFER); } } @@ -291,10 +291,7 @@ void Mesh::mergeVertices() if(deleted[indices[i]]) { if(!tangents.empty()) - { tangents[*(ret.first)].tangent += tangents[indices[i]].tangent; - tangents[*(ret.first)].binormal += tangents[indices[i]].binormal; - } indices[i] = *(ret.first); } } @@ -330,10 +327,16 @@ void Mesh::mergeVertices() normals.resize(normals.size()-offset); if(!tangents.empty()) tangents.resize(tangents.size()-offset); - for(Tangents &t : tangents) + for(int i=0; i