Помогите понять альфа блендинг в DirectX11

Вопросы по языкам программирования Си и С++.
CJ1
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 11.03.2013 (Пн) 9:08

Помогите понять альфа блендинг в DirectX11

Сообщение CJ1 » 11.03.2013 (Пн) 9:12

Вообщем вопрос такой, мне нужно сделать чтоб я загрузил текстуру, и например белый цвет на ней был прозрачный! Как это сделать?
Все что я нахожу в нете делает текстуру полупрозрачной, а мне нужно чтоб один цвет был прозрачный!!!! Как это делается, вот как пытаюсь я!

Вот заполняю структуру
Код: Выделить всё
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 );
}

CJ1
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 11.03.2013 (Пн) 9:08

Re: Помогите понять альфа блендинг в DirectX11

Сообщение CJ1 » 11.03.2013 (Пн) 12:19

Все разобрался


Вернуться в С/С++

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

    TopList