varying vec3 vPosition;
varying vec3 worldPosition;
-varying float generate_heightmaps;
+varying float area_enable_parallax;
varying vec3 eyeVec;
varying vec3 tsEyeVec;
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++) {
#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;
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
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)
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