根据定义字体图像的方式,红色的量决定要使用多少轮廓颜色,绿色的量决定要使用多少内部颜色。因此,在对纹理进行采样后,您可以简单地计算轮廓颜色和内部颜色的加权平均值,其中r
采样纹理的权重是轮廓颜色的权重,以及g
是内部颜色的重量。
着色器中的计算可以进一步简化,因为您的轮廓颜色是固定的白色。所以r
乘以轮廓颜色只是一个向量r
对于它的所有组件:
r * vec4(1.0, 1.0, 1.0, 1.0) = vec4(r, r, r, r) = vec4(r)
使用v_color
随着内部颜色的变化,片段着色器将如下所示:
varying vec4 v_color;
varying vec2 v_texCoords;
uniform sampler2D u_texture;
void main()
{
vec4 texVal = texture2D(u_texture, v_texCoords);
gl_FragColor = texVal.g * v_color + texVal.r;
}
这将起作用,如果r
and g
对于字母之外的部分,纹理的分量为零。如果外面不是黑色的,而是a
纹理的分量用于将它们屏蔽掉,表达式变得稍微复杂一些:
void main()
{
vec4 texVal = texture2D(u_texture, v_texCoords);
gl_FragColor = vec4(texVal.g * v_color.rgb + texVal.r, texVal.a);
}