varying vec3 tsEyeVec;\r
varying vec3 tsLightVec;\r
varying float area_enable_parallax;
+varying float disp;
\r
const float e = 2.718281828459;\r
const float BS = 10.0;\r
\r
+
float smoothCurve(float x)
{
return x * x * (3.0 - 2.0 * x);
}\r
+
+
float triangleWave(float x)
{
return abs(fract(x + 0.5) * 2.0 - 1.0);
}\r
+
+
float smoothTriangleWave(float x)
{
return smoothCurve(triangleWave(x)) * 2.0 - 1.0;
}\r
\r
+
void main(void)\r
{\r
gl_TexCoord[0] = gl_MultiTexCoord0;\r
area_enable_parallax = 0.0;
#endif
-#if ((MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_LIQUID_OPAQUE) && ENABLE_WAVING_WATER)
+
+#if (MATERIAL_TYPE == TILE_MATERIAL_WAVING_LEAVES && ENABLE_WAVING_LEAVES) || (MATERIAL_TYPE == TILE_MATERIAL_WAVING_PLANTS && ENABLE_WAVING_PLANTS)
+ vec4 pos2 = mWorld * gl_Vertex;
+ float tOffset = (pos2.x + pos2.y) * 0.001 + pos2.z * 0.002;
+ disp = (smoothTriangleWave(animationTimer * 31.0 + tOffset) +
+ smoothTriangleWave(animationTimer * 29.0 + tOffset) +
+ smoothTriangleWave(animationTimer * 13.0 + tOffset)) - 0.9;
+#endif
+
+
+#if (MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_LIQUID_OPAQUE) && ENABLE_WAVING_WATER
vec4 pos = gl_Vertex;\r
pos.y -= 2.0;\r
-\r
float posYbuf = (pos.z / WATER_WAVE_LENGTH + animationTimer * WATER_WAVE_SPEED * WATER_WAVE_LENGTH);\r
-\r
pos.y -= sin(posYbuf) * WATER_WAVE_HEIGHT + sin(posYbuf / 7.0) * WATER_WAVE_HEIGHT;\r
gl_Position = mWorldViewProj * pos;\r
#elif MATERIAL_TYPE == TILE_MATERIAL_WAVING_LEAVES && ENABLE_WAVING_LEAVES\r
vec4 pos = gl_Vertex;\r
- vec4 pos2 = mWorld * gl_Vertex;\r
-\r
- /*\r
- * Mathematic optimization: pos2.x * A + pos2.z * A (2 multiplications + 1 addition)\r
- * replaced with: (pos2.x + pos2.z) * A (1 addition + 1 multiplication)\r
- * And bufferize calcul to a float\r
- */\r
- float pos2XpZ = pos2.x + pos2.z;\r
-\r
- pos.x += (smoothTriangleWave(animationTimer*10.0 + pos2XpZ * 0.01) * 2.0 - 1.0) * 0.4;\r
- pos.y += (smoothTriangleWave(animationTimer*15.0 + pos2XpZ * -0.01) * 2.0 - 1.0) * 0.2;\r
- pos.z += (smoothTriangleWave(animationTimer*10.0 + pos2XpZ * -0.01) * 2.0 - 1.0) * 0.4;\r
+ pos.x += disp * 0.1;
+ pos.y += disp * 0.1;
+ pos.z += disp;
gl_Position = mWorldViewProj * pos;\r
#elif MATERIAL_TYPE == TILE_MATERIAL_WAVING_PLANTS && ENABLE_WAVING_PLANTS\r
vec4 pos = gl_Vertex;\r
- vec4 pos2 = mWorld * gl_Vertex;\r
if (gl_TexCoord[0].y < 0.05) {\r
- /*\r
- * Mathematic optimization: pos2.x * A + pos2.z * A (2 multiplications + 1 addition)\r
- * replaced with: (pos2.x + pos2.z) * A (1 addition + 1 multiplication)\r
- * And bufferize calcul to a float\r
- */\r
- float pos2XpZ = pos2.x + pos2.z;\r
-\r
- pos.x += (smoothTriangleWave(animationTimer * 20.0 + pos2XpZ * 0.1) * 2.0 - 1.0) * 0.8;\r
- pos.y -= (smoothTriangleWave(animationTimer * 10.0 + pos2XpZ * -0.5) * 2.0 - 1.0) * 0.4;\r
+ pos.z += disp;
}\r
gl_Position = mWorldViewProj * pos;\r
#else\r
gl_Position = mWorldViewProj * gl_Vertex;\r
#endif\r
\r
+
vPosition = gl_Position.xyz;\r
worldPosition = (mWorld * gl_Vertex).xyz;\r