我目前正在使用FreeType进行子像素模式,并将每个像素的最大颜色作为alpha值,使用以下片段着色器:
uniform sampler2D Image;
uniform vec4 Color;
smooth in vec2 vVaryingTexCoord;
out vec4 vFragColor;
void main(void){
vec4 color = texture(Image, vVaryingTexCoord);
vFragColor = color * Color;
}
这适用于深色背景,但在浅色背景下会显示边框像素(例如当一个文本像素是(1,0,0)时)。要使其与更明亮的背景配合使用,我需要传递背景颜色并自己进行混合,这一步骤在移动到更复杂的背景时开始失效。
有没有一种方法可以将FreeType中的RGB值用作实心颜色的alpha值(传递给着色器)?基本上这个公式,其中b =背景像素,t =当前文本像素,c =静态颜色:
b*((1,1,1) - t) + t*c.rgb*c.a
我认为先绘制其他所有内容,然后将该帧缓冲传递给字体着色器会起作用,但这似乎有点过度设计。在OpenGL混合阶段中有没有一种方法可以做到这一点?我尝试了一些glBlendFunc等操作,但没有任何进展。
max
和min
作为 alpha,并在着色器中计算混合。 - Ripi2