1/** 2 * @project Spring RTS 3 * @file bumpWaterVS.glsl 4 * @brief An extended bumpmapping water shader 5 * @author jK 6 * 7 * Copyright (C) 2008,2009. Licensed under the terms of the 8 * GNU GPL, v2 or later. 9 */ 10 11////////////////////////////////////////////////// 12// runtime defined constants are: 13// #define SurfaceColor vec4 14// #define DiffuseColor vec3 15// #define PlaneColor vec4 (unused) 16// #define AmbientFactor float 17// #define DiffuseFactor float (note: it is the map defined value multipled with 15x!) 18// #define SpecularColor vec3 19// #define SpecularPower float 20// #define SpecularFactor float 21// #define PerlinStartFreq float 22// #define PerlinFreq float 23// #define PerlinAmp float 24// #define Speed float 25// #define FresnelMin float 26// #define FresnelMax float 27// #define FresnelPower float 28// #define ScreenInverse vec2 29// #define ViewPos vec2 30// #define MapMid vec3 31// #define SunDir vec3 32// #define ReflDistortion float 33// #define BlurBase vec2 34// #define BlurExponent float 35// #define PerlinStartFreq float 36// #define PerlinLacunarity float 37// #define PerlinAmp float 38// #define WindSpeed float 39// #define TexGenPlane vec4 40// #define ShadingPlane vec4 41 42////////////////////////////////////////////////// 43// possible flags are: 44// //#define opt_heightmap 45// #define opt_reflection 46// #define opt_refraction 47// #define opt_shorewaves 48// #define opt_depth 49// #define opt_blurreflection 50// #define opt_texrect 51// #define opt_endlessocean 52 53uniform float frame; 54uniform vec3 eyePos; 55 56varying vec3 eyeVec; 57varying vec3 ligVec; 58varying vec3 worldPos; 59 60void main() 61{ 62 // COMPUTE TEXCOORDS 63 gl_TexCoord[0] = TexGenPlane * gl_Vertex.xzxz; 64 gl_TexCoord[5].st = ShadingPlane.xy * gl_Vertex.xz; 65 66 // COMPUTE WAVE TEXTURE COORDS 67 float fstart = PerlinStartFreq; 68 float f = PerlinLacunarity; 69 gl_TexCoord[1].st = (vec2(-1.0,-1.0) + gl_TexCoord[0].pq + 0.75) * fstart + frame * WindSpeed * gl_MultiTexCoord1.st; 70 gl_TexCoord[1].pq = (vec2(-1.0, 1.0) + gl_TexCoord[0].pq + 0.50) * fstart*f - frame * WindSpeed * gl_MultiTexCoord1.st; 71 gl_TexCoord[2].st = (vec2( 1.0,-1.0) + gl_TexCoord[0].pq + 0.25) * fstart*f*f + frame * WindSpeed * gl_MultiTexCoord1.st; 72 gl_TexCoord[2].pq = (vec2( 1.0, 1.0) + gl_TexCoord[0].pq + 0.00) * fstart*f*f*f + frame * WindSpeed * gl_MultiTexCoord1.st; 73 74 gl_TexCoord[3].st = gl_TexCoord[0].pq * 160.0 + frame * 2.5; 75 gl_TexCoord[3].pq = gl_TexCoord[0].pq * 90.0 - frame * 2.0; 76 gl_TexCoord[4].st = gl_TexCoord[0].pq * 2.0; 77 gl_TexCoord[4].pq = gl_TexCoord[0].pq * 6.0 + frame * 0.37; 78 79 // SIMULATE WAVES 80 vec4 myVertex; 81 myVertex.xzw = gl_Vertex.xzw; 82 myVertex.y = 3.0 * (cos(frame * 500.0 + gl_Vertex.z) * sin(frame * 500.0 + gl_Vertex.x / 1000.0)); 83 84 // COMPUTE LIGHT VECTORS 85 eyeVec = eyePos - gl_Vertex.xyz; 86 ligVec = normalize(SunDir*20000.0 + MapMid - myVertex.xyz); 87 88 // FOG 89 worldPos = myVertex.xyz; 90 gl_FogFragCoord = (gl_ModelViewMatrix * myVertex).z; 91 92 // POSITION 93 gl_Position = gl_ModelViewProjectionMatrix * myVertex; 94} 95