D3D中透明渲染的總結

2021-04-07 09:14:08 字數 1348 閱讀 1812

1.渲染的先決條件

開啟alpha渲染

m_pd3ddevice->setrenderstate(d3drs_alphablendenable, true);

對於通過程式頂點構造的多邊形渲染時必須開啟alpha通道

m_pd3ddevice->settexturestagestate(0, d3dtss_alphaop, d3dtop_modulate);

設定為普通alpha混合

m_pd3ddevice->setrenderstate(d3drs_srcblend, d3dblend_srcalpha);

m_pd3ddevice->setrenderstate(d3drs_destblend, d3dblend_invsrcalpha); 

2.mesh透明渲染時

修改材質的diffuse的alpha值

d3dmaterial9* mat

mat.diffuse.a=...;

開燈渲染

m_pd3ddevice->setrenderstate(d3drs_lighting,true);

3.頂點多邊形透明渲染

修改vb所指向的tlf頂點格式的color(自己定義的)

struct tlv

* pvertices;

m_pvb->lock(0, m_dwvertexcount*sizeof(tlv), (void * *) &pvertices, 0);

for( dword i=0;i< m_dwvertexcount; i++)

m_pvb->unlock();

頂點多邊形透明渲染必須關燈渲染

m_pd3ddevice->setrenderstate(d3drs_lighting,false);

4.調節渲染次序

從半透明混合的原理知道,首先需要乙個基礎顏色,然後和另乙個顏色進行混合。而在有時將3d物體渲染次序和在3d空間裡的位置搞錯時,就會發現透明物體後面的物體會消失的情況。這就需要對透明物體進行排序。

排序所基於的原則是:

遠的物體先畫,近的物體後畫。

先畫不透明體,再畫透明物體。

這裡遠的物體指的是離攝像機遠的物體,這裡只簡單介紹得到物體遠近的方法

構造8個視錐平面的頂點

通過projection矩陣對映到世界矩陣

從頂點構造出視錐體的xy平面(靠攝像機最近的xy平面)

將物體的xyz代入下式即可得出距離視錐平面的遠近了

d3dxplane plane;

plane.a*x+plane.b*y+plane.c*z+plane.d

結果為正時表示在攝像機前方,反之在後方

具體視錐面操作可以參考dxsdk裡的culling例子

D3D中的渲染

虛擬世界中渲染幾何體一般來說有三種途徑 自定義座標渲染 d3dx內建模型渲染和外部模型資料渲染。第一步 定義頂點資料結構體 d3d提供了自定義頂點結構的機制,通過自定乙個結構體,來儲存我們所希望具有的頂點資料,例如 stuct colorvertex 頂點結構體定義好之後,需要用靈活頂點格式標記的組...

D3D中的渲染到紋理

渲染到紋理是d3d中的一項高階技術。一方面,它很簡單,另一方面它很強大並能產生很多特殊效果。比如說發光效果,環境對映,陰影對映,都可以通過它來實現。渲染到紋理只是渲染到表面的乙個延伸。我們只需再加些東西就可以了。首先,我們要創造乙個紋理,並且做好一些防範措施。第二步我們就可以把適當的場景渲染到我們建...

D3D渲染效能測試

測試條件 一張 nvidia 1030顯示卡 1個顯示器 30fps,4k 渲染1個4k畫面 gpu 60 fps 45 渲染2個4k畫面 gpu 50 fps 30 渲染3個4k畫面 gpu 57 fps 30 渲染4個4k畫面 gpu 62 fps 30 測試條件 一張 nvidia 1030顯...