gpt4 book ai didi

c++ - 如何在不改变原始颜色的情况下使用着色器

转载 作者:行者123 更新时间:2023-11-30 05:32:01 25 4
gpt4 key购买 nike

我有一个以彩色字体显示数字的文本类。当我不使用我的着色器时,一些文本显示为浅绿色,而其他文本显示为白色,这是设计使然。当我使用着色器时,所有文本都是白色的。我很确定这是因为在 shader.frag 中我有 rgb 作为 vec4(1.0, 1.0, 1.0, opacity);但是,我不知道如何针对某些类型的文本更改这些值,而对其他类型的文本不更改。我想做的是保持文本的原始颜色,并慢慢降低不透明度。如何修改此代码以执行此操作?这是我的代码,其中包含此实现:

着色器片段:

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;

}

////////////////////////////////////////////////////////////////

shader在main函数中的应用:

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.frag:

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;
}

关于c++ - 如何在不改变原始颜色的情况下使用着色器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35306376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com