Fill
Stroke
Vertex shader:
attribute vec3 pos; attribute vec3 color; attribute vec3 normal; uniform mat4 model; uniform mat4 view; uniform mat4 proj; // Interpolated position and color for fragment shading. varying vec3 ipos; varying vec3 icolor; varying vec3 inormal; void main(void) { ipos = pos; icolor = color; inormal = normal; gl_Position = proj * view * model * vec4(pos, 1.0); }
Fragment shader:
varying mediump vec3 ipos; varying mediump vec3 icolor; varying mediump vec3 inormal; uniform mediump mat4 invrot; void main(void) { mediump vec4 rvec = invrot * vec4(0, 0, 1, 1); mediump float f = mix(0.2, 1.0, max(0.0, dot(rvec.xyz, inormal))); gl_FragColor = vec4(icolor * f, 1.0); }
Abstraction vertex shader:
attribute vec3 pos; attribute vec3 color; attribute vec3 normal; uniform mat4 model; uniform mediump mat4 view; uniform mat4 proj; // Interpolated position and color for fragment shading. varying vec3 ipos; varying vec3 icolor; varying vec3 inormal; void main(void) { ipos = pos; icolor = color; inormal = normal; gl_Position = proj * view * model * vec4(pos, 1.0); }
Abstraction fragment shader:
varying mediump vec3 ipos; varying mediump vec3 icolor; varying mediump vec3 inormal; uniform mediump mat4 invrot; void main(void) { mediump vec4 rvec = invrot * vec4(0, 0, 1, 1); mediump float f = abs(dot(rvec.xyz, inormal)); gl_FragColor = vec4(icolor * f, 0.2); }