【阅读笔记之六】《DIRECTX.9.0.3D游戏开发编程基础》:Direct3D中的颜色

Direct3D中的颜色

         在这一章中,要学会掌握Direct3D中颜色的描述方式,理解三角形单元的着色模式。

1. 颜色表示

         众所周知,任何颜色都可以用红、绿、蓝以不同比例混合表示。在Direct3D中,同样用RGB三元组表示颜色。RGB数据可以用两种不同的结构表示。如下:

        1) D3DCOLOR,它实际上与DWORD完全相同(用typedef定义),共有32位,分为4个8位项,如下图所示。其中,Alpha主要用于融合(blending)。

           要指定每个颜色分量的值,并将其插入到D3DCOLOR结构中,需要借助位运算,Direct3D提供D3DCOLOR_ARGB宏来完成这个工作,如下所示:

//
// 前三个分别为红、绿、蓝,最后一个为Alpha
D3DCOLOR brightred = D3DCOLOR_ARGB(255,255,0,0);
D3DCOLOR someColor = D3DCOLOR_ARGB(255,144,87,201);

// D3DCOLOR_XRGB代替3DCOLOR_ARGB也可以
// D3DCOLOR_XRGB将Alpha设为255,只接受3个参数
D3DCOLOR white = D3DCOLOR_XRGB(255,255,255);

              2) D3DCOLORVALUE。也可以用D3DXCOLOR代替之(D3DXCOLOR是一个更加强大的类)。在该结构中,我们用单精度浮点数(float)度量每个颜色分量的亮度值,亮度值的取值范围为0~1(0表示没有亮度,1表示亮度最大)。下面列出常用的颜色的RGB值,可将下列代码加入到d3dUtility.h头文件中。

//
//常用颜色RGB
namespace d3d{
   .
   .
   .
const D3DXCOLOR WHTIE(D3DCOLOR_XRGB(255,255,255));
const D3DXCOLOR BLACK(D3DCOLOR_XRGB(0,0,0));
const D3DXCOLOR RED(D3DCOLOR_XRGB(255,0,0));
const D3DXCOLOR GREEN(D3DCOLOR_XRGB(0,255,0));
const D3DXCOLOR BLUE(D3DCOLOR_XRGB(0,0,255));
const D3DXCOLOR YELLOW(D3DCOLOR_XRGB(255,255,0));
const D3DXCOLOR CYAN(D3DCOLOR_XRGB(0,255,255));		//蓝绿
const D3DXCOLOR MAGENTA(D3DCOLOR_XRGB(255,0,255)); 	//洋红

    }

 

2. 顶点颜色

          图元的颜色由构成图元的顶点的颜色决定。所以,我们必须为顶点数据结构添加一个表示颜色的数据成员。注意,此时不能用D3DCOLORVALUE结构,因为Direct3D希望用32位来表示颜色值。

 

3. 着色

         在光栅化过程中,需要对多边形进行着色(shading)。着色规定了如何利用顶点的颜色值来确定图元像素的颜色。我们有两种着色模式:平面着色和Gouraud着色。使用平面着色模式时候,每个图元的每个像素被指定为第一个顶点所指定的颜色。在Gouraud着色模式下,各像素的颜色值由个顶点的颜色值经线性插值得到,效果更好。

 

                                                                                            ————Josh 2012年10月23日

 

                               


 


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值