water now has depth and looks much better
This commit is contained in:
parent
4204a15b1e
commit
e2717aaaa9
@ -1,15 +1,19 @@
|
|||||||
#version 330
|
#version 330
|
||||||
|
|
||||||
|
uniform sampler2D gPos;
|
||||||
uniform sampler2D tex;
|
uniform sampler2D tex;
|
||||||
uniform sampler2D shadowmap;
|
uniform sampler2D shadowmap;
|
||||||
uniform vec3 viewPos;
|
uniform vec3 viewPos;
|
||||||
uniform vec3 sun;
|
uniform vec3 sun;
|
||||||
uniform vec4 fogColor;
|
uniform vec4 fogColor;
|
||||||
|
uniform vec2 screenSize;
|
||||||
|
|
||||||
uniform float alpha; // Alpha of the semi-transparant layer
|
uniform float alpha; // Alpha of the semi-transparant layer
|
||||||
|
|
||||||
// Fragment information
|
// Fragment information
|
||||||
in vec4 fragPos;
|
in vec4 fragPos;
|
||||||
|
in vec4 fragPosView;
|
||||||
|
in vec4 fragPosScreen;
|
||||||
in vec4 fragPosLightspace;
|
in vec4 fragPosLightspace;
|
||||||
in vec3 fragNormal;
|
in vec3 fragNormal;
|
||||||
in vec2 fragTexCoord;
|
in vec2 fragTexCoord;
|
||||||
@ -24,7 +28,7 @@ const float ambient = 0.3, specularStrength = 1.6, specularShininess = 128;
|
|||||||
const float fogDensity = .00003;
|
const float fogDensity = .00003;
|
||||||
|
|
||||||
|
|
||||||
float finalpha;
|
float sunalpha = 0;
|
||||||
float light;
|
float light;
|
||||||
vec3 color = vec3(0);
|
vec3 color = vec3(0);
|
||||||
void lightSun();
|
void lightSun();
|
||||||
@ -36,7 +40,6 @@ void main() {
|
|||||||
|
|
||||||
fragColor = vec4(texture(tex, fragTexCoord).rgb, 1.0f);
|
fragColor = vec4(texture(tex, fragTexCoord).rgb, 1.0f);
|
||||||
|
|
||||||
finalpha = alpha;
|
|
||||||
light = ambient;
|
light = ambient;
|
||||||
|
|
||||||
lightSun();
|
lightSun();
|
||||||
@ -46,7 +49,10 @@ void main() {
|
|||||||
//float z = gl_FragCoord.z / gl_FragCoord.w;
|
//float z = gl_FragCoord.z / gl_FragCoord.w;
|
||||||
//float fog = clamp(exp(-fogDensity * z * z), 0.2, 1);
|
//float fog = clamp(exp(-fogDensity * z * z), 0.2, 1);
|
||||||
|
|
||||||
outputColor = vec4(color, 1) * finalpha;
|
float waterDepth = (fragPosView.z-texture(gPos, gl_FragCoord.xy/screenSize).a);
|
||||||
|
|
||||||
|
float waterFactor = pow(alpha, waterDepth);
|
||||||
|
outputColor = vec4(color*waterFactor, min(1-waterFactor + sunalpha, 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
void lightSun() {
|
void lightSun() {
|
||||||
@ -63,10 +69,9 @@ void lightSun() {
|
|||||||
light += diffuse * shadow;
|
light += diffuse * shadow;
|
||||||
color += vec3(specular) * shadow;
|
color += vec3(specular) * shadow;
|
||||||
|
|
||||||
if (specular*shadow > 1.0f) {
|
if (specular*shadow > 1.0f)
|
||||||
finalpha = min(finalpha + specular - 1.0f, 1.0f);
|
sunalpha += specular*shadow - 1.0f;
|
||||||
}
|
sunalpha += 0.1f*shadow;
|
||||||
finalpha = min(finalpha + 0.1f * shadow, 1.0f);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
float lightSunShadow() {
|
float lightSunShadow() {
|
||||||
|
@ -11,6 +11,7 @@ layout (location = 2) in vec2 texCoord;
|
|||||||
layout (location = 4) in float light;
|
layout (location = 4) in float light;
|
||||||
|
|
||||||
out vec4 fragPos;
|
out vec4 fragPos;
|
||||||
|
out vec4 fragPosView;
|
||||||
out vec4 fragPosLightspace;
|
out vec4 fragPosLightspace;
|
||||||
out vec3 fragNormal;
|
out vec3 fragNormal;
|
||||||
out vec2 fragTexCoord;
|
out vec2 fragTexCoord;
|
||||||
@ -19,8 +20,9 @@ out vec2 fragTexCoord;
|
|||||||
void main() {
|
void main() {
|
||||||
fragTexCoord = texCoord;
|
fragTexCoord = texCoord;
|
||||||
fragPos = model * vec4(vert, 1);
|
fragPos = model * vec4(vert, 1);
|
||||||
|
fragPosView = view * fragPos;
|
||||||
fragPosLightspace = lightspace * fragPos;
|
fragPosLightspace = lightspace * fragPos;
|
||||||
fragNormal = normal;
|
fragNormal = normal;
|
||||||
gl_Position = projection * view * fragPos;
|
gl_Position = projection * fragPosView;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -222,6 +222,7 @@ func (r *WorldRenderer) Init(w *world.World) (err error) {
|
|||||||
r.lighting.shader.SetUniformTextureHandle("gColor", r.gbuffer.color)
|
r.lighting.shader.SetUniformTextureHandle("gColor", r.gbuffer.color)
|
||||||
r.ssao.shader.SetUniformTextureHandle("gPos", r.gbuffer.pos)
|
r.ssao.shader.SetUniformTextureHandle("gPos", r.gbuffer.pos)
|
||||||
r.ssao.shader.SetUniformTextureHandle("gNorm", r.gbuffer.norm)
|
r.ssao.shader.SetUniformTextureHandle("gNorm", r.gbuffer.norm)
|
||||||
|
r.water.shader.SetUniformTextureHandle("gPos", r.gbuffer.pos)
|
||||||
|
|
||||||
// generate SSAO friends
|
// generate SSAO friends
|
||||||
gl.GenFramebuffers(1, &r.ssao.fbo)
|
gl.GenFramebuffers(1, &r.ssao.fbo)
|
||||||
@ -430,7 +431,7 @@ func (r *WorldRenderer) Render(world *world.World, view *View) {
|
|||||||
gl.DepthFunc(gl.LESS)
|
gl.DepthFunc(gl.LESS)
|
||||||
gl.Enable(gl.CULL_FACE)
|
gl.Enable(gl.CULL_FACE)
|
||||||
gl.Enable(gl.BLEND)
|
gl.Enable(gl.BLEND)
|
||||||
gl.BlendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA)
|
gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA)
|
||||||
gl.BlendEquation(gl.FUNC_ADD)
|
gl.BlendEquation(gl.FUNC_ADD)
|
||||||
r.water.shader.UseProgram()
|
r.water.shader.UseProgram()
|
||||||
r.water.shader.BindTextures()
|
r.water.shader.BindTextures()
|
||||||
@ -442,6 +443,7 @@ func (r *WorldRenderer) Render(world *world.World, view *View) {
|
|||||||
r.water.shader.SetUniformVec4f("fogColor", io.FogColor)
|
r.water.shader.SetUniformVec4f("fogColor", io.FogColor)
|
||||||
r.water.shader.SetUniformVec3f("sun", normalSun)
|
r.water.shader.SetUniformVec3f("sun", normalSun)
|
||||||
r.water.shader.SetUniformFloat("alpha", alpha)
|
r.water.shader.SetUniformFloat("alpha", alpha)
|
||||||
|
r.water.shader.SetUniformVec2f("screenSize", r.lastDisplaySize.ToFloat32())
|
||||||
|
|
||||||
world.RenderWater()
|
world.RenderWater()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user