File: bumpWaterVS.glsl

package info (click to toggle)
spring 106.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 55,260 kB
  • sloc: cpp: 543,946; ansic: 44,800; python: 12,575; java: 12,201; awk: 5,889; sh: 1,796; asm: 1,546; xml: 655; perl: 405; php: 211; objc: 194; makefile: 76; sed: 2
file content (115 lines) | stat: -rw-r--r-- 3,251 bytes parent folder | download | duplicates (3)
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/**
 * @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 mat4 projMatrix;
uniform mat4 viewMatrix;

uniform vec3 eyePos;
uniform vec2 windVector;


layout(location = 0) in vec3 vertexPosAttr;

out vec4 texCoord0;
out vec4 texCoord1;
out vec4 texCoord2;
out vec4 texCoord3;
out vec4 texCoord4;
out vec4 texCoord5;

out vec3 eyeVec;
out vec3 sunVec;
out vec3 worldPos;

out float fogCoord;


void main()
{
	vec4 vertexPos = vec4(vertexPosAttr, 1.0);

	// COMPUTE TEXCOORDS
	texCoord0 = TexGenPlane * vertexPos.xzxz;
	texCoord5.st = ShadingPlane.xy * vertexPos.xz;

	// COMPUTE WAVE TEXTURE COORDS
	float fstart = PerlinStartFreq;
	float f      = PerlinLacunarity;

	texCoord1.st = (vec2(-1.0, -1.0) + texCoord0.pq + 0.75) * fstart       + frame * WindSpeed * windVector;
	texCoord1.pq = (vec2(-1.0,  1.0) + texCoord0.pq + 0.50) * fstart*f     - frame * WindSpeed * windVector;
	texCoord2.st = (vec2( 1.0, -1.0) + texCoord0.pq + 0.25) * fstart*f*f   + frame * WindSpeed * windVector;
	texCoord2.pq = (vec2( 1.0,  1.0) + texCoord0.pq + 0.00) * fstart*f*f*f + frame * WindSpeed * windVector;

	texCoord3.st = texCoord0.pq * 160.0 + frame * 2.5;
	texCoord3.pq = texCoord0.pq *  90.0 - frame * 2.0;
	texCoord4.st = texCoord0.pq *   2.0;
	texCoord4.pq = texCoord0.pq *   6.0 + frame * 0.37;


	// SIMULATE WAVES
	vertexPos.y = 3.0 * (cos(frame * 500.0 + vertexPosAttr.z) * sin(frame * 500.0 + vertexPosAttr.x / 1000.0));

	// COMPUTE LIGHT VECTORS
	eyeVec = eyePos - vertexPos.xyz;
	sunVec = normalize(SunDir * 20000.0 + MapMid - vertexPos.xyz);

	// FOG eye-depth
	worldPos = vertexPos.xyz;
	fogCoord = (viewMatrix * vertexPos).z;

	// POSITION
	gl_Position = projMatrix * viewMatrix * vertexPos;
}