From f45693f8fadf06b478289941d80b632b87c316c7 Mon Sep 17 00:00:00 2001 From: Axel Matstoms <axema990@student.liu.se> Date: Wed, 13 Nov 2024 13:28:26 +0100 Subject: [PATCH] Add sine wave waves * very sine * very wavy * very mindful * very demure --- shaders/surface.frag | 2 +- shaders/surface.vert | 9 ++++++--- src/main.cpp | 34 +++++++++++++++++++--------------- 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/shaders/surface.frag b/shaders/surface.frag index dfb45f6..18f3dfa 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 571f4bd..4e09f94 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 4da65e0..bde29a4 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)); } -- GitLab