關於如何獲取深度buffer的問題,網上好多介紹使用d3dfmt_d16_lockable的方法建立深度texture,然後lock之,但是由於好多n卡不支援d3dfmt_d16_lockable,造成該方法無法使用。本文給出一種方法,通過在shader中直接計算深度資訊,輸出到普通的texture上,然後就可以對該texture進行lock之類的操作。為了簡單起見,該方法直接將深度資訊寫到backbuffer的alaph通道中,實際使用時可以建立乙個通用的rt來實現。下面是對應的vs和ps:
float4x4 viewprojmatrix;
float4 blue = ;
struct vs_input
;struct vs_output
;vs_output main(vs_input input)
float4 ps_main(
float4 inposition: texcoord0,
float4 indiffuse: texcoord1
) : color0
此處在vs中將position點傳到ps中而不是在vs中直接賦值,是為了能夠更好的得到z-buffer插值的正確性。
下圖兩幅圖是物體距離攝像機不同位置時的alpha通道的顯示效果,可以看出圖一距離攝像機更遠。可以通過在photoshope中檢視其灰度值發現圖一的灰度值比圖二的大。
圖一圖二
DIRECTX9實現卡馬克卷軸
前面寫了點directx入門的東西 最近發現sdk才是最好的啊 所以以後就不寫那麼無聊的東西了。關於卡馬克卷軸網上有很多,主要是用來提高繪製2d地圖的效率,但是用directx實現的我缺找到 所以自己就試試了。發現原來如此簡單 1.在設定swapbuffereffect時一定要設定成swapeffe...
DirectX 9 中的Primitive型別
d3dpt pointlist 1.把指定的座標看作是乙個個單獨的點,所以畫上去的圖形也就是乙個個點,並不會對點之間的空白進行插值 d3dpt linelist 2.根據頂點的順序,把每兩個點畫成一條線段,所以在顯示器上看上去就是幾條線段 d3dpt linestrip 3.和d3dpt linel...
Directx11教程39 紋理對映 9
在mytutoriald3d11 32中,我們在planemodelclass中增加乙個紋理textureclass m texture 讀入乙個grass的紋理,程式執行後的效果如下 完整的 請參考 工程檔案mytutoriald3d11 32 在mytutoriald3d11 33中,我們移去了...