1. 程式人生 > >DirectX11程式設計12 紅龍書第九章練習

DirectX11程式設計12 紅龍書第九章練習

環境: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變數的設定。