龍書dx9 紋理

2022-04-20 11:43:55 字數 1948 閱讀 9459

本章cube例子與前面不同;使用了規範的類定義。

筆記一:標頭檔案中class  const static成員變數的問題:

vertex.h:

struct

vertext

vertext(

float x,float y,float z,float nx,float ny,float nz,float u ,float

v)

float

_x,_y,_z;

float

_nx,_ny,_nz;

float

_u,_v;

static

const

dword fvft;

};//

const dword vertext::fvft= (d3dfvf_xyz | d3dfvf_normal | d3dfvf_tex1);//方式2

//#define vertex_fvf (d3dfvf_xyz | d3dfvf_normal | d3dfvf_tex1)//方式1

#endif

//!__vertexh__

例子裡給的是方式1; 當我使用方式2的時候出現鏈結錯誤,error link1169多個重定義的符號。

然後我在vertex.cpp裡進行定義,正確:

#include "

vertex.h

"const dword vertext::fvft= (d3dfvf_xyz | d3dfvf_normal | d3dfvf_tex1);

注意:1.不要試圖在標頭檔案.h裡定義變數(除了extern全域性外) 2.定義在.h的static變數,在不同cpp檔案內,由於static的區域性性,每個cpp內都會開闢自己的static變數;比如我在a.h裡定義了static int a=0;在b.cpp、c.cpp裡#include a.h ;那麼,b.cpp和c.cpp裡的static a變數沒有任何關係。

參考:3.編譯是把原始碼變成機器指令;預編譯只是**間的處理;#include預編譯;作用是把檔案內容複製到當前;static 關鍵字在編譯時申請靜態空間

4.#ifndef #endif 只是防止預編譯時的相同標頭檔案的重複複製而已;

筆記二:紋理的mipmaps和filter

原因:紋理的大小和螢幕三角形大小不一致。

首先,建立mipmaps鏈,設定不同紋理等級,選取等級,確定我需要的紋理; 其次,通過設定的filter方式,來進行紋理與螢幕三角的匹配

比如:

device->setsamplerstate(0

, d3dsamp_magfilter, d3dtexf_linear);//第三步

device->setsamplerstate(0

, d3dsamp_minfilter, d3dtexf_linear);//第二步 紋理被縮小

device->setsamplerstate(0, d3dsamp_mipfilter, d3dtexf_point);//第一步

紋理為:256*256建立mipmaps鏈:128*128,64*64,32*32... 假如三角形是100*100級別;

根據第一步:mipmap filter設定的是d3dtexf_point(最近選擇方式),現在選擇128*128;紋理在根據第二步,多個紋理單元對應乙個三角單元,d3dtexf_linear線性紋理過濾方式;每個三角形畫素對最接近他的2*2紋理點進行取樣;並取平均值;

參考:疑問:但我不清楚,如果是紋理放大模式(第三步),d3dtexf_linear模式,這時候乙個紋理單元對應多個畫素點,怎麼進行選取紋理2*2取均值呢?

筆記三:紋理的四種定址模式,

原因:紋理座標可以超出1的範圍,比如vertex中uv座標在0到3之間。

幾種模式:wrap(環繞)  、border邊框模式(可自己設定)、clamp(擷取(擷取紋理在0到1範圍內,並延伸邊緣色))、mirror模式

Dx9 龍書 chapter1 筆記

第一章筆記 顯示 黑色螢幕 主要是初始化的四個步驟 1.建立idirect3d9介面指標 2個用途 確定系統中顯示裝置的技術特徵,顯示的模式等 是否支援硬體 第2步 建立代表物理裝置的device物件 第四部 後release掉 它是2.3.4步的上層介面。2.檢測硬體是否支援頂點處理,否則用sof...

DX9 實現讓繪製的物體旋轉

下面這段 利用了變形矩陣 spin the object d3dxmatrix rx,ry rotate 45 degrees on x axis d3dxmatrixrotationx rx,3.14f 4.0f incremement y rotation angle each frame st...

關於C 和 dx9的一點總結(1)

事件1 最近遇到了很怪異的情況,用vs2010寫點程式,在debug版本下除錯,竟然發現watch裡只能看到一小部分變數。思前想後不能找到原因。最後發面工程屬性裡optimization赫然勾選了o3 優化。原來選擇優化模式竟然會使得debug失效。omg。事件2 最近發現用vs編寫 不再有方便的自...