DirectX11编程12 红龙书第九章练习

环境:VS2017  语言:C++

 

附上工程的链接:https://github.com/anguangzhihen/Dx11

1.这边的程序都是以win64运行的;

2.如果没有找到Common脚本,请到工程/属性/VC++目录中添加包含目录 “../Common”;

3.如果没有找到libs,请到工程/属性/链接器添加附加库目录“../Common/libs”

4.所有的练习都在工程中,全局搜索“练习9”关键字就能找到,想要运行打开注释即可。

 

有任何错误,请大佬们指正。

 

1.设置混合状态使用的SampleMask为0xfffffffe,查看效果?

答:

DirectX11编程12 红龙书第九章练习

 

我们没有用到多重采样,所以禁止掉第一位bit就是禁止了水颜色的输出。

 

2.实验不同Blend参数组合的效果?

答:

我这边就实现了一下叠加的效果:

// 叠加混合
transparentDesc.RenderTarget[0].SrcBlend = D3D11_BLEND_SRC_ALPHA;
transparentDesc.RenderTarget[0].DestBlend = D3D11_BLEND_ONE;
transparentDesc.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD;

 

DirectX11编程12 红龙书第九章练习

 

3.使水先绘制,查看效果,并解释原因?

答:

DirectX11编程12 红龙书第九章练习

 

很明显,被水遮住的像素点都看不到了。

 

先绘制透明物体,再绘制实体的时候,实体在透明物体后面就不知道该怎么绘制了。这边像素点被遮挡的原因应该是depth测试没有通过。如果通过depth测试的话,水就没了。

 

所以透明物体必须在实体之后绘制。

 

4.fogStart=10、fogRange=200,计算foggedColor?

答:

foggedColor我就不计算了,我就计算出s。

 

dist(p,E)=160,则s=0.75;

dist(p,E)=110,则s=0.5;

dist(p,E)=60,则s=0.25;

dist(p,E)=30,则s=0.1。

 

5.验证使用gAlphaClip=false禁用剪裁?

答:

这边我没有用到Effect框架,所以没有technique技术,这题就看看就好。

 

6.改变Blend Demo,使其在混合时不输出红色和绿色?

答:

transparentDesc.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_BLUE | D3D11_COLOR_WRITE_ENABLE_ALPHA;

 

就是混合描述中的RenderTargetWriteMask变量的设置。