渲染到紋理是d3d中的一項高階技術。一方面,它很簡單,另一方面它很強大並能產生很多特殊效果。 比如說發光效果,環境對映,陰影對映,都可以通過它來實現。渲染到紋理只是渲染到表面的乙個延伸。我們只需再加些東西就可以了。首先,我們要創造乙個紋理,並且做好一些防範措施。第二步我們就可以把適當的場景渲染到我們建立的紋理上了。然後,我們把這個紋理用在最後的渲染上。
?main.cpp
首先我們得宣告所需要的物件。當然我們需要一張用來渲染的紋理。此外,我們還需要兩個su***ce物件。乙個是用來儲存後台緩衝區,乙個用來當紋理的渲染物件。後面我再詳細介紹它們。另外我們還需要兩個矩陣,乙個是用來當紋理的投影矩陣,另乙個是儲存原來的矩陣。
lpdirect3dtexture9 prendertexture = null;
lpdirect3dsu***ce9 prendersu***ce = null,pbackbuffer = null;
d3dxmatrix matprojection,matoldprojection;
現在我們來建立紋理。前兩個引數是紋理的寬度和高度,第三個引數是紋理的多級漸進紋理序列引數,在這裡是設為1,第四個引數非常重要而且必須設為d3dusage_rendertarget,表明我們所建立的紋理是用來渲染的。剩下的引數就是指紋理格式,頂點緩衝區的記憶體位置,和乙個指向紋理的指標。當紋理是用來當渲染物件時,頂點緩衝區的記憶體位置必須設為d3d_defailt。
為了訪問紋理記憶體物件,我們需要乙個su***ce物件,因為d3d中的紋理是用這樣的乙個su***ce來儲存紋理資料的。為了得到紋理表面的su***ce,我們需要呼叫方法getsu***celevel() 。第乙個引數我們設為0,第二個引數為乙個指向su***ce物件的指標。
prendertexture->getsu***celevel(0,&prendersu***ce);
下一步就是建立乙個適合紋理維數的投影矩陣,因為紋理的橫縱比和後台緩衝區的不一樣。
d3dxmatrixperspectivefovlh(&matprojection,d3dx_pi / 4.0f,1,1,100);
在我們的迴圈渲染之前,我們必須儲存後台緩衝區和它的投影矩陣。
渲染迴圈函式可以分為兩個部分。第一部分是渲染到紋理的過程。因此,渲染物件必須設為紋理表面。然後我們就可以把東西渲染到這個物件上了。渲染到另乙個表面上和正常地渲染到後台緩衝區差不多。只有一點不同,那就是先不呼叫prensent()函式,因為紋理上的內容並不需要顯示在螢幕上。象平時一樣,我們先要重置表面顏色緩衝區,並且呼叫beginsence()和endsence()方法。為了能夠適當的渲染,我們必須設定和紋理表面相符的投影矩陣。否則最後的圖象可能被扭曲
//render-to-texture
d3dxmatrixrotationy(&matrotationy,frotation);
d3dxmatrixtranslation(&mattranslation,0.0f,0.0f,5.0f);
渲染迴圈的第二部分就是渲染最後場景的過程(也就是顯示到螢幕上的過程)。渲染物件重新設為後台緩衝區,投影矩陣重新設為原來的投影矩陣。由於紋理已經準備好了,所以它和紋理層0相關聯。
//render scene with texture
最後我們通過呼叫release()方法釋放su***ce物件。
prendersu***ce->release();
prendersu***ce = null;
pbackbuffer->release();
pbackbuffer = null;
渲染到紋理能讓你做很多事情,但是你必須注意一些限制。首先深度緩衝區必須總是大於或等於渲染物件的大小。此外,渲染物件和深度緩衝區的格式必須一致
D3D中的渲染
虛擬世界中渲染幾何體一般來說有三種途徑 自定義座標渲染 d3dx內建模型渲染和外部模型資料渲染。第一步 定義頂點資料結構體 d3d提供了自定義頂點結構的機制,通過自定乙個結構體,來儲存我們所希望具有的頂點資料,例如 stuct colorvertex 頂點結構體定義好之後,需要用靈活頂點格式標記的組...
D3D中透明渲染的總結
1.渲染的先決條件 開啟alpha渲染 m pd3ddevice setrenderstate d3drs alphablendenable,true 對於通過程式頂點構造的多邊形渲染時必須開啟alpha通道 m pd3ddevice settexturestagestate 0,d3dtss al...
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顯...