2016-02-10 54 views
1

我有一個顯示彩色字體數字的文本類。當我不使用我的着色器時,某些文本顯示爲淡綠色,其他文本顯示爲白色。當我使用着色器時,所有文本都是白色的。我很確定這是因爲在shader.frag我有rgb作爲vec4(1.0,1.0,1.0,不透明度); 但是,我不知道如何將這些值更改爲某些類型的文本,而不是爲其他人更改。我想要做的是保持原文的顏色,並慢慢減少不透明度。這個代碼如何修改來做到這一點? 下面是一個包含執行這個我的代碼:如何在不改變原始顏色的情況下使用着色器

shader.frag:

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

    } 
+0

我們無法改變你的崗位上正確地格式化你的代碼。您必須使用Markdown正確地格式化您的代碼。或者失敗了,選擇它並按下「代碼」工具欄按鈕。 –

+0

修好了,有什麼想法? – agtv

+0

作品完美,thx – agtv

回答

1

你可以簡單地在你的片段着色器使用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; 
} 
相關問題