Fixed problem with normals
This commit is contained in:
parent
3aba1f0648
commit
4487c9ac04
@ -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);
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user