DirectX11程式設計12 紅龍書第九章練習
阿新 • • 發佈:2018-12-19
環境:VS2017 語言:C++
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變數的設定。