@@ -15,23 +15,30 @@ varying vec3 lightVec;
15
15
varying vec3 tsEyeVec;
16
16
varying vec3 tsLightVec;
17
17
varying float area_enable_parallax;
18
+ varying float disp;
18
19
19
20
const float e = 2.718281828459 ;
20
21
const float BS = 10.0 ;
21
22
23
+
22
24
float smoothCurve(float x)
23
25
{
24
26
return x * x * (3.0 - 2.0 * x);
25
27
}
28
+
29
+
26
30
float triangleWave(float x)
27
31
{
28
32
return abs (fract (x + 0.5 ) * 2.0 - 1.0 );
29
33
}
34
+
35
+
30
36
float smoothTriangleWave(float x)
31
37
{
32
38
return smoothCurve(triangleWave(x)) * 2.0 - 1.0 ;
33
39
}
34
40
41
+
35
42
void main(void )
36
43
{
37
44
gl_TexCoord [0 ] = gl_MultiTexCoord0 ;
@@ -47,48 +54,39 @@ void main(void)
47
54
area_enable_parallax = 0.0 ;
48
55
#endif
49
56
50
- #if ((MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_LIQUID_OPAQUE) && ENABLE_WAVING_WATER)
57
+
58
+ #if (MATERIAL_TYPE == TILE_MATERIAL_WAVING_LEAVES && ENABLE_WAVING_LEAVES) || (MATERIAL_TYPE == TILE_MATERIAL_WAVING_PLANTS && ENABLE_WAVING_PLANTS)
59
+ vec4 pos2 = mWorld * gl_Vertex ;
60
+ float tOffset = (pos2.x + pos2.y) * 0.001 + pos2.z * 0.002 ;
61
+ disp = (smoothTriangleWave(animationTimer * 31.0 + tOffset) +
62
+ smoothTriangleWave(animationTimer * 29.0 + tOffset) +
63
+ smoothTriangleWave(animationTimer * 13.0 + tOffset)) - 0.9 ;
64
+ #endif
65
+
66
+
67
+ #if (MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_LIQUID_OPAQUE) && ENABLE_WAVING_WATER
51
68
vec4 pos = gl_Vertex ;
52
69
pos.y -= 2.0 ;
53
-
54
70
float posYbuf = (pos.z / WATER_WAVE_LENGTH + animationTimer * WATER_WAVE_SPEED * WATER_WAVE_LENGTH);
55
-
56
71
pos.y -= sin (posYbuf) * WATER_WAVE_HEIGHT + sin (posYbuf / 7.0 ) * WATER_WAVE_HEIGHT;
57
72
gl_Position = mWorldViewProj * pos;
58
73
#elif MATERIAL_TYPE == TILE_MATERIAL_WAVING_LEAVES && ENABLE_WAVING_LEAVES
59
74
vec4 pos = gl_Vertex ;
60
- vec4 pos2 = mWorld * gl_Vertex ;
61
-
62
- /*
63
- * Mathematic optimization: pos2.x * A + pos2.z * A (2 multiplications + 1 addition)
64
- * replaced with: (pos2.x + pos2.z) * A (1 addition + 1 multiplication)
65
- * And bufferize calcul to a float
66
- */
67
- float pos2XpZ = pos2.x + pos2.z;
68
-
69
- pos.x += (smoothTriangleWave(animationTimer* 10.0 + pos2XpZ * 0.01 ) * 2.0 - 1.0 ) * 0.4 ;
70
- pos.y += (smoothTriangleWave(animationTimer* 15.0 + pos2XpZ * - 0.01 ) * 2.0 - 1.0 ) * 0.2 ;
71
- pos.z += (smoothTriangleWave(animationTimer* 10.0 + pos2XpZ * - 0.01 ) * 2.0 - 1.0 ) * 0.4 ;
75
+ pos.x += disp * 0.1 ;
76
+ pos.y += disp * 0.1 ;
77
+ pos.z += disp;
72
78
gl_Position = mWorldViewProj * pos;
73
79
#elif MATERIAL_TYPE == TILE_MATERIAL_WAVING_PLANTS && ENABLE_WAVING_PLANTS
74
80
vec4 pos = gl_Vertex ;
75
- vec4 pos2 = mWorld * gl_Vertex ;
76
81
if (gl_TexCoord [0 ].y < 0.05 ) {
77
- /*
78
- * Mathematic optimization: pos2.x * A + pos2.z * A (2 multiplications + 1 addition)
79
- * replaced with: (pos2.x + pos2.z) * A (1 addition + 1 multiplication)
80
- * And bufferize calcul to a float
81
- */
82
- float pos2XpZ = pos2.x + pos2.z;
83
-
84
- pos.x += (smoothTriangleWave(animationTimer * 20.0 + pos2XpZ * 0.1 ) * 2.0 - 1.0 ) * 0.8 ;
85
- pos.y -= (smoothTriangleWave(animationTimer * 10.0 + pos2XpZ * - 0.5 ) * 2.0 - 1.0 ) * 0.4 ;
82
+ pos.z += disp;
86
83
}
87
84
gl_Position = mWorldViewProj * pos;
88
85
#else
89
86
gl_Position = mWorldViewProj * gl_Vertex ;
90
87
#endif
91
88
89
+
92
90
vPosition = gl_Position .xyz;
93
91
worldPosition = (mWorld * gl_Vertex ).xyz;
94
92
0 commit comments