龍書筆記(6)

2021-06-21 12:10:52 字數 2743 閱讀 1156

這次說說紋理...

借助紋理對映,可以將 影象資料 對映到 三角形單元中。

idirect3d中用 idirect3dtexture9 表示紋理介面(是乙個類似表面的畫素矩陣,與表面不同的是他可被對映到三角形單元中)

1.紋理座標

紋理座標系(紋理空間):由水平方向u軸 和 垂直方向v軸 組成,利用 座標對(u,v)標識的紋理元素稱為紋理元

對於每個3d三角形單元,都可以在紋理中定義乙個相對應的三角形區域,然後將該三角形區域對映到3d三角形中

注意(1):u軸正方向是水平向右,v軸的正方向是 垂直向下!

注意(2):為了處理不同尺度紋理,direct3d將紋理座標系規範化了,也就是說使之限定在[0,1]之間

2.建立並啟用紋理

紋理資料通常是從影象檔案讀入的,然後再載入到idirect3dtexture9中,建立使用的函式是:d3dxcreatetexturefromfile(),使用的函式是:settexture()。

idirect3dtexture9 * stonewall;

d3dxcreatetexturefromfile(device, "stonewall.bmp", &stonewall); //讀入紋理檔案

device->settexture(0, stonewall); //設定當前紋理,第乙個引數(多重紋理)取值範圍是0~7,他是指紋理的層數,所以最多是8層

若想禁用某層的紋理,可將settexture的第二個引數設為0,對於那些不用紋理的模型來說這很實用。

device->settexture(0,0);

若各三角形單元使用的紋理均不同

device->settexture(0,tex0);

//rendering...

device->settexture(0,tex1);

//rendering...

3.紋理過濾器: 

用來解決紋理三角形與螢幕三角形大小不一致的問題(不管是放大紋理三角形還是縮小紋理三角形,都會產生畸變)

direct3d提供了3種紋理過濾器,每種過濾器都有乙個 質量水平 (當然,質量越高,運算的速度就越慢)

紋理過濾方式使用的方法是 idirect3ddevice9->setsamplerstate()

(1)最近點取樣:預設,速度快,但效果最差。

device->setsamplerstate(0, d3dsamp_magfilter, d3dtexf_point);

device->setsamplerstate(0, d3dsamp_minfilter, d3dtexf_point);

(2)線性紋理過濾:速度較快,效果也不錯,建議 至少使用線性紋理過濾,放大和縮小的例項:

device->setsamplerstate(0, d3dsamp_magfilter, d3dtexf_liner);

device->setsamplerstate(0, d3dsamp_minfilter, d3dtexf_liner);

(3)各向異性紋理過濾:速度最快,但也最慢

device->setsamplerstate(0, d3dsamp_magfilter, d3dtexf_anisotropic);

device->setsamplerstate(0, d3dsamp_minfilter, d3dtexf_anisotropic);

//使用 各向異性紋理過濾時,還必須對 d3dsamp_maxanisotropic 進行設定,此值越大,影象效果越好

device->setsamplerstate(0, d3dsamp_maxanisotropic, 4);

4.多級漸近紋理:

為紋理建立乙個 多級漸進紋理鏈

多級漸近紋理過濾器:

device->setsamplerstate(0, d3dsamp_mipfilter, filter);

filter 取值為 

d3dtexf_none:禁用多級紋理

d3dtexf_point:選擇與螢幕三角形最接近的那一級紋理

d3dtexf_liner:選擇與螢幕三角形尺寸最接近的2個紋理級,線性組合他們的結果就是最終的結果

多級漸近紋理的使用:

在設定好d3dsamp_mipfilter後,d3dxcreatetexturefromfile會自動建立好紋理鏈,direct3d會自動去找紋理鏈中最匹配的那一級紋理。

5.定址模式

由於紋理座標必須在[0,1]之間,但有時座標往往會超過這個範圍,所以direc3d定義了4種模式來解決這個問題

也就是針對所給的紋理座標超過0~1範圍之間的場合。

重複定址模式、邊界定址模式、鉗位定址模式、映象定址模式

學習到現在遇到的小問題:

1. 索引快取的設定,順時針是正面,也就是說若逆時針設定時,將顯示空白,因為這被解釋為背面

2. 光照和材質的使用很簡單,都是建立好物件(d3dlight9,d3dmaterial9),然後設定具體引數並調好使用狀態(setrenderstate),最後在device中新增(setlight和setmaterial)

3. 紋理的使用也很簡單,建立紋理介面完畢後,載入紋理,設定紋理過濾器和多級漸近紋理,最後也是在device中新增此介面(settexture)。

龍書筆記(7)

依照進度,這次說融合.什麼是融合,就是將當前要進行光柵化的畫素的顏色 與 先前已光柵化並處於同一位置的畫素的顏色 進行合成 1.融合方程 outputpixel sourcepixel sourceblendfactor destpixel destblendfactor 中文解釋為 融合結果 當前...

龍書筆記(8)

chap 8 模版 stencil 快取 功能 阻止後台快取中某些特定區域的繪製 1.模版快取的使用 啟用和禁用模版快取 device setrenderstate d3drs stencilenable,true device setrenderstate d3drs stencilenable,...

龍書筆記 引論

編譯器的第乙個步驟稱為詞法分析或掃瞄。詞法分析器讀入組成源程式的字元流,並且將它們組成有意義的詞素序列。對於每個詞素,詞法分析器產生如下形式的詞法單元 token 作為輸出 token name語法分析步驟使用的抽象符號,attribute value指向符號表中關於這個詞法單元的條目,符號表條目的...