遊戲開發基礎(四)

來源:互聯網
上載者:User

第四章
RGB資料可用兩種不同的結構來儲存,
*D3DCOLOR(DWORD類型相同)
要指定每個顏色分量值D3DCOLOR_ARGB ,D3DCOLOR_XRGB(#define D3DCOLOR_XRGB(r,g,b) D3DCOLOR_ARGB(0xff,r,g,b) )
*D3DCOLORVALUE (結構),該結構用單精確度浮點數來度量每個顏色分量的亮度值,亮度值[0,1]0表示沒有亮度,1表示亮度最大
typedef struct D3DCOLORVALUE{
 float r;
 float g;
 float b;
 float a;
}D3DCOLORVALUE;
可用D3DXCOLOR替代D3DCOLORVALUE,這兩種結構可相互轉換
typedef struct D3DXCOLOR{
#ifdef __cplusplus
public:
 D3DXCOLOR(){}
 D3DXCOLOR(DWORD argb);
 D3DXCOLOR(CONST FLOAT*);
 D3DXCOLOR(CONST D3DXFLOAT16*);
 D3DXCOLOR(CONST D3DCOLORVALUE&);
 D3DXCOLOR(FLOAT r,FLOAT g,FLOAT b,FLOAT a);

 operator DWORD() const ;
 ...............
 .........
#endif
 FLOAT r,g,b,a;
 
}D3DXCOLOR,*LPD3DXCOLOR;

可將這兩個結構表達成一個4D向量(r,g,b,a),
顏色向量的點積和叉積沒有實際意義,但是對用分量相乘卻是有意義的,在D3DXCOLOR中,顏色乘法定義為對應分量分別相乘

為頂點資料結構添加一個表示顏色的資料成員
struct ColorVertex{
 float x,y,z;
 D3DCOLOR color;
 static const DWORD FVF;
};
const DWORD ColorVertex::FVF = D3DFVF_XYZ|D3DFVF_DIFFUSE;

光柵化過程中,需要對多邊形進行著色,著色規定了如何利用頂點的顏色來計算構成圖元的像素的顏色(平面著色flat shading,Gouraud著色gouraud shading)
平面著色每個圖元的每個像素都被一致地賦予該圖元的第一個所指定的顏色,使用平面著色模式時,第2個和第3個頂點顏色都被忽略
平面著色容易呈現“塊狀”
在Gouraud著色模式下,圖元中各像素的顏色值由頂點的顏色經線性差值得到
如同Direct3D中的許多其他狀態量一樣,著色模式由Direct3D狀態機器控制
Device->SetRenderState(D3DRS_SHADEMODE,D3DSHADE_FLAT);
Device->SetRenderState(D3DRS_SHADEMODE,D3DSHADE_GOURAUD);

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.