Remove textures vertical offset. Fix for area enabling parallax.
authorRealBadAngel <maciej.kasatkin@o2.pl>
Sat, 20 Jun 2015 22:11:09 +0000 (00:11 +0200)
committerRealBadAngel <maciej.kasatkin@o2.pl>
Sat, 20 Jun 2015 22:11:09 +0000 (00:11 +0200)
client/shaders/nodes_shader/opengl_fragment.glsl
client/shaders/nodes_shader/opengl_vertex.glsl

index 066e49658aba2ad68244a2e22ca19df74673ca29..0e84eacf90463e08466b343b89591a8161f0b136 100644 (file)
@@ -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;
index 42a5f6cbff678872664aca1cc29518fd5a17941c..5c4d46be6c81cdfbb3cc6f73406e6411286ba406 100644 (file)
@@ -14,7 +14,7 @@ varying vec3 eyeVec;
 varying vec3 lightVec;\r
 varying vec3 tsEyeVec;\r
 varying vec3 tsLightVec;\r
-varying float generate_heightmaps;
+varying float area_enable_parallax;
 \r
 const float e = 2.718281828459;\r
 const float BS = 10.0;\r
@@ -35,12 +35,16 @@ float smoothTriangleWave(float x)
 void main(void)\r
 {\r
        gl_TexCoord[0] = gl_MultiTexCoord0;\r
-       gl_TexCoord[0].y += 0.008;
-
+       //TODO: make offset depending on view angle and parallax uv displacement\r
+       //thats for textures that doesnt align vertically, like dirt with grass\r
+       //gl_TexCoord[0].y += 0.008;
+\r
+       //Allow parallax/relief mapping only for certain kind of nodes\r
+       //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;\r
 
        // 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);\r