Direct X學習筆記 紋理對映

2021-09-08 04:32:37 字數 1795 閱讀 5199

之前學習了如何繪製物體,還畫了個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...