之前學習了如何繪製物體,還畫了個dx自帶的茶壺,然而這個東東並不怎麼好看....離我們現實的物體簡直相隔千里。
僅僅能說像美術他們用來寫生的模型...那麼要怎麼樣才幹讓我們的東西看起來更像真實的物體呢?這個就要用到今天學習的紋理對映技術了...
總之。紋理對映就是我們用一幅2d貼在3d物體上。讓物體表面呈現為2d的樣子,使物體看起來更加真實。
我們一般把紋理對映所使用的2d影象稱作紋理貼圖。direct3d支援多種的紋理貼圖,比方有.bmp、.dds、.dib、.png以及.tga等等,為了提高程式使用紋理的效率,通常使用邊長為2的n次方冪的正方形。
介紹就這麼多,開始動手。
建立紋理貼圖分為四個步驟:定點的定義,定點的訪問。紋理的建立,紋理的啟用
1.頂點的定義:
在使用定點快取或者索引快取畫圖的時候。我們定義過定點,只是當時的定點是僅僅包含了座標和頂點的顏色,在這裡。我們就不須要定義定點的顏色了。由於繪製物體的顏色會由紋理的顏色來確定。我們僅僅須要在定義座標的時候,再加入乙個紋理座標(u,v)就可以。
struct stvertex
stvertex(){}
};
定義靈活頂點的格式:
#define d3dfvf_customvertex (d3dfvf_xyz|d3dfvf_tex1)
這樣,我們的頂點格式就定義好啦!
2.頂點的訪問:
與頂點緩衝畫圖一樣,定義過定點之後,須要給定點賦值。這次我們賦值座標之後,還要給紋理座標賦值:比如:
vertex[0] = stvertex(-10.0f, 10.0f, -10.0f, 0.0f, 0.0f);
當然,其它的步驟與之前一樣,也須要鎖住緩衝區再操作,然後還要解鎖。
3.紋理的建立:
這裡就是我們的新內容啦,建立紋理一般使用這麼乙個函式:d3dxcreatetexturefromfile
有三個引數。第乙個為d3d裝置介面指標,第二個為紋理的路徑名。第三個為紋理的指標。
比如:
d3dxcreatetexturefromfile(g_pdevice, text("texture.png"), &g_ptexture);
4.紋理的啟用:
建立好了紋理,我們就能夠在繪製的時候使用啦,使用紋理非常easy,在繪製物體之前,使用settexture函式就可以:
函式有兩個引數。第乙個為紋理是哪一層,我們知道,一共能夠建立8層紋理。所以這個引數的取值就為0-7啦。第二個就是我們的紋理指標啦。
g_pdevice->settexture(0, g_ptexture);
以下是乙個完整的樣例: 我們通過索引快取畫圖,繪製乙個立方體:
沒有加紋理之前是介個樣子滴:
以下是紋理建立的完整的**:
// d3ddemo.cpp : 定義應用程式的入口點。
// // wm_command - 處理應用程式選單 // wm_paint - 繪製主窗體 // wm_destroy - 傳送退出訊息並返回 // // lresult callback wndproc(hwnd g_hwnd, uint message, wparam wparam, lparam lparam) return 0; } 菜鳥DirectX之紋理對映
一紋理對映是什麼 就是你用前面部落格中講到的方法繪製乙個正方形後,在正方形上貼一張你想要顯示的 二紋理對映的使用 使用方法分為四步 1 在頂點格式中定義紋理的座標 比如 struct myvertex 2 填充頂點資料 customvertex vertices void pvertices if ...
Directx11教程37 紋理對映 7
本章是在教程35 36的基礎上來實現乙個光照紋理結合的程式,就是把場景中旋轉的cube加上紋理。lighttex.vs中頂點的結構現在為 struct vertexinputtype 紋理座標 output.tex input.tex 紋理座標不做任何變化,只是單純的從vs輸出到ps中。lightt...
Directx11教程38 紋理對映 8
上篇日誌中,我們用紋理和光照顏色調製的方式得到最終顏色,本章我們嘗試用紋理取樣的顏色,直接做為材質的漫反射係數kd,並用它來做光照計算,最後再做個gamma校正,如果不做的話,效果會偏亮。lighttex.ps主要改動 float4 texturecolor shadertexture.sample...