root/OpenSceneGraph-Data/trunk/shaders/rain.vert

Revision 6871 (checked in by robert, 2 years ago)

Checked in first cut of new SVN for OpenSceneGraph-Data

Line 
1 uniform vec3 position;
2 uniform vec3 dv_i;
3 uniform vec3 dv_j;
4 uniform vec3 dv_k;
5
6 uniform float inversePeriod;
7 uniform float startTime;
8 uniform vec4 particleColour;
9
10 uniform float osg_SimulationTime;
11 uniform float osg_DeltaSimulationTime;
12 uniform mat4 previousModelViewMatrix;
13
14 varying vec4 colour;
15 varying vec2 texCoord;
16
17 void main(void)
18 {
19     const float particleSize = 0.01;
20     const float particleSize2 = 0.0001;//particleSize*particleSize;
21
22     vec3 pos = position + (gl_Vertex.x*dv_i) + (dv_j * gl_Vertex.y);
23    
24     float offset = gl_Vertex.z;
25     texCoord = gl_MultiTexCoord0.xy;
26
27     vec3 v_previous = pos + dv_k * fract( (osg_SimulationTime - startTime)*inversePeriod - offset);
28     vec3 v_current = v_previous + dv_k * (osg_DeltaSimulationTime*inversePeriod);
29    
30     colour = particleColour;
31    
32     vec4 v1 = gl_ModelViewMatrix * vec4(v_current,1.0);
33     vec4 v2 = previousModelViewMatrix * vec4(v_previous,1.0);
34    
35     vec3 dv = v2.xyz - v1.xyz;
36    
37     vec2 dv_normalized = normalize(dv.xy);
38     dv.xy += dv_normalized * particleSize;
39     vec2 dp = vec2( -dv_normalized.y, dv_normalized.x ) * particleSize;
40    
41     float area = length(dv.xy)*length(dp);
42     colour.a = 0.2+(particleSize2)/area;
43    
44
45     v1.xyz += dv*texCoord.y;
46     v1.xy += dp*texCoord.x;
47    
48     gl_Position = gl_ProjectionMatrix * v1;
49 }
Note: See TracBrowser for help on using the browser.