1#version 150 2in vec4 color; 3in vec4 fP; 4in vec3 fN; 5in float dist[6]; 6uniform vec4 front_color; 7uniform vec4 back_color; 8uniform vec4 light_pos; 9uniform vec4 light_diff; 10uniform vec4 light_spec; 11uniform vec4 light_amb; 12uniform float spec_power; 13uniform int is_two_side; 14uniform bool is_selected; 15uniform bool is_clipbox_on; 16uniform float near; 17uniform float far; 18uniform float width; 19uniform float height; 20uniform bool comparing; 21uniform bool writing; 22uniform bool back_front_shading; 23uniform sampler2D sampler; 24uniform float alpha; 25out vec4 out_color; 26 27float depth(float z) 28{ 29 return (2 * near) / (far + near - z * (far - near)); 30} 31 32void main(void) { 33 34 if(is_clipbox_on) 35 if(dist[0]>0.0 || 36 dist[1]>0.0 || 37 dist[2]>0.0 || 38 dist[3]>0.0 || 39 dist[4]>0.0 || 40 dist[5]>0.0) 41 discard; 42 43 float d = depth(gl_FragCoord.z); 44 float test = texture(sampler, vec2(gl_FragCoord.x/width, gl_FragCoord.y/height)).r; 45 if(comparing && d <= test) 46 discard; 47 if(writing) 48 out_color = vec4(d,d,d,1.0); 49 else 50 { 51 vec3 L = light_pos.xyz - fP.xyz; 52 vec3 V = -fP.xyz; 53 vec3 N; 54 vec4 my_color = vec4(color.xyz, 1.0); 55 if(fN == vec3(0.0,0.0,0.0)) 56 { 57 out_color = my_color; 58 return; 59 } 60 else 61 N = normalize(fN); 62 L = normalize(L); 63 V = normalize(V); 64 vec3 R = reflect(-L, N); 65 vec4 diffuse; 66 float dot_prod = dot(N,L); 67 68 if(back_front_shading) 69 { 70 if (dot_prod > 0) 71 my_color = front_color; 72 else 73 my_color = back_color; 74 } 75 else 76 { 77 my_color = vec4(color.xyz, 1.0); 78 } 79 if(is_two_side == 1) 80 diffuse = abs(dot_prod) * light_diff * color; 81 else 82 diffuse = max(dot_prod, 0.0) * light_diff * my_color; 83 84 vec4 specular = pow(max(dot(R,V), 0.0), spec_power) * light_spec; 85 vec4 ret_color = vec4((my_color*light_amb).xyz + diffuse.xyz + specular.xyz,1); 86 if(is_selected) 87 out_color = vec4(ret_color.r+35.0/255.0, ret_color.g+35.0/255.0, ret_color.b+35.0/255.0, alpha); 88 else 89 out_color = vec4(ret_color.xyz, alpha); 90 } 91} 92