DirectX11编程12 红龙书第九章练习
环境:VS2017 语言:C++
附上工程的链接:https://github.com/anguangzhihen/Dx11。
1.这边的程序都是以win64运行的;
2.如果没有找到Common脚本,请到工程/属性/VC++目录中添加包含目录 “../Common”;
3.如果没有找到libs,请到工程/属性/链接器添加附加库目录“../Common/libs”
4.所有的练习都在工程中,全局搜索“练习9”关键字就能找到,想要运行打开注释即可。
有任何错误,请大佬们指正。
1.设置混合状态使用的SampleMask为0xfffffffe,查看效果?
答:
我们没有用到多重采样,所以禁止掉第一位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;
3.使水先绘制,查看效果,并解释原因?
答:
很明显,被水遮住的像素点都看不到了。
先绘制透明物体,再绘制实体的时候,实体在透明物体后面就不知道该怎么绘制了。这边像素点被遮挡的原因应该是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变量的设置。