From 683cfb691231d62bd1c8eda64cb1e7a8083cc596 Mon Sep 17 00:00:00 2001 From: RealBadAngel Date: Sun, 3 Nov 2013 16:44:36 +0100 Subject: [PATCH] Made Jeija's water waving tweakable. Add config setting for it. --- .../shaders/liquids_shader/opengl_vertex.glsl | 27 ++++++++++++------- src/defaultsettings.cpp | 4 +++ src/game.cpp | 12 +++++++++ 3 files changed, 33 insertions(+), 10 deletions(-) diff --git a/client/shaders/liquids_shader/opengl_vertex.glsl b/client/shaders/liquids_shader/opengl_vertex.glsl index ac025ff..3436802 100644 --- a/client/shaders/liquids_shader/opengl_vertex.glsl +++ b/client/shaders/liquids_shader/opengl_vertex.glsl @@ -5,6 +5,11 @@ uniform float dayNightRatio; uniform float timeOfDay; uniform vec3 eyePosition; +uniform float enableWaterWave; +uniform float waterWaveHeight; +uniform float waterWaveSpeed; +uniform float waterWaveLength; + varying vec3 vPosition; varying vec3 viewVec; varying vec3 T,B,N; @@ -22,16 +27,18 @@ float rand(vec2 co) void main(void) { gl_Position = mWorldViewProj * gl_Vertex; - int wavelength = 20; - float waveheight = 1.7; - int wavespeed = 100; - int height_randomness = 1; - vec4 pos2 = gl_Vertex; - pos2.y -= 3.0; - pos2.y -= sin (pos2.z/wavelength + timeOfDay * wavespeed * wavelength) * waveheight - + sin ((pos2.z/wavelength + timeOfDay * wavespeed * wavelength)/7) * waveheight * height_randomness; - gl_Position = mWorldViewProj * pos2; - + if (enableWaterWave == 1) + { + int wavelength = 20; + float waveheight = 0.4; + int wavespeed = 50; + int height_randomness = 1; + vec4 pos2 = gl_Vertex; + pos2.y -= 3.0; + pos2.y -= sin (pos2.z/waterWaveLength + timeOfDay * waterWaveSpeed * waterWaveLength) * waterWaveHeight + + sin ((pos2.z/waterWaveLength + timeOfDay * waterWaveSpeed * waterWaveLength)/7) * waterWaveHeight * height_randomness; + gl_Position = mWorldViewProj * pos2; + } vPosition = (mWorldViewProj * gl_Vertex).xyz; vec3 pos = vec3(gl_Vertex); diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 51bc7a6..83e15de 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -131,6 +131,10 @@ void set_default_settings(Settings *settings) settings->setDefault("parallax_mapping_bias", "0.04"); settings->setDefault("enable_bumpmapping", "false"); settings->setDefault("enable_water_surface_shaders", "false"); + settings->setDefault("enable_water_wave", "false"); + settings->setDefault("water_wave_height", "0.4"); + settings->setDefault("water_wave_speed", "50.0"); + settings->setDefault("water_wave_length", "20.0"); settings->setDefault("enable_shaders", "true"); settings->setDefault("repeat_rightclick_time", "0.25"); settings->setDefault("enable_particles", "true"); diff --git a/src/game.cpp b/src/game.cpp index 1f8e8c7..20f7f8c 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -809,6 +809,18 @@ public: services->setPixelShaderConstant("timeOfDay", &time_of_day_f, 1); services->setVertexShaderConstant("timeOfDay", &time_of_day_f, 1); + float enable_water_wave = 0; + if (g_settings->getBool("enable_water_wave")){ + enable_water_wave = 1; + float water_wave_height = g_settings->getFloat("water_wave_height"); + services->setVertexShaderConstant("waterWaveHeight", &water_wave_height, 1); + float water_wave_speed = g_settings->getFloat("water_wave_speed"); + services->setVertexShaderConstant("waterWaveSpeed", &water_wave_speed, 1); + float water_wave_length = g_settings->getFloat("water_wave_length"); + services->setVertexShaderConstant("waterWaveLength", &water_wave_length, 1); + } + services->setVertexShaderConstant("enableWaterWave", &enable_water_wave, 1); + LocalPlayer* player = m_client->getEnv().getLocalPlayer(); v3f eye_position = player->getEyePosition(); services->setPixelShaderConstant("eyePosition", (irr::f32*)&eye_position, 3);