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