From 53efe2ef4272c4ea8c347059e096f1ebd210d9a2 Mon Sep 17 00:00:00 2001 From: RealBadAngel Date: Sun, 21 Jun 2015 00:11:09 +0200 Subject: Remove textures vertical offset. Fix for area enabling parallax. --- client/shaders/nodes_shader/opengl_fragment.glsl | 8 ++++---- client/shaders/nodes_shader/opengl_vertex.glsl | 20 ++++++++++++-------- 2 files changed, 16 insertions(+), 12 deletions(-) (limited to 'client') diff --git a/client/shaders/nodes_shader/opengl_fragment.glsl b/client/shaders/nodes_shader/opengl_fragment.glsl index 066e49658..0e84eacf9 100644 --- a/client/shaders/nodes_shader/opengl_fragment.glsl +++ b/client/shaders/nodes_shader/opengl_fragment.glsl @@ -8,7 +8,7 @@ uniform vec3 eyePosition; varying vec3 vPosition; varying vec3 worldPosition; -varying float generate_heightmaps; +varying float area_enable_parallax; varying vec3 eyeVec; varying vec3 tsEyeVec; @@ -95,7 +95,7 @@ void main (void) vec3 eyeRay = normalize(tsEyeVec); #if PARALLAX_OCCLUSION_MODE == 0 // Parallax occlusion with slope information - if (normalTexturePresent) { + if (normalTexturePresent && area_enable_parallax > 0.0) { const float scale = PARALLAX_OCCLUSION_SCALE / PARALLAX_OCCLUSION_ITERATIONS; const float bias = PARALLAX_OCCLUSION_BIAS / PARALLAX_OCCLUSION_ITERATIONS; for(int i = 0; i < PARALLAX_OCCLUSION_ITERATIONS; i++) { @@ -106,12 +106,12 @@ void main (void) #endif #if PARALLAX_OCCLUSION_MODE == 1 // Relief mapping - if (normalTexturePresent) { + if (normalTexturePresent && area_enable_parallax > 0.0) { vec2 ds = eyeRay.xy * PARALLAX_OCCLUSION_SCALE; float dist = find_intersection(uv, ds); uv += dist * ds; #endif - } else if (generate_heightmaps > 0.0) { + } else if (area_enable_parallax > 0.0) { vec2 ds = eyeRay.xy * PARALLAX_OCCLUSION_SCALE; float dist = find_intersectionRGB(uv, ds); uv += dist * ds; diff --git a/client/shaders/nodes_shader/opengl_vertex.glsl b/client/shaders/nodes_shader/opengl_vertex.glsl index 42a5f6cbf..5c4d46be6 100644 --- a/client/shaders/nodes_shader/opengl_vertex.glsl +++ b/client/shaders/nodes_shader/opengl_vertex.glsl @@ -14,7 +14,7 @@ varying vec3 eyeVec; varying vec3 lightVec; varying vec3 tsEyeVec; varying vec3 tsLightVec; -varying float generate_heightmaps; +varying float area_enable_parallax; const float e = 2.718281828459; const float BS = 10.0; @@ -35,12 +35,16 @@ float smoothTriangleWave(float x) void main(void) { gl_TexCoord[0] = gl_MultiTexCoord0; - gl_TexCoord[0].y += 0.008; - + //TODO: make offset depending on view angle and parallax uv displacement + //thats for textures that doesnt align vertically, like dirt with grass + //gl_TexCoord[0].y += 0.008; + + //Allow parallax/relief mapping only for certain kind of nodes + //Variable is also used to control area of the effect #if ((DRAW_TYPE == NDT_NORMAL || DRAW_TYPE == NDT_LIQUID || DRAW_TYPE == NDT_FLOWINGLIQUID) && GENERATE_NORMALMAPS) - generate_heightmaps = 1.0; + area_enable_parallax = 1.0; #else - generate_heightmaps = 0.0; + area_enable_parallax = 0.0; #endif #if ((MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_LIQUID_OPAQUE) && ENABLE_WAVING_WATER) @@ -89,9 +93,9 @@ void main(void) worldPosition = (mWorld * gl_Vertex).xyz; // Don't generate heightmaps when too far from the eye - float dist = distance (worldPosition, eyePosition); - if (dist > 100.00) { - generate_heightmaps = 0.0; + float dist = distance (vec3(0.0, 0.0 ,0.0), vPosition); + if (dist > 100.0) { + area_enable_parallax = 0.0; } vec3 sunPosition = vec3 (0.0, eyePosition.y * BS + 900.0, 0.0); -- cgit v1.2.3