Direct3D颜色

来源:互联网 发布:网络歌手菲儿 编辑:程序博客网 时间:2024/04/30 22:46

1. D3DCOLOR表示16进制每个颜色8bit的32位颜色

typedef DWORD D3DCOLOR;

D3DCOLOR的创建:

1).D3DCOLOR brightRed = D3DCOLOR_ARGB(255, 255, 0, 0);

2).D3DCOLOR brightGreen = D3DCOLOR_XRGB(0, 255, 0);

#define D3DCOLOR_XRGB(r, g, b)  D3DCOLOR_ARGB(0xff, r, g, b)

3).D3DCOLOR brightBlue = 0xff0000ff;


2.D3DCOLORVALUE / D3DXCOLOR表示每个颜色float 32位的128位颜色

float的值范围在[0,1],0为黑色,1为白色。

typedef struct _D3DCOLORVALUE {
    float r;
    float g;
    float b;
    float a;
} D3DCOLORVALUE;

D3DXCOLOR是D3DCOLORVALUE的类表示,提供了一系列函数。

D3DCOLORVALUE和D3DXCOLOR都可以用一个4D向量来表示,颜色的运算可以类似向量的运算。

颜色运算:颜色向量加减和数乘运算都和普通向量一样。 颜色点积和叉积没有什么意义。颜色的乘法定义为对应向量的分别相乘。

XO乘法运算: (c1, c2, c3, c4) * (k1, k2, k3, k4) = (c1k1, c2k2, c3k3, c4k4);

XO乘法主要用于光照计算中,光照计算得到的结果由光源和物体表面材质决定,且光照得到的结果都比没启用光照时候的明亮效果都要暗,所以光源和材质都使用[0,1]之间的颜色,XO乘法刚好满足启用光照的计算结果。

3.颜色应用

一般顶点颜色都是用D3DCOLOR 32位来实现, 在Shader HLSL编程中的顶点着色器就会用D3DCOLORVALUE/D3DXCOLOR的128位颜色进行逼真着色

顶点着色:

平面着色法,三角形中使用第一个顶点着色:

SetRenderState( D3DRS_SHADEMODE, D3DSHADE_FLAT);

Gourand着色法,各顶点颜色线性插值得到三角形中间的颜色:

SetRenderState( D3DRS_SHADEMODE, D3DSHADE_GOURAUD);

PHONG着色则对利用三个顶点的法向量进行插值,因此又被称作双线性法向量插值着色,相比于高洛德着色,其更加逼真,但计算更复杂:

SetRenderState( D3DRS_SHADEMODE, D3DSHADE_PHONG);

颜色不出现,需要的设置:

Device->SetRenderState(D3DRS_LIGHTING, FALSE);



0 0
原创粉丝点击