Все что я нахожу в нете делает текстуру полупрозрачной, а мне нужно чтоб один цвет был прозрачный!!!! Как это делается, вот как пытаюсь я!
Вот заполняю структуру
- Код: Выделить всё
D3D11_RENDER_TARGET_BLEND_DESC rtbd;
ZeroMemory( &rtbd, sizeof(rtbd) );
rtbd.BlendEnable = true;
rtbd.SrcBlend = D3D11_BLEND_SRC_COLOR ;
rtbd.DestBlend = D3D11_BLEND_BLEND_FACTOR;
rtbd.BlendOp = D3D11_BLEND_OP_ADD;
rtbd.SrcBlendAlpha = D3D11_BLEND_ZERO;
rtbd.DestBlendAlpha = D3D11_BLEND_ONE ;
rtbd.BlendOpAlpha = D3D11_BLEND_OP_ADD;
rtbd.RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL;
D3D11_BLEND_DESC blendDesc;
ZeroMemory( &blendDesc, sizeof(blendDesc) );
blendDesc.AlphaToCoverageEnable = false;
blendDesc.RenderTarget[0] = rtbd;
device->CreateBlendState( &blendDesc, &alphaBS);
Вот включаю альфа смешивание и выключаю
- Код: Выделить всё
float blendFactor[4] = { 1.0f, 1.0f, 1.0f, 1.0f };
_DeviceContext->OMSetBlendState( alphaBS, blendFactor, 0xFFFFFFFF );
// тут рендерю
// выключаю
_DeviceContext->OMSetBlendState(0, 0, 0xffffffff);
Но как мне сделать чтоб например белый цвет был прозрачный?
Вот шейдер.....
- Код: Выделить всё
cbuffer cbChangesPerFrame : register( b0 )
{
matrix MatWorld;
matrix MatProjection;
};
struct VS_Input
{
float4 pos : POSITION;
float4 color : COLOR0;
float2 tex0 : TEXCOORD0;
};
struct PS_Input
{
float4 pos : SV_POSITION;
float4 color : COLOR0;
float2 tex0 : TEXCOORD0;
};
PS_Input VS( VS_Input vertex )
{
PS_Input vsOut = ( PS_Input )0;
matrix worldProjection = mul(transpose(MatWorld),transpose(MatProjection));
vsOut.pos = mul( vertex.pos, worldProjection );
vsOut.color = vertex.color;
vsOut.tex0 = vertex.tex0;
return vsOut;
}
Texture2D colorMap_ : register( t0 );
SamplerState SpriteTextureSampler
{
Filter = MIN_MAG_MIP_LINEAR;
AddressU = Wrap;
AddressV = Wrap;
};
//SamplerState colorSampler_ : register( s0 );
float4 PS( PS_Input frag ) : SV_TARGET
{
return colorMap_.Sample( SpriteTextureSampler, frag.tex0 );
}