diff --git a/src/render/opengl/OpenGLWater.cpp b/src/render/opengl/OpenGLWater.cpp index 9868d75..fa57d2c 100644 --- a/src/render/opengl/OpenGLWater.cpp +++ b/src/render/opengl/OpenGLWater.cpp @@ -27,6 +27,7 @@ void OpenGLWater::initialize() program->addFragmentSource("bruneton"); program->addFragmentSource("tonemapping"); program->addFragmentSource("fadeout"); + program->addFragmentSource("noise"); program->addFragmentSource("water"); setVertex(0, -1.0f, 0.0f, -1.0f); diff --git a/src/render/opengl/opengl.pro b/src/render/opengl/opengl.pro index e08d5a8..ce42fbd 100644 --- a/src/render/opengl/opengl.pro +++ b/src/render/opengl/opengl.pro @@ -87,4 +87,5 @@ OTHER_FILES += \ shaders/tonemapping.frag \ shaders/terrain.frag \ shaders/terrain.vert \ - shaders/fadeout.frag + shaders/fadeout.frag \ + shaders/noise.frag diff --git a/src/render/opengl/shaders/noise.frag b/src/render/opengl/shaders/noise.frag new file mode 100644 index 0000000..02995cf --- /dev/null +++ b/src/render/opengl/shaders/noise.frag @@ -0,0 +1,15 @@ +uniform float noiseInitScaling; +uniform float noiseInitHeight; +uniform float noiseStepScaling; +uniform float noiseStepHeight; +uniform sampler2D simplexSampler; + +vec3 noiseNormal2d(vec2 location, float detail) +{ + vec3 normal = vec3(0.0, 0.0, 0.0); + for (float scaling = 1.0; scaling < 400.0; scaling *= 1.5) + { + normal += texture2D(simplexSampler, location * 0.01 * scaling).xyz; + } + return normalize(normal); +} diff --git a/src/render/opengl/shaders/resources.qrc b/src/render/opengl/shaders/resources.qrc index 5dc91be..72a4bb6 100644 --- a/src/render/opengl/shaders/resources.qrc +++ b/src/render/opengl/shaders/resources.qrc @@ -9,5 +9,6 @@ terrain.frag terrain.vert fadeout.frag + noise.frag diff --git a/src/render/opengl/shaders/water.frag b/src/render/opengl/shaders/water.frag index 69d9efc..4c00fe8 100644 --- a/src/render/opengl/shaders/water.frag +++ b/src/render/opengl/shaders/water.frag @@ -1,5 +1,4 @@ uniform vec4 waterColor; -uniform sampler2D simplexSampler; uniform float waterReflection; vec4 applyLighting(vec3 location, vec3 normal, vec4 color, float shininess) @@ -25,12 +24,7 @@ vec4 applyLighting(vec3 location, vec3 normal, vec4 color, float shininess) void main(void) { - vec3 normal = vec3(0.0, 0.0, 0.0); - for (float scaling = 1.0; scaling < 400.0; scaling *= 1.5) - { - normal += texture2D(simplexSampler, unprojected.xz * 0.01 * scaling).xyz; - } - normal = normalize(normal); + vec3 normal = noiseNormal2d(unprojected.xz, 0.001); gl_FragColor = applyLighting(unprojected, normal, waterColor, 100.0);