這次說說紋理...
借助紋理對映,可以將 影象資料 對映到 三角形單元中。
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指向符號表中關於這個詞法單元的條目,符號表條目的...