第 3 课:Barycentric coordinates
实现
uniform vec2 iResolution;
const float c_Epsilon = 0.001;
void main() {
vec3 P = vec3(gl_FragCoord.xy / iResolution, 1.0);
vec3 P0 = vec3(0.25, 0.25, 1.0);
vec3 P1 = vec3(0.50, 0.75, 1.0);
vec3 P2 = vec3(0.75, 0.25, 1.0);
mat3 m = mat3(P0, P1, P2);
vec3 w = inverse(m) * P;
float w_sum = w.x + w.y + w.z;
vec3 color = vec3(1.0, 0.0, 0.0);
// ?
color *= (1.0 - step(1.0 + c_Epsilon, w_sum)) * step(c_Epsilon, w_sum);
color *= step(0.0, w.x);
color *= step(0.0, w.y);
color *= step(0.0, w.z);
gl_FragColor = vec4(color, 1.0);
}