8.5alpha混合

 

先上图

 

8.5alpha混合

1,初始化时,创建混合状态

    D3D10_BLEND_DESC blendDesc = { 0 };
    blendDesc.AlphaToCoverageEnable = false;
    blendDesc.BlendEnable[0] = true;
    blendDesc.SrcBlend = D3D10_BLEND_SRC_ALPHA;
    blendDesc.DestBlend = D3D10_BLEND_INV_SRC_ALPHA;
    blendDesc.BlendOp = D3D10_BLEND_OP_ADD;
    blendDesc.SrcBlendAlpha = D3D10_BLEND_ONE;
    blendDesc.DestBlendAlpha = D3D10_BLEND_ZERO;
    blendDesc.BlendOpAlpha = D3D10_BLEND_OP_ADD;
    blendDesc.RenderTargetWriteMask[0] = D3D10_COLOR_WRITE_ENABLE_ALL;

    md3dDevice->CreateBlendState(&blendDesc, &mTransparentBS);
2,渲染时绑定到管线


        mWVP = mWavesWorld * mView * mProj;
        mfxWVPVar->SetMatrix((float*)&mWVP);
        mfxWorldVar->SetMatrix((float*)&mWaves);
        mfxTexMtxVar->SetMatrix((float*)&waterTexMtx);
        mfxDiffuseMapVar->SetResource(mWaterMapRV);
        mfxSpecMapVar->SetResource(mDefaultSpecMapRV);

        pass->Apply(0);
        md3dDevice->OMSetBlendState(mTransparentBS, blendFactors, 0xffffffff);
        mWaves.draw();

 

 

3,在shader中,进行alpha混合,(这里指rgb的混合,不包含alpha值的混合)

ps..


    float alpha = gDiffuseMap.Sample(gTriLinearSam, pIn.texC0 ).a;
    clip(alpha - 0.25f);

 

....


    return float4(litColor, alpha);