天天看點

Direct3D紋理映射

     建立紋理對象

1: HRESULT CreateTexture(      
2:   UINT Width,//寬度      
3:   UINT Height,//高度      
4:   UINT Levels,//多級漸進紋理序列級數      
5:   DWORD Usage,//用途      
6:   D3DFORMAT Format,//像素格式      
7:   D3DPOOL Pool,//記憶體池類型      
8:   IDirect3DTexture9** ppTexture,//建立的紋理對象指針      
9:   HANDLE* pSharedHandle//保留值,恒為0      
10: );
1: HRESULT D3DXCreateTextureFromFile(      
2:   LPDIRECT3DDEVICE9 pDevice,//D3D裝置對象接口      
3:   LPCTSTR pSrcFile,//圖檔路徑      
4:   LPDIRECT3DTEXTURE9 * ppTexture//傳回生成的D3D紋理對象指針      
5: );      

紋理過濾方式 ·Nearest- point sampling(最近點采樣) · Linear texture filtering(線性紋理過濾) · Anisotropic texture filtering(各向異性紋理過濾) ·Texture filtering with mipmaps(多級漸進紋理過濾)

D3DTEXF_POINT 取距離最近的像素的顔色,适用于紋理與圖元的大小相近時
D3DTEXF_LINEAR 對上下左右4個紋理元素進行權重平均
D3DTEXF_ANISOTROPIC 對映射點周圍方形8個或更多的像素進行取樣,獲得平均值後映射到像素點上
D3DSAMP_MIPFILTER 采用不同分辨率的紋理序列

  遊戲中常見的三種方式: · Bilinear Interpolation (雙線過濾 D3DTEXF_LINEAR) 這種處理方式較适用于有一定景深的靜态影像,不過無法提供最佳品質。其最大問題在于,當三維物體變得非常小時,一種被稱為Depth Aliasing artifacts(深度赝樣鋸齒),也不适用于移動中的物件。 · Trilinear Interpolation (三線過濾 D3DSAMP_MIPFILTER+ D3DTEXF_LINEAR) 一個“雙線過濾”需要三次混合,而“三線過濾”就得作七次混合處理,是以每個像素就需要多用21/3倍以上的計算時間。還需要兩倍大的存儲器時鐘帶寬。但是“三線過濾”可以提供最高的貼圖品質,會去除材質的“閃爍”效果。對于需要動态物體或景深很大的場景應用方面而言,隻有“三線過濾”才能提供可接受的材質品質。 · Anisotropic Interpolation (各向異性過濾 D3DTEXF_ANISOTROPIC)

它在取樣時候,會取8個甚至更多的像素來加以處理,所得到的品質最好。 可以與線性紋理過濾和多級漸進紋理過濾結合使用.一般來說4X以上才有效果   紋理尋址模式 當紋理坐标在[0.0, 1.0]範圍之外時的情況 1.       Wrap texture address mode(重疊)

Direct3D紋理映射

2.       Mirror texture address mode(鏡像)

Direct3D紋理映射

3.       Clamp texture address mode(夾取)

Direct3D紋理映射

4.       Border color texture address mode(邊框顔色)

Direct3D紋理映射

紋理階段混合 顔色混合,紋理混合,Alpha混合,還有個凹凸映射?   紋理包裝 Texture Wrapping,改變D3D光栅器使用紋理坐标對有紋理的多邊形進行光栅化操作的基本方式. U,V紋理包裝的使用會影響D3D在U,V方向上對紋理坐标間最短線的選取.

Direct3D紋理映射

上圖中的U方向上的包裝使AB之間的紋理坐标内插操作就穿越了0.0和1.0所在的交界線. 可以用紋理包裝來做環境映射(現在通常都是用Cubemap吧?)略過  

繼續閱讀