我有一个文本类,以彩色字体显示数字。当我不使用着色器时,根据设计,某些文本将显示为浅绿色,而其他文本将显示为白色。使用着色器时,所有文本均为白色。我很确定这是因为在shader.frag中我将rgb设为vec4(1.0,1.0,1.0,opacity); 但是,我不知道如何在某些类型的文本中更改这些值,而在其他类型的文本中如何更改这些值。我要做的是保持文本的原始颜色,并逐渐降低不透明度。如何修改此代码以执行此操作?这是我的代码,包含此实现:
shader.question:
uniform sampler2D texture;
uniform float opacity;
void main()
{
vec4 pixel = texture2D(texture, gl_TexCoord[0].xy);
gl_FragColor = pixel * vec4(1.0, 1.0, 1.0, opacity);
}
///////////////////////////////////////////////////////////////
shader.vert:
void main()
{
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
gl_FrontColor = gl_Color;
}
///////////////////////////////////////////////////// /////////////////
着色器在主要功能中的应用:
sf::Shader shader;
if (!shader.loadFromFile("shader.vert", "shader.frag"))
return EXIT_FAILURE;
float opacity = 1.0; //transparency of shader
shader.setParameter("texture", sf::Shader::CurrentTexture); //shader.vert
shader.setParameter("opacity", opacity); //shader.frag
////////////////////////////
/////////////////////////////
/////////////////////////////
//删除文字显示
counter1 = 0;
for (iter8 = textDisplayArray.begin(); iter8 != textDisplayArray.end();
iter8++)
{
if (textDisplayArray[counter1].destroy == true)
{
//shader
opacity -= 0.1;
if (opacity <= 0)
{
textDisplayArray.erase(iter8);
opacity = 1;
}
shader.setParameter("opacity", opacity);
}
您可以简单地gl_Color
在片段着色器中使用:
shader.question:
uniform sampler2D texture;
uniform float opacity;
void main()
{
vec4 pixel = texture2D(texture, gl_TexCoord[0].xy);
gl_FragColor = pixel * vec4( gl_Color.rgb, opacity );
// ^ ^^^ RGB-color passed by vertex shader
}
shader.vert:
void main()
{
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
gl_FrontColor = gl_Color;
gl_BackColor = gl_Color;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句