tesspot

annotate sdr/bezier.p.glsl @ 2:178a9e3c3c8c

isolines
author John Tsiombikas <nuclear@member.fsf.org>
date Mon, 03 Dec 2012 07:30:39 +0200
parents 72b7f9f2eead
children
rev   line source
nuclear@0 1 #version 410 compatibility
nuclear@0 2
nuclear@2 3 uniform int tess_level;
nuclear@2 4
nuclear@0 5 in vec3 normal;
nuclear@0 6 in vec3 vpos;
nuclear@2 7 in vec2 uv;
nuclear@2 8
nuclear@0 9
nuclear@0 10 void main()
nuclear@0 11 {
nuclear@0 12 vec3 ldir = gl_LightSource[0].position.xyz - vpos;
nuclear@0 13
nuclear@0 14 vec3 n = normalize(normal);
nuclear@0 15 vec3 v = -normalize(vpos);
nuclear@0 16 vec3 l = normalize(ldir);
nuclear@0 17 vec3 h = normalize(l + v);
nuclear@0 18
nuclear@0 19 float ndotl = max(dot(n, l), 0.0);
nuclear@0 20 float ndoth = max(dot(n, h), 0.0);
nuclear@0 21
nuclear@2 22 vec3 ka = gl_FrontMaterial.ambient.xyz;
nuclear@0 23 vec3 kd = gl_FrontMaterial.diffuse.xyz;
nuclear@0 24 vec3 ks = gl_FrontMaterial.specular.xyz;
nuclear@0 25 float shin = gl_FrontMaterial.shininess;
nuclear@0 26
nuclear@0 27 vec3 diffuse = kd * ndotl * gl_LightSource[0].diffuse.xyz;
nuclear@0 28 vec3 specular = ks * pow(ndoth, shin) * gl_LightSource[0].specular.xyz;
nuclear@2 29 vec3 ambient = ka * gl_LightModel.ambient.xyz;
nuclear@2 30 vec3 color = ambient + diffuse + specular;
nuclear@0 31
nuclear@2 32 vec2 tess_uv = mod(uv * float(tess_level), 1.0);
nuclear@2 33
nuclear@2 34 #define STEPSZ 0.1
nuclear@2 35 float wire = smoothstep(0.0, STEPSZ, tess_uv.x) * smoothstep(1.0, 1.0 - STEPSZ, tess_uv.x);
nuclear@2 36 wire *= smoothstep(0.0, STEPSZ, tess_uv.y) * smoothstep(1.0, 1.0 - STEPSZ, tess_uv.y);
nuclear@2 37
nuclear@2 38 gl_FragColor = vec4(mix(vec3(0.0, 0.0, 0.0), color, wire), gl_FrontMaterial.diffuse.w);
nuclear@0 39 }