Introduction to 3D Game Programming with Directx12 Chapter10

(一)、习题答案

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);
  本题说明,我们可以控制任意通道及其组合的写入。效果如下:

这里写图片描述

(二)、源码下载

本章习题解答源码下载 源码下载

猜你喜欢

转载自blog.csdn.net/yolon3000/article/details/79997283