跳到主要内容
← Noise

Noise

Bilinear Filtering

这题出的很糟糕,只能skip了

实时渲染 · 2D 片段 GLSL

第 5 课:Bilinear Filtering

实现:这题出的很糟糕,只能skip了

实现

uniform vec2 iResolution;

vec3 points[4];

void main() {
  vec2 uv = gl_FragCoord.xy / iResolution.xy;

  points[0] = vec3(1.0, 1.0, 0.0);
  points[1] = vec3(1.0, 0.0, 0.0);
  points[2] = vec3(0.0, 1.0, 0.0);
  points[3] = vec3(0.0, 0.0, 1.0);

  ivec2 uv_i = ivec2(max(vec2(0.0), uv * 2.0 - 0.5));
  vec2 uv_f = fract(max(vec2(0.0), uv * 2.0 - 0.5));

  ivec2 p1 = min(ivec2(1, 1), uv_i + ivec2(0, 0));
  ivec2 p2 = min(ivec2(1, 1), uv_i + ivec2(1, 0));
  ivec2 p3 = min(ivec2(1, 1), uv_i + ivec2(0, 1));
  ivec2 p4 = min(ivec2(1, 1), uv_i + ivec2(1, 1));

  int index1 = p1.x + p1.y * 2;
  int index2 = p2.x + p2.y * 2;
  int index3 = p3.x + p3.y * 2;
  int index4 = p4.x + p4.y * 2;

  vec3 s1 = mix(points[index1], points[index2], uv_f.x);
  vec3 s2 = mix(points[index3], points[index4], uv_f.x);
  vec3 color = mix(s1, s2, uv_f.y);

  gl_FragColor = vec4(color, 1.0);
}

复盘笔记

  • 这题出的很糟糕,只能skip了