nuclear@0: #version 410 compatibility nuclear@0: nuclear@2: uniform int tess_level; nuclear@2: nuclear@0: in vec3 normal; nuclear@0: in vec3 vpos; nuclear@2: in vec2 uv; nuclear@2: nuclear@0: nuclear@0: void main() nuclear@0: { nuclear@0: vec3 ldir = gl_LightSource[0].position.xyz - vpos; nuclear@0: nuclear@0: vec3 n = normalize(normal); nuclear@0: vec3 v = -normalize(vpos); nuclear@0: vec3 l = normalize(ldir); nuclear@0: vec3 h = normalize(l + v); nuclear@0: nuclear@0: float ndotl = max(dot(n, l), 0.0); nuclear@0: float ndoth = max(dot(n, h), 0.0); nuclear@0: nuclear@2: vec3 ka = gl_FrontMaterial.ambient.xyz; nuclear@0: vec3 kd = gl_FrontMaterial.diffuse.xyz; nuclear@0: vec3 ks = gl_FrontMaterial.specular.xyz; nuclear@0: float shin = gl_FrontMaterial.shininess; nuclear@0: nuclear@0: vec3 diffuse = kd * ndotl * gl_LightSource[0].diffuse.xyz; nuclear@0: vec3 specular = ks * pow(ndoth, shin) * gl_LightSource[0].specular.xyz; nuclear@2: vec3 ambient = ka * gl_LightModel.ambient.xyz; nuclear@2: vec3 color = ambient + diffuse + specular; nuclear@0: nuclear@2: vec2 tess_uv = mod(uv * float(tess_level), 1.0); nuclear@2: nuclear@2: #define STEPSZ 0.1 nuclear@2: float wire = smoothstep(0.0, STEPSZ, tess_uv.x) * smoothstep(1.0, 1.0 - STEPSZ, tess_uv.x); nuclear@2: wire *= smoothstep(0.0, STEPSZ, tess_uv.y) * smoothstep(1.0, 1.0 - STEPSZ, tess_uv.y); nuclear@2: nuclear@2: gl_FragColor = vec4(mix(vec3(0.0, 0.0, 0.0), color, wire), gl_FrontMaterial.diffuse.w); nuclear@0: }