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 4da65e0ce0bb59ac05849274ece29c82d11a8620..bde29a4e97e908e2029e917ad77b24f572d2cb87 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -88,14 +88,18 @@ struct Scene { void draw_surface() { - surface.use(); - GLuint program = surface.program; - 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); - - surface.draw(); + 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(); } @@ -198,13 +202,14 @@ void display(void) { glutSwapBuffers(); } -void on_mouse_move(int x, int y) { - const float sensitivity = 0.005f; +void on_mouse_move(int x, int y) +{ + const float sensitivity = 0.0025f; if (mouse_y == -1 && mouse_x == -1) { - mouse_x = x; - mouse_y = y; + mouse_x = x; + mouse_y = y; - return; + return; } int dx = x - mouse_x; @@ -212,9 +217,8 @@ 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)); }