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  }