Fixed problem with normals

This commit is contained in:
selim mustafaev 2018-04-16 04:04:04 +03:00
parent 3aba1f0648
commit 4487c9ac04
4 changed files with 11 additions and 23 deletions

View File

@ -40,7 +40,7 @@ vec3 hsv_to_rgb(float h, float s, float v)
void main () { void main () {
vec3 materialColor = hsv_to_rgb(zPos, 1, 1); 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; vec3 color = materialColor*diffuse;
frag_colour = vec4(color, 1.0); frag_colour = vec4(color, 1.0);

View File

@ -12,7 +12,7 @@ out float zPos;
out vec3 norm; out vec3 norm;
void main () { void main () {
norm = -normalize(vec3(mProjection*mView*mWorld*vec4(normal, 0))); norm = vec3(mProjection*mView*mWorld*vec4(normal, 0));
zPos = position.z; zPos = position.z;
gl_Position = mProjection*mView*mWorld*vec4(position, 1.0); gl_Position = mProjection*mView*mWorld*vec4(position, 1.0);
} }

View File

@ -51,27 +51,20 @@ void Mesh::updateVertices() const {
float x = _xs[i], x2 = _xs[i + 1]; float x = _xs[i], x2 = _xs[i + 1];
float y = _ys[j], y2 = _ys[j + 1]; float y = _ys[j], y2 = _ys[j + 1];
glm::vec3 p1(x, y, _vertices[j*(_size - 1) + i].z); glm::vec3 p1(x, y, _vertices[j*_size + i + 1].z);
glm::vec3 p2(x2, y, _vertices[j*(_size - 1) + i + 1].z); glm::vec3 p2(x2, y, _vertices[j*_size + i + 2].z);
glm::vec3 p3(x, y2, _vertices[(j + 1)*(_size - 1) + i].z); glm::vec3 p3(x, y2, _vertices[(j + 1)*_size + i + 1].z);
glm::vec3 p4(x2, y2, _vertices[(j + 1)*(_size - 1) + i + 1].z); glm::vec3 p4(x2, y2, _vertices[(j + 1)*_size + i + 2].z);
glm::vec3 v1 = p1 - p3; glm::vec3 v1 = p3 - p1;
glm::vec3 v2 = p2 - p3; glm::vec3 v2 = p4 - p1;
glm::vec3 v3 = p4 - p3; glm::vec3 v3 = p2 - p1;
glm::vec3 norm1 = glm::cross(v2, v1); glm::vec3 norm1 = glm::cross(v2, v1);
glm::vec3 norm2 = glm::cross(v3, v2); glm::vec3 norm2 = glm::cross(v3, v2);
_normals.emplace_back(norm1); _normals.emplace_back(norm1);
_normals.emplace_back(norm2); _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; size_t idx = j*_size + i;
_vertices[idx].nx = normal.x; _vertices[idx].nx = normal.x;
_vertices[idx].ny = normal.y; _vertices[idx].ny = normal.y;

View File

@ -4,9 +4,10 @@ float WaveMesh::heightMap(std::size_t nx, std::size_t ny) const {
float x = _xs[nx]; float x = _xs[nx];
float y = _xs[ny]; float y = _xs[ny];
float d = 50*sqrtf(x*x + y*y); 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 WaveMesh::heightMap(float fx, float fy) const {
float d = 50*sqrtf(fx*fx + fy*fy); float d = 50*sqrtf(fx*fx + fy*fy);
return cosf(d - _shift)*expf(-d/10.0f)/2; return cosf(d - _shift)*expf(-d/10.0f)/2;