Jump to content

Шейдерная замена текстур с альфой


Recommended Posts

Здравствуйте, необходимо сделать отрисовку картинок на стёкле автомобиля, при этом картинка не должна быть прозрачной, а стекло должно.

Изначально шейдер выглядел так: 

texture gTexture;

technique TexReplace
{
    pass P0
    {
        Texture[0] = gTexture;
    }
}

Результат был таким:

Spoiler

yEn2bpKYFT8.jpg


После этого я сделал текстуру стекла непрозрачной, и попытался давать ей прозрачность шейдером и также отрисовывать картинки:

float alpha = 0.5;
  
struct PSInput 
{ 
    float4 Diffuse      : COLOR0; 
}; 
  
float4 PixelShaderFunction( PSInput PS ) : COLOR0 
{ 
    float4 color = PS.Diffuse; 
    
    color.a = alpha; 
    
    return color; 
} 
  

texture gTexture;

technique TexReplace
{
    pass P0
    {
        AlphaBlendEnable    = TRUE; 
        DestBlend           = INVSRCALPHA; 
        SrcBlend            = SRCALPHA; 
         
        PixelShader         = compile ps_2_0 PixelShaderFunction(); 

        Texture[0] = gTexture;
    }
}


В результате стекло становилось прозрачным, но картинки вообще не отображались.

 

В HLSL не разбираюсь вообще, и даже далеко нет полного понимания того как работают шейдеры впринципе. Поэтому обращаюсь сюда

Как можно всё-таки отрисовывать картинки на стекле так, чтобы они не были прозрачны? 

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...