跳到主要内容
← Ray Tracing

Ray Tracing

Barycentric coordinates

shader-learning 自学第 3 课:Barycentric coordinates

实时渲染 · 2D 片段 GLSL

第 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);
}