文本和着色器

Text and shaders

我想使用 SFML 2.4 在屏幕上绘制文本并使用片段着色器对其应用效果。但是当我尝试时,文本是用方块而不是字符绘制的

片段着色器:

void main() { gl_FragColor= vec4(1,0,0,1); }

SFML 文本代码:

sf::Text t;
t.setFont(myFont);
t.setCharacterSize(10);
t.setColor(sf::Color::White);
t.setString("this is a test");

//myWindow.draw(t); // This displays a white "this is a test"
//myWindow.draw(t, myShader); // This displays red squares instead of characters

我希望我的着色器以红色显示该文本。但相反,我得到了红色方块。每个正方形都是应该存在的字符边界框的大小。 我在这里遗漏了一些明显的东西吗?或者 sf::Text 只是不打算那样使用?

您的着色器正在将整个片段设置为红色,从而为文本着色。

尝试乘以片段的颜色而不是设置它,像这样:

void main() { gl_FragColor *= vec4(1,0,0,1); }

我不熟悉 SFML 文本渲染的工作原理,但我高度怀疑它将文本放入纹理中。在这种情况下,您的片段着色器必须对纹理进行采样以确定给定片段的颜色。只需将片段颜色设置为红色即可:将每个渲染片段设置为红色。试试这个:

uniform sampler2D texture;

void main() {
    gl_FragColor = texture2D(texture, gl_TexCoord[0].st) * vec4(1,0,0,1);    
}

这将在从顶点着色器传入的纹理坐标处对当前绑定的纹理进行采样,并将其染成红色。