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 }
|