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);
}
我們無法改變你的崗位上正確地格式化你的代碼。您必須使用Markdown正確地格式化您的代碼。或者失敗了,選擇它並按下「代碼」工具欄按鈕。 –
修好了,有什麼想法? – agtv
作品完美,thx – agtv