资源描述:
《清华大学DirectX游戏编程第5章(全20章)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第5章颜色在本章中,将继续学习如何渲染带颜色的实心物体。主要目标:学习如何在Direct3D中描述颜色。掌握在三角形上的着色过程。25.1颜色的描述方法在Direct3D中,颜色通过一个RGB三元数来描述。其主要思想是,通过指定红、绿、蓝三原色的具体数值来描述颜色。经常使用两种不同类型的数据来保存RGB数据,第一种是D3DCOLOR类型,该结构由一个32位的DWORD类型数据来表示,其中每8位组成一个段,用来存储一个颜色分量,如图5.1所示。35.1颜色的描述方法Direct3D提供了一个称为D3DCOLOR_ARGB的宏用于完成这些操作,该宏通过4个参数,分别指定3个颜色分量和Al
2、pha分量的值,所有参数的值都必须处于0~255之内,例如:D3DCOLORbrightRed=D3DCOLOR_ARGB(255,255,0,0);D3DCOLORsomeColor=D3DCOLOR_ARGB(255,144,87,201);45.1颜色的描述方法另外一个用于保存颜色值的结构是D3DCOLORVALUE,在该结构中使用浮点数来表示分量,但是颜色分量的范围在0.0~1.0之间,1.0表示最高亮度。此结构定义如下:typedefstruct_D3DCOLORVALUE{floatr;//红色,0.0~1.0floatg;//绿色,0.0~1.0floatb;//蓝色,
3、0.0~1.0floata;//Alpha值,0.0~1.0}D3DCOLORVALUE;55.1颜色的描述方法另外还可以使用D3DXCOLOR结构,它的数据成员与D3DCOLORVALUE相同,但是它提供了非常有用的构造函数和重载操作符,这样就使得对颜色的操作变得简单。D3DXCOLOR结构的定义如下:参见教材P88现在需要更改d3dUtility.h文件,加入一些全局的颜色定义:namespaced3d{...constD3DXCOLORWHITE(D3DCOLOR_XRGB(255,255,255));constD3DXCOLORBLACK(D3DCOLOR_XRGB(0,0,
4、0));constD3DXCOLORRED(D3DCOLOR_XRGB(255,0,0));constD3DXCOLORGREEN(D3DCOLOR_XRGB(0,255,0));constD3DXCOLORBLUE(D3DCOLOR_XRGB(0,0,255));constD3DXCOLORYELLOW(D3DCOLOR_XRGB(255,255,0));constD3DXCOLORCYAN(D3DCOLOR_XRGB(0,255,255));constD3DXCOLORMAGENTA(D3DCOLOR_XRGB(255,0,255));}65.2顶点颜色图元的颜色是由顶点颜色决定
5、。顶点颜色结构的定义如下:structColorVertex{float_x,_y,_z;D3DCOLOR_color;staticconstDWORDFVF;}constDWORDColorVertex::FVF=D3DFVF_XYZ
6、D3DFVF_DIFFUSE;75.3着色处理着色在光栅化时进行处理,主要用于通过顶点颜色来计算得到组成图元的像素的颜色值。现在使用的着色模型主要有两种:平面着色和Gouraud着色。平面着色使渲染出来的图元看起来很死板,因为颜色之间没有平滑过渡。还有一个更好的着色模式就是Gouraud模式。图5.2是分别使用两种模式渲染出来的三角形的对比。85.3
7、着色处理与许多其他特性一样,Direct3D中的着色模式也通过渲染状态来控制://设置为平面模式Device->SetRenderState(D3DRS_SHADMODE,D3DSHADE_FLAT);//设置为内插模式Device->SetRenderState(D3DRS_SHADMODE,D3DSHADE_GOURAUD);95.4示例:带颜色的三角形本章的例子展示了如何使用平面着色模式以及Gouraud着色模式来渲染带颜色的三角形,在程序中首先声明两个全局变量:D3DMATRIXWorld;IDirect3DVertexBuffer9*Triangle=0;World是用来保
8、存对三角形进行世界变换的矩阵,Triangle是储藏三角形顶点信息的顶点缓冲区。105.4示例:带颜色的三角形Setup函数中创建了一个顶点缓冲区,再通过带颜色的三角形顶点信息去填充缓冲区。函数的具体定义如下:参见教材P92在Display函数中对同一个三角形使用不同的着色模式,并在不同的地方渲染两次,三角形的位置是通过不同的世界矩阵来控制的。函数的定义如下:参见教材P93115.5小结颜色通过红、绿、蓝三种颜色值的组合来描述,通过设置不同的组合可以得到各