第 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了