Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: data/branches/Shader_HS18/programs/Example/GLSL150/Ocean2GLSL.vert @ 12083

Last change on this file since 12083 was 12083, checked in by wiesep, 6 years ago

Reorganised shader programs

File size: 3.0 KB
Line 
1/*********************************************************************NVMH3****
2Copyright NVIDIA Corporation 2003
3TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED
4*AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS
5OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
6AND FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS
7BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES
8WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS,
9BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS)
10ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS
11BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
12
13
14Comments:
15        Simple ocean shader with animated bump map and geometric waves
16        Based partly on "Effective Water Simulation From Physical Models", GPU Gems
17
1811 Aug 05: converted from HLSL to GLSL by Jeff Doyle (nfz) to work in Ogre
19
20******************************************************************************/
21
22#version 150
23
24uniform vec3 eyePosition;
25uniform float BumpScale;
26uniform vec2 textureScale;
27uniform vec2 bumpSpeed;
28uniform float time;
29uniform float waveFreq;
30uniform float waveAmp;
31uniform mat4 worldViewProj;
32
33in vec4 vertex;
34in vec4 uv0;
35
36out mat3 rotMatrix; //  transform from tangent to obj space
37out vec2 bumpCoord0;
38out vec2 bumpCoord1;
39out vec2 bumpCoord2;
40out vec3 eyeVector;
41
42// wave functions
43struct Wave {
44  float freq;  // 2*PI / wavelength
45  float amp;   // amplitude
46  float phase; // speed * 2*PI / wavelength
47  vec2 dir;
48};
49
50
51void main(void)
52{
53        #define NWAVES 2
54
55        Wave wave[NWAVES];
56
57        wave[0] = Wave( waveFreq, waveAmp, 0.5, vec2(-1, 0) );
58        wave[1] = Wave( 3.0 * waveFreq, 0.33 * waveAmp, 1.7, vec2(-0.7, 0.7) );
59
60    vec4 P = vertex;
61
62        // sum waves
63        float ddx = 0.0, ddy = 0.0;
64        float deriv;
65        float angle;
66
67        // wave synthesis using two sine waves at different frequencies and phase shift
68        for(int i = 0; i<NWAVES; ++i)
69        {
70                angle = dot(wave[i].dir, P.xz) * wave[i].freq + time * wave[i].phase;
71                P.y += wave[i].amp * sin( angle );
72                // calculate derivate of wave function
73                deriv = wave[i].freq * wave[i].amp * cos(angle);
74                ddx -= deriv * wave[i].dir.x;
75                ddy -= deriv * wave[i].dir.y;
76        }
77
78        // compute the 3x3 transform from tangent space to object space
79        // compute tangent basis
80    vec3 T = normalize(vec3(1.0, ddy, 0.0)) * BumpScale;
81    vec3 B = normalize(vec3(0.0, ddx, 1.0)) * BumpScale;
82    vec3 N = normalize(vec3(ddx, 1.0, ddy));
83
84        rotMatrix = mat3(T, B, N);
85
86        gl_Position = worldViewProj * P;
87
88        // calculate texture coordinates for normal map lookup
89        bumpCoord0.xy = uv0.xy * textureScale + time * bumpSpeed;
90        bumpCoord1.xy = uv0.xy * textureScale * 2.0 + time * bumpSpeed * 4.0;
91        bumpCoord2.xy = uv0.xy * textureScale * 4.0 + time * bumpSpeed * 8.0;
92
93        eyeVector = P.xyz - eyePosition; // eye position in vertex space
94}
Note: See TracBrowser for help on using the repository browser.