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);