你将学习如何使用 GLSL 中的 distance()
与 step()
函数,在片元着色器中绘制一个以画布中心为圆心的圆形遮罩区域,并通过颜色混合渲染出效果。
这类技术广泛用于图形构建、UI 遮罩、特效动画等场景。
---
distance(a, b)
:计算两点之间的距离在 UV 空间中,我们可以通过以下方式计算当前像素(vUv)与中心点之间的距离:
`
glsl
vec2 center = vec2(0.5, 0.5);
float dist = distance(vUv, center);
`
结果 dist
是当前片元离中心点有多远。
---
step(edge, x)
:构建图形边界的二值函数step
是一种判断型函数,它的定义是:
`
glsl
float result = step(edge, x);
`
- 如果 x < edge
,结果为 0;
- 如果 x >= edge
,结果为 1。
---
我们希望构造一个半径为 0.3
的圆形遮罩,只在圆形范围内显示颜色:
`
glsl
float inside = step(dist, 0.3);
`
- 当像素在圆内,dist < 0.3
,返回 1.0
- 在圆外,dist > 0.3
,返回 0.0
遮罩值 inside
现在就可以用来控制颜色混合。
---
mix(a, b, t)
:按遮罩值混合颜色我们根据遮罩值来混合颜色:
`
glsl
vec3 color = mix(vec3(0.0), vec3(1.0, 0.8, 0.2), inside);
`
当 inside = 0
显示黑色背景,当 inside = 1
显示金黄色的圆形。
最终输出:
`
glsl
gl_FragColor = vec4(color, 1.0);
`
就完成了一个清晰、居中的圆形遮罩图形。