diff --git a/shaders/surface.frag b/shaders/surface.frag index dfb45f62aa7fb0e932b3220a4ba098064dcdc607..18f3dfa2131de80ac0ef82a7bef8ae6bfd9a0e21 100644 --- a/shaders/surface.frag +++ b/shaders/surface.frag @@ -31,7 +31,7 @@ void main(void) vec3 nnormal = normalize(normal); vec3 reflected = reflect(view, nnormal); float R = fresnel(nnormal, view); - vec3 water_color = vec3(0, 0.3, 0.5); + vec3 water_color = vec3(0, 0.05, 0.1); vec3 sky_color = texture(sky, sphere_uv(reflected)).rgb; diff --git a/shaders/surface.vert b/shaders/surface.vert index 571f4bdbe7a1b7f3b62eb8d4d6217ea2fe59e967..4e09f949d6a6875c23f955805f2ba96ec2c916cb 100644 --- a/shaders/surface.vert +++ b/shaders/surface.vert @@ -6,14 +6,17 @@ in vec2 in_TexCoord; uniform mat4 projectionMatrix; uniform mat4 modelToWorldToView; +uniform float time; out vec3 world_pos; out vec3 normal; void main(void) { - world_pos = in_Position; - normal = in_Normal; - gl_Position = projectionMatrix * modelToWorldToView * vec4(in_Position, 1.0); + vec3 offset_pos = vec3(in_Position.x, in_Position.y + 0.05 * sin(10.0 * in_Position.x + time), in_Position.z); + world_pos = offset_pos; + normal = normalize(vec3(-0.05 * cos(10.0 * in_Position.x + time), 1.0, 0.0)); + + gl_Position = projectionMatrix * modelToWorldToView * vec4(offset_pos, 1.0); } diff --git a/src/main.cpp b/src/main.cpp index 38eb4611cb4d8c5a5c4c1ef19299333747971111..83b853fc4ea4a439caee896a1a0112a32bb84b6d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -74,7 +74,7 @@ struct Scene { vec3 fwd = vec3(sin(yaw), 0, -cos(yaw)); vec3 right = vec3(cos(yaw), 0, sin(yaw)); vec3 up = vec3(0, 1, 0); - float speed = 0.3; + float speed = 0.15; if (glutKeyIsDown('w')) { pos += speed * fwd; @@ -127,10 +127,14 @@ struct Scene { { surface.use(); GLuint program = surface.program; + int elapsed_millis = glutGet(GLUT_ELAPSED_TIME); + float time = elapsed_millis * 0.001f; + glUniformMatrix4fv(glGetUniformLocation(program, "projectionMatrix"), 1, GL_TRUE, proj_matrix.m); glUniformMatrix4fv(glGetUniformLocation(program, "modelToWorldToView"), 1, GL_TRUE, view_matrix.m); glUniform1i(glGetUniformLocation(program, "sky"), 0); glUniform3f(glGetUniformLocation(program, "camera_pos"), pos.x, pos.y, pos.z); + glUniform1f(glGetUniformLocation(program, "time"), time); surface.draw(); } @@ -206,7 +210,7 @@ void display(void) void on_mouse_move(int x, int y) { - const float sensitivity = 0.005f; + const float sensitivity = 0.0025f; if (mouse_y == -1 && mouse_x == -1) { mouse_x = x; mouse_y = y; @@ -219,7 +223,7 @@ void on_mouse_move(int x, int y) mouse_x = x; mouse_y = y; - scene.pitch -= dy * sensitivity; + scene.pitch += dy * sensitivity; scene.yaw += dx * sensitivity; scene.pitch = std::max(-1.5f, std::min(1.5f, scene.pitch));