《清华大学DirectX游戏编程第5章(全20章).ppt》由会员分享,可在线阅读,更多相关《清华大学DirectX游戏编程第5章(全20章).ppt(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第5章 颜色 在本章中,将继续学习如何渲染在本章中,将继续学习如何渲染带颜色的实心物体。带颜色的实心物体。主要目标:学习如何在Direct3D中描述颜色。掌握在三角形上的着色过程。25.1 颜色的描述方法在在Direct3D中,颜色通过一个中,颜色通过一个RGB三元数来描三元数来描述。其主要思想是,通过指定红、绿、蓝三原述。其主要思想是,通过指定红、绿、蓝三原色的具体数值来描述颜色。色的具体数值来描述颜色。经常使用两种不同类型的数据来保存经常使用两种不同类型的数据来保存RGB数据,数据,第一种是第一种是D3DCOLOR类型,该结构由一个类型,该结构由一个32位的位的DWORD类型数据来表示,其
2、中每类型数据来表示,其中每8位组成位组成一个段,用来存储一个颜色分量,如图一个段,用来存储一个颜色分量,如图5.1所示。所示。35.1 颜色的描述方法Direct3D提供了一个称为提供了一个称为D3DCOLOR_ARGB的宏用于完成这些操作,的宏用于完成这些操作,该宏通过该宏通过4个参数,分别指定个参数,分别指定3个颜色分量和个颜色分量和Alpha分量的值,所有参数的值都必须处于分量的值,所有参数的值都必须处于0255之内,例如:之内,例如:D3DCOLOR brightRed=D3DCOLOR_ARGB(255,255,0,0);D3DCOLOR someColor=D3DCOLOR_ARG
3、B(255,144,87,201);45.1 颜色的描述方法另外一个用于保存颜色值的结构是另外一个用于保存颜色值的结构是D3DCOLORVALUE,在该结构中使用浮点数,在该结构中使用浮点数来表示分量,但是颜色分量的范围在来表示分量,但是颜色分量的范围在0.01.0之之间,间,1.0表示最高亮度。此结构定义如下:表示最高亮度。此结构定义如下:typedef struct _D3DCOLORVALUE float r;/红色,0.01.0float g;/绿色,0.01.0float b;/蓝色,0.01.0float a;/Alpha值,0.01.0 D3DCOLORVALUE;55.1 颜色
4、的描述方法另外还可以使用另外还可以使用D3DXCOLOR结构,它的数据成员与结构,它的数据成员与D3DCOLORVALUE相同,但是它提供了非常有用的构造函数和重载操作符,这样就使得对颜相同,但是它提供了非常有用的构造函数和重载操作符,这样就使得对颜色的操作变得简单。色的操作变得简单。D3DXCOLOR结构的定义如下:结构的定义如下:参见教材P88现在需要更改现在需要更改d3dUtility.h文件,加入一些全局的颜色定义:文件,加入一些全局的颜色定义:namespace d3d.const D3DXCOLOR WHITE(D3DCOLOR_XRGB(255,255,255);const D3
5、DXCOLOR 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(2
6、55,0,255);65.2 顶 点 颜 色图元的颜色是由顶点颜色决定。图元的颜色是由顶点颜色决定。顶点颜色结构的定义如下:顶点颜色结构的定义如下:struct ColorVertexfloat _x,_y,_z;D3DCOLOR _color;static const DWORD FVF;const DWORD ColorVertex:FVF=D3DFVF_XYZ|D3DFVF_DIFFUSE;75.3 着 色 处 理着色在光栅化时进行处理,主要着色在光栅化时进行处理,主要用于通过顶点颜色来计算得到组用于通过顶点颜色来计算得到组成图元的像素的颜色值。现在使成图元的像素的颜色值。现在使用的着色
7、模型主要有两种:平面用的着色模型主要有两种:平面着色和着色和Gouraud着色。着色。平面着色使渲染出来的图元看起平面着色使渲染出来的图元看起来很死板,因为颜色之间没有平来很死板,因为颜色之间没有平滑过渡。还有一个更好的着色模滑过渡。还有一个更好的着色模式就是式就是Gouraud模式。模式。图图5.2是分别使用两种模式渲染出是分别使用两种模式渲染出来的三角形的对比。来的三角形的对比。85.3 着 色 处 理与许多其他特性一样,与许多其他特性一样,Direct3D中的着色模式中的着色模式也通过渲染状态来控制:也通过渲染状态来控制:/设置为平面模式Device-SetRenderState(D3D
8、RS_SHADMODE,D3DSHADE_FLAT);/设置为内插模式Device-SetRenderState(D3DRS_SHADMODE,D3DSHADE_GOURAUD);95.4 示例:带颜色的三角形本章的例子展示了如何使用平面着色模式本章的例子展示了如何使用平面着色模式以及以及Gouraud着色模式来渲染带颜色的三着色模式来渲染带颜色的三角形,在程序中首先声明两个全局变量:角形,在程序中首先声明两个全局变量:D3DMATRIX World;IDirect3DVertexBuffer9*Triangle=0;World是用来保存对三角形进行世界变换是用来保存对三角形进行世界变换的矩阵
9、,的矩阵,Triangle是储藏三角形顶点信息是储藏三角形顶点信息的顶点缓冲区。的顶点缓冲区。105.4 示例:带颜色的三角形Setup函数中创建了一个顶点缓冲区,再通过函数中创建了一个顶点缓冲区,再通过带颜色的三角形顶点信息去填充缓冲区。带颜色的三角形顶点信息去填充缓冲区。函数的具体定义如下:函数的具体定义如下:参见教材P92在在Display函数中对同一个三角形使用不同的着函数中对同一个三角形使用不同的着色模式,并在不同的地方渲染两次,三角形的色模式,并在不同的地方渲染两次,三角形的位置是通过不同的世界矩阵来控制的。位置是通过不同的世界矩阵来控制的。函数的定义如下:函数的定义如下:参见教材
10、P93115.5 小 结颜色通过红、绿、蓝三种颜色值的组合来描述,通过颜色通过红、绿、蓝三种颜色值的组合来描述,通过设置不同的组合可以得到各种颜色。在设置不同的组合可以得到各种颜色。在Direct3D中,中,有三种描述颜色的结构类型,分别为有三种描述颜色的结构类型,分别为D3DCOLOR、D3DCOLORVALUE、D3DXCOLOR。还可以使用四维向量来描述颜色值还可以使用四维向量来描述颜色值(r,g,b,a)。通过设定图元顶点的颜色值并在通过设定图元顶点的颜色值并在Direct3D中设置光栅中设置光栅化处理时使用不同的着色模式化处理时使用不同的着色模式,可以确定平面中每个可以确定平面中每个像素的颜色。像素的颜色。在平面着色模式中,图元中像素的颜色由平面中第一在平面着色模式中,图元中像素的颜色由平面中第一个顶点的颜色来决定。在个顶点的颜色来决定。在Gouraud着色模式中,像素着色模式中,像素颜色由各顶点颜色值的线性插值得到。颜色由各顶点颜色值的线性插值得到。12