From 4487c9ac0409a8d173f79065a024d2bbf0949cc1 Mon Sep 17 00:00:00 2001 From: selim mustafaev Date: Mon, 16 Apr 2018 04:04:04 +0300 Subject: [PATCH] Fixed problem with normals --- shaders/fragment.glsl | 2 +- shaders/vertex.glsl | 2 +- src/GLObjects/Mesh.cpp | 27 +++++++-------------------- src/GLObjects/WaveMesh.cpp | 3 ++- 4 files changed, 11 insertions(+), 23 deletions(-) diff --git a/shaders/fragment.glsl b/shaders/fragment.glsl index fc8c5e1..09793a1 100644 --- a/shaders/fragment.glsl +++ b/shaders/fragment.glsl @@ -40,7 +40,7 @@ vec3 hsv_to_rgb(float h, float s, float v) void main () { vec3 materialColor = hsv_to_rgb(zPos, 1, 1); - float diffuse = clamp(dot(norm, -normalize(vec3(1,1,1))), 0.0, 0.6); + float diffuse = clamp(dot(normalize(norm), -normalize(vec3(0,0,1))), 0, 0.6); vec3 color = materialColor*diffuse; frag_colour = vec4(color, 1.0); diff --git a/shaders/vertex.glsl b/shaders/vertex.glsl index eb023ca..e83ebf7 100644 --- a/shaders/vertex.glsl +++ b/shaders/vertex.glsl @@ -12,7 +12,7 @@ out float zPos; out vec3 norm; void main () { - norm = -normalize(vec3(mProjection*mView*mWorld*vec4(normal, 0))); + norm = vec3(mProjection*mView*mWorld*vec4(normal, 0)); zPos = position.z; gl_Position = mProjection*mView*mWorld*vec4(position, 1.0); } diff --git a/src/GLObjects/Mesh.cpp b/src/GLObjects/Mesh.cpp index 32e70bf..f8048d2 100644 --- a/src/GLObjects/Mesh.cpp +++ b/src/GLObjects/Mesh.cpp @@ -51,27 +51,20 @@ void Mesh::updateVertices() const { float x = _xs[i], x2 = _xs[i + 1]; float y = _ys[j], y2 = _ys[j + 1]; - glm::vec3 p1(x, y, _vertices[j*(_size - 1) + i].z); - glm::vec3 p2(x2, y, _vertices[j*(_size - 1) + i + 1].z); - glm::vec3 p3(x, y2, _vertices[(j + 1)*(_size - 1) + i].z); - glm::vec3 p4(x2, y2, _vertices[(j + 1)*(_size - 1) + i + 1].z); + glm::vec3 p1(x, y, _vertices[j*_size + i + 1].z); + glm::vec3 p2(x2, y, _vertices[j*_size + i + 2].z); + glm::vec3 p3(x, y2, _vertices[(j + 1)*_size + i + 1].z); + glm::vec3 p4(x2, y2, _vertices[(j + 1)*_size + i + 2].z); - glm::vec3 v1 = p1 - p3; - glm::vec3 v2 = p2 - p3; - glm::vec3 v3 = p4 - p3; + glm::vec3 v1 = p3 - p1; + glm::vec3 v2 = p4 - p1; + glm::vec3 v3 = p2 - p1; glm::vec3 norm1 = glm::cross(v2, v1); glm::vec3 norm2 = glm::cross(v3, v2); _normals.emplace_back(norm1); _normals.emplace_back(norm2); - -// std::cout << "normal: [" << norm1.x << ", " << norm1.y << ", " << norm1.z << "]" << std::endl; -// std::cout << "normal: [" << norm2.x << ", " << norm2.y << ", " << norm2.z << "]" << std::endl; -// -// if(norm1.z > 0 || norm2.z > 0) { -// std::cout << "j = " << j << ", i = " << i << std::endl; -// } } } @@ -96,12 +89,6 @@ void Mesh::updateVertices() const { } } -// if(normal.z == 0) { -// std::cout << "j = " << j << ", i = " << i << std::endl; -// } -// -// std::cout << "normal: [" << normal.x << ", " << normal.y << ", " << normal.z << "]" << std::endl; - size_t idx = j*_size + i; _vertices[idx].nx = normal.x; _vertices[idx].ny = normal.y; diff --git a/src/GLObjects/WaveMesh.cpp b/src/GLObjects/WaveMesh.cpp index 3b4e127..a33ca2f 100644 --- a/src/GLObjects/WaveMesh.cpp +++ b/src/GLObjects/WaveMesh.cpp @@ -4,9 +4,10 @@ float WaveMesh::heightMap(std::size_t nx, std::size_t ny) const { float x = _xs[nx]; float y = _xs[ny]; float d = 50*sqrtf(x*x + y*y); - return cosf(d - _shift)*expf(-d/10.0f)/2; + return cosf(d - _shift)*expf(-d/10.0f)/4; } +[[deprecated]] float WaveMesh::heightMap(float fx, float fy) const { float d = 50*sqrtf(fx*fx + fy*fy); return cosf(d - _shift)*expf(-d/10.0f)/2;