如何在不更改原始颜色的情况下使用着色器

卫星电视

我有一个文本类,以彩色字体显示数字。当我不使用着色器时,根据设计,某些文本将显示为浅绿色,而其他文本将显示为白色。使用着色器时,所有文本均为白色。我很确定这是因为在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);

    }
拉比德76

您可以简单地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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在不更改数据的情况下将 3D VkImage 传递给计算着色器?

金属:如何在不进行颜色/伽玛转换的情况下将图像附加到着色器?

着色器:如何在不生成几何图形的情况下绘制3D点顶点?

如何在没有着色器的情况下将glDrawArrays与纹理数组一起使用

如何在不更改原始tm结构的情况下使用mktime()?

如何在不单击按钮的情况下使用颜色选择器更改背景颜色?

如何使用着色器裁剪WebcamTexture?

如何使用着色器添加色带

如何使用着色器平滑图元的边缘?

如何在ThreeJS中更改着色器颜色

如何在不更改原始数据库的情况下使用 SQL 更改已加载表的列名?

如何在不更改框阴影颜色的情况下更改 svg 颜色

如何在不更改标准滑块形状的情况下重新着色Qslider手柄?

如何在不更改R中图例颜色的情况下使用几种符号,颜色和填写ggmap?

有效调用着色器颜色

如何在不更改javafx边框的情况下更改TextField的背景颜色?

如何在不更改 python matplotlib 中的热图的情况下更改颜色条的值?

如何在不更改recyclerView主体的情况下更改View Drawable的背景颜色?

Python-如何在不更改原始值的情况下从类返回值

如何在不更改C ++中原始列表的情况下反向链接列表

如何在不更改其值的情况下修改原始DateTime对象?

如何在不更改原始数组的情况下对数组进行排序?

如何在不更改原始的情况下修改/更新numpy中的数组

如何在不更改主数组原始顺序的情况下通过BOOL快速排序?

如何在不更改原始代码的情况下编写以下代码?

如何在不更改颜色的情况下禁用Vuetify按钮

如何在不绘制我自己的情况下更改UIPopoverPresentationController的箭头颜色

如何在不覆盖填充组的情况下更改箱线图点颜色

如何在不导入其他模块的情况下更改python中文本的颜色?