glviewvol
diff sdr/fast.p.glsl @ 9:931a6b35f1cd
added lighting and openmp normal calculation
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Tue, 30 Dec 2014 21:20:57 +0200 |
parents | fb6d93471352 |
children | 89efc666105c |
line diff
1.1 --- a/sdr/fast.p.glsl Tue Dec 30 20:03:32 2014 +0200 1.2 +++ b/sdr/fast.p.glsl Tue Dec 30 21:20:57 2014 +0200 1.3 @@ -1,6 +1,21 @@ 1.4 uniform sampler3D vol_tex; 1.5 uniform sampler1D xfer_tex; 1.6 1.7 +const vec3 light_dir[3] = { 1.8 + vec3(0.5, 0.5, 1.0), 1.9 + vec3(-1.0, 0.2, 0.5), 1.10 + vec3(-0.2, 0.0, -7.0) 1.11 +}; 1.12 +const vec3 light_color[3] = { 1.13 + vec3(0.9, 0.7, 0.68), 1.14 + vec3(0.5, 0.6, 0.9), 1.15 + vec3(0.3, 0.3, 0.3) 1.16 +}; 1.17 + 1.18 +const vec3 ambient = vec3(0.1, 0.1, 0.1); 1.19 +const vec3 vdir = vec3(0.0, 0.0, 1.0); 1.20 +const float dimmer = 0.7; 1.21 + 1.22 void main() 1.23 { 1.24 vec3 tc = gl_TexCoord[0].xyz; 1.25 @@ -14,6 +29,22 @@ 1.26 float alpha = color.a * border; 1.27 if(alpha < 0.001) discard; 1.28 1.29 - gl_FragColor.rgb = voxel.rgb; 1.30 + vec3 norm = normalize(voxel.rgb * 2.0 - 1.0); 1.31 + 1.32 + vec3 diffuse = vec3(0.0, 0.0, 0.0); 1.33 + vec3 specular = vec3(0.0, 0.0, 0.0); 1.34 + 1.35 + for(int i=0; i<3; i++) { 1.36 + vec3 ldir = normalize(light_dir[i]); 1.37 + vec3 hdir = normalize(vdir + ldir); 1.38 + 1.39 + float ndotl = max(dot(norm, ldir), 0.0); 1.40 + float ndoth = max(dot(norm, hdir), 0.0); 1.41 + 1.42 + diffuse += light_color[i] * color.rgb * ndotl; 1.43 + specular += light_color[i] * vec3(0.6, 0.6, 0.6) * pow(ndoth, 50.0); 1.44 + } 1.45 + 1.46 + gl_FragColor.rgb = ambient + (diffuse + specular) * dimmer; 1.47 gl_FragColor.a = alpha; 1.48 }