From 0dc1aec50940140e28f434c524296e284e73d623 Mon Sep 17 00:00:00 2001 From: RealBadAngel Date: Fri, 21 Mar 2014 01:32:00 +0100 Subject: Normal maps generation on the fly. Parallax mapping with slope information. Overriding normal maps. --- client/shaders/solids_shader/opengl_vertex.glsl | 38 +++++++++++-------------- 1 file changed, 17 insertions(+), 21 deletions(-) (limited to 'client/shaders/solids_shader/opengl_vertex.glsl') diff --git a/client/shaders/solids_shader/opengl_vertex.glsl b/client/shaders/solids_shader/opengl_vertex.glsl index e359955d0..356ba2eb9 100644 --- a/client/shaders/solids_shader/opengl_vertex.glsl +++ b/client/shaders/solids_shader/opengl_vertex.glsl @@ -1,27 +1,33 @@ uniform mat4 mWorldViewProj; uniform mat4 mInvWorld; uniform mat4 mTransWorld; +uniform mat4 mWorld; + uniform float dayNightRatio; uniform vec3 eyePosition; varying vec3 vPosition; +varying vec3 worldPosition; + varying vec3 eyeVec; +varying vec3 lightVec; -#ifdef ENABLE_PARALLAX_OCCLUSION varying vec3 tsEyeVec; -#endif +varying vec3 tsLightVec; + +const float BS = 10.0; void main(void) { + gl_TexCoord[0] = gl_MultiTexCoord0; gl_Position = mWorldViewProj * gl_Vertex; - vPosition = (mWorldViewProj * gl_Vertex).xyz; - eyeVec = (gl_ModelViewMatrix * gl_Vertex).xyz; + vPosition = gl_Position.xyz; + worldPosition = (mWorld * gl_Vertex).xyz; + vec3 sunPosition = vec3 (0.0, eyePosition.y * BS + 900.0, 0.0); -#ifdef ENABLE_PARALLAX_OCCLUSION - vec3 normal,tangent,binormal; + vec3 normal, tangent, binormal; normal = normalize(gl_NormalMatrix * gl_Normal); - if (gl_Normal.x > 0.5) { // 1.0, 0.0, 0.0 tangent = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, -1.0)); @@ -47,25 +53,20 @@ void main(void) tangent = normalize(gl_NormalMatrix * vec3(-1.0, 0.0, 0.0)); binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0)); } - mat3 tbnMatrix = mat3( tangent.x, binormal.x, normal.x, tangent.y, binormal.y, normal.y, tangent.z, binormal.z, normal.z); - tsEyeVec = normalize(eyeVec * tbnMatrix); -#endif + lightVec = sunPosition - worldPosition; + tsLightVec = lightVec * tbnMatrix; + eyeVec = (gl_ModelViewMatrix * gl_Vertex).xyz; + tsEyeVec = eyeVec * tbnMatrix; vec4 color; - //color = vec4(1.0, 1.0, 1.0, 1.0); - float day = gl_Color.r; float night = gl_Color.g; float light_source = gl_Color.b; - /*color.r = mix(night, day, dayNightRatio); - color.g = color.r; - color.b = color.r;*/ - float rg = mix(night, day, dayNightRatio); rg += light_source * 2.5; // Make light sources brighter float b = rg; @@ -90,13 +91,8 @@ void main(void) color = color * color; // SRGB -> Linear if(gl_Normal.y <= 0.5) color *= 0.6; - //color *= 0.7; color = sqrt(color); // Linear -> SRGB - color.a = gl_Color.a; gl_FrontColor = gl_BackColor = color; - - gl_TexCoord[0] = gl_MultiTexCoord0; - } -- cgit v1.2.3