intravenous
annotate sdr/vein.p.glsl @ 6:2723dc026c4f
collision detection
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Mon, 23 Apr 2012 21:43:10 +0300 |
parents | aab0d8ea21cd |
children |
rev | line source |
---|---|
nuclear@4 | 1 uniform sampler2D tex_norm; |
nuclear@5 | 2 uniform vec3 fog_col; |
nuclear@4 | 3 |
nuclear@6 | 4 varying vec3 vpos; |
nuclear@3 | 5 varying vec3 ldir, vdir; |
nuclear@3 | 6 |
nuclear@5 | 7 const float fog_dens = 0.075; |
nuclear@5 | 8 |
nuclear@5 | 9 float fog(float dist); |
nuclear@5 | 10 |
nuclear@3 | 11 void main() |
nuclear@3 | 12 { |
nuclear@4 | 13 vec3 tnorm = texture2D(tex_norm, gl_TexCoord[0].st).xyz * 2.0 - 1.0; |
nuclear@4 | 14 vec3 n = normalize(tnorm); |
nuclear@3 | 15 vec3 v = normalize(vdir); |
nuclear@6 | 16 vec3 l = normalize(ldir); |
nuclear@3 | 17 vec3 h = normalize(l + v); |
nuclear@3 | 18 |
nuclear@4 | 19 vec3 diff = vec3(0.8, 0.25, 0.2) * (1.0 - max(dot(l, n), 0.0)); |
nuclear@4 | 20 vec3 spec = 0.5 * vec3(0.9, 0.4, 0.3) * pow(max(dot(h, n), 0.0), 10.0); |
nuclear@3 | 21 |
nuclear@5 | 22 vec3 color = mix(fog_col, diff + spec, fog(vpos.z)); |
nuclear@5 | 23 |
nuclear@5 | 24 gl_FragColor = vec4(color, 1.0); |
nuclear@3 | 25 } |
nuclear@5 | 26 |
nuclear@5 | 27 #define LOG2E 1.442695 |
nuclear@5 | 28 float fog(float dist) |
nuclear@5 | 29 { |
nuclear@5 | 30 return clamp(exp2(-fog_dens * fog_dens * dist * dist * LOG2E), 0.0, 1.0); |
nuclear@5 | 31 } |