D3D9學習筆記之顏色

2021-09-27 02:42:28 字數 2049 閱讀 7313

學習目標:

顏色的表示:

在 direct3d 中,顏色用 rgb 三元組來表示。將顏色分解為紅色(red),綠色(green),藍色(blue),這三個分量的加性混合決定了最終的顏色。我們可用該三個分量的不同組合來表示上百萬種顏色。

rgb資料可用兩種不同的結構來儲存

第一種是結構是 d3dcolor,它實際上與 dword(unsigned long )型別完全相同,共32位。d3dcolor型別中的各位被分成4個8位項,每項儲存了一種顏色分量的亮度值。

分配順序從左至右是 8位給aloha——8位給紅色——8位給綠色——8位給藍色。

由於每種顏色的分量均占用乙個位元組,所以每個分量的亮度值範圍在0-255區間內,接近0的值表示亮度低,接近255的值表示亮度高。

占用:關於 alpha分量暫時不理解,以後再做補充。

顏色巨集:

#define d3dcolor_xrgb(r,g,b)	d3dcolor_argb(0xff,r,g,b)
要指定每個顏色分量的值,並將其插入到 d3dcolor 型別的恰當位置上,需要借助位運算。direct3d 提供了 d3dcolor_argb 巨集幫助我們完成這樣的工作。該巨集中,前3個引數分別對應3種顏色分量,第4個引數對應 alpha分量,每個引數必須在0-255區間取值,其呼叫方法如下:

d3dcolor brightred = d3dcolor_argb(255,255,0,0);

d3dcolor somecolor = d3dcolor_argb(255,144,87,201);

也可以用巨集 d3dcolor_xrgb 來代替 d3dcolor_argb,二者很相似,前者總是將 alpha引數設為255,所以前者不接受 alpha 引數,呼叫方法如下:

d3dcolor xrgb = d3dcolor_xrgb(255,255,10);

頂點顏色:

圖元的顏色由構成該圖元的頂點顏色所決定。所以,我們必須為頂點資料結構新增乙個表示顏色的資料成員。注意,此處無法使用 d3dcolorvalue 結構,因為 direct3d 希望用乙個32位的值來描述頂點的顏色。

struct colorvertex

const dword colorvertex::fvf = d3dfvf_xyz | d3dfvf_diffuse; //初始化頂點結構構型成員

著色:

在光柵化過程中,需要對多邊形進行著色。著色規定了如何利用頂點的顏色來計算構成圖元的畫素顏色。

兩種著色模式:平面著色 和 平滑著色

平面著色:每個圖元的每個畫素都被一致的賦予該圖元的第乙個頂點所指定的顏色。所以,由3個頂點構成的三角形將是紅色的,原因是第乙個頂點是紅色的。使用平面著色模式時,第二個和第三個頂點的顏色都將被忽略。

平面著色容易使物體出現塊狀,這是因為各顏色之間沒有平滑的過渡。一種更好的著色模式是 gouraud著色,也稱平滑著色,在平滑著色模式下,圖元中各畫素的顏色值由各頂點的顏色經線性插值得到。

著色模式由 direct3d 的狀態機控制

//設定為平面著色模式,三角形單元的顏色由第乙個頂點決定

device->setrenderstate(d3drs_shademode,d3dshade_flat);

//設定為平滑著色模式,線性插值著色

device->setrenderstate(d3drs_shademode,d3dshade_gouraud);

在著色模式下應將燈光關閉,因為你沒有設定燈光,如果有可以忽略

device->setrenderstate(d3drs_lighting, false);//true為開,false為關

D3D9學習筆記之光照

學習目標 為了場景的真實感,可為場景增加光照。光照有助於描述實體形狀和立體感。使用光照時,無需自行指定頂點的顏色值 direct3d 會將頂點送入光照計算引擎,依據光源型別,材質以及物體表面相對於光源的朝向,計算出每個頂點的顏色值。基於某種光照模型計算出各頂點的顏色,會使繪製結果更逼真。在 dire...

D3D9學習筆記之渲染狀態關鍵字

d3drs fillmode繪製模式設定,可設定為點,線與面模式3種分別是 d3dfill point d3dfill wireframe,d3dfill solid d3drs cullmode消隱模式,按照三角形單元的頂點繞序進行背面消隱,可設定為 禁用背面消隱d3dcull none,對順時針...

(一)D3D9渲染原理

su ce和texture。使用su ce相對來說比使用texture要簡單一些,但是不如使用texture靈活。抽象概念 direct3d的抽象概念包括 devices 裝置 swap chains 交換鏈 和resources 資源 device 裝置 用於渲染3d場景。例如單色裝置就會渲染黑白...