DirectX9獲取深度buffer的方法

2021-06-03 07:42:59 字數 729 閱讀 5623

關於如何獲取深度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中,我們移去了...