water.vert Example File

advancedcustommaterial/shaders/es2/water.vert
 #define FP highp

 attribute FP vec3 vertexPosition;
 attribute FP vec3 vertexNormal;
 attribute FP vec2 vertexTexCoord;
 attribute FP vec4 vertexTangent;

 varying FP vec3 worldPosition;
 varying FP vec3 worldNormal;
 varying FP vec4 worldTangent;
 varying FP vec2 texCoord;
 varying FP vec2 movtexCoord;
 varying FP vec2 multexCoord;
 varying FP vec2 waveTexCoord;
 varying FP vec2 skyTexCoord;
 varying FP vec3 vpos;

 uniform FP mat4 modelMatrix;
 uniform FP mat3 modelNormalMatrix;
 uniform FP mat4 mvp;

 uniform FP float offsetx;
 uniform FP float offsety;
 uniform FP float vertYpos;
 uniform FP float texCoordScale;
 uniform FP float waveheight;
 uniform FP float waveRandom;

 void main()
 {
     // Scale texture coordinates for for fragment shader
     texCoord = vertexTexCoord * texCoordScale;
     movtexCoord = vertexTexCoord * texCoordScale;
     multexCoord = vertexTexCoord * (texCoordScale*0.5);
     waveTexCoord = vertexTexCoord * (texCoordScale * 6.0);
     skyTexCoord = vertexTexCoord * (texCoordScale * 0.2);

     // Add Animated x and y Offset to SKY, MOV and MUL texCoords
     movtexCoord = vec2(texCoord.x+offsetx,texCoord.y+offsety);
     multexCoord = vec2(texCoord.x-offsetx,texCoord.y+offsety);
     skyTexCoord = vec2(texCoord.x-(offsetx/2.0),texCoord.y-(offsety/2.0));

     // Transform position, normal, and tangent to world coords
     worldPosition = vec3(modelMatrix * vec4(vertexPosition, 1.0));
     worldNormal = normalize(modelNormalMatrix * vertexNormal);
     worldTangent.xyz = normalize(vec3(modelMatrix * vec4(vertexTangent.xyz, 0.0)));
     worldTangent.w = vertexTangent.w;

     // Calculate animated vertex positions

     FP float sinPos = (vertexPosition.z)+(vertexPosition.x);
     FP float sinPos2 = (vertexPosition.y/2.0)+(vertexPosition.z);
     FP vec3 vertMod = vec3(vertexPosition.x,vertexPosition.y,vertexPosition.z);

     vertMod = vec3(vertMod.x+=sin(vertYpos*2.2-sinPos2)*waveheight,
                    vertMod.y=sin(vertYpos*2.2+sinPos)*waveheight,
                    vertMod.z-=sin(vertYpos*2.2-cos(sinPos2))*waveheight);

     FP vec3 vertModCom = vec3(vertMod.x+=cos(vertYpos*2.2-cos(sinPos2))*waveheight,
                            vertMod.y=sin(vertYpos*2.2+cos(sinPos))*waveheight,
                            vertMod.z-=cos(vertYpos*2.2-cos(sinPos))*waveheight);

     // Add wave animation only to vertices above world pos.y zero
     if(vertexPosition.y < 0.0){vertModCom = vertexPosition;}
     else{vertModCom = vertModCom;}

     vpos = vertModCom;

     // Calculate vertex position in clip coordinates
     gl_Position = mvp * vec4(vertModCom, 1.0);
 }