(一)、习题答案
1、EXERCISE1
本习题主要是对融合方式的学习,如设置如下则结果是将源像素与目标像素相乘:
transparencyBlendDesc.SrcBlend = D3D12_BLEND_ZERO;
transparencyBlendDesc.DestBlend = D3D12_BLEND_SRC_COLOR;
transparencyBlendDesc.BlendOp = D3D12_BLEND_OP_ADD;
transparencyBlendDesc.SrcBlendAlpha = D3D12_BLEND_ONE;
transparencyBlendDesc.DestBlendAlpha = D3D12_BLEND_ZERO;
设置如下则结果是将源像素与目标像素相加:
transparencyBlendDesc.SrcBlend = D3D12_BLEND_ONE;
transparencyBlendDesc.DestBlend = D3D12_BLEND_ONE;
transparencyBlendDesc.BlendOp = D3D12_BLEND_OP_ADD;
transparencyBlendDesc.SrcBlendAlpha = D3D12_BLEND_ONE;
transparencyBlendDesc.DestBlendAlpha = D3D12_BLEND_ZERO;
transparencyBlendDesc.BlendOpAlpha = D3D12_BLEND_OP_ADD;
得到的效果如下:
2、EXERCISE2
先上本习题的结果图:
从上图看出,水面没有了透明效果,原因是,当渲染水体时,这时目标像素的值为0,我们又使用的加法运算,得到的结果就是目标像素不会对结果产生影响。另外由于我们开启了尝试测试,这时水体后面的物体不会写入到缓冲区,就得到了上图所示的结果。
5、EXERCISE5
本习题我们只要设置RenderTargetWriteMask就可以了,如下(只开启blue和alpha通道):
transparencyBlendDesc.RenderTargetWriteMask = ( D3D12_COLOR_WRITE_ENABLE_BLUE | D3D12_COLOR_WRITE_ENABLE_ALPHA);
本题说明,我们可以控制任意通道及其组合的写入。效果如下: