游戏设计颜色和灯光.ppt
《游戏设计颜色和灯光.ppt》由会员分享,可在线阅读,更多相关《游戏设计颜色和灯光.ppt(25页珍藏版)》请在三一办公上搜索。
1、M,Lecture 5 Color&Lighting颜色和光照,Contents,Color RepresentationShadingLight ComponentsMaterialsVertex NormalsLight SourcesSample Applications,M,Color Representation,在Direct3D中,颜色是使用RGB(Red,Green,Blue)三部分来描述的。这三个分量通过加性混合(additive)决定了最终颜色(可以表示上百万种颜色)两种不同的存储RGB数据的结构:(1)D3DCOLOR:实际上一个DWORD(32位)类型。在D3DCOLO
2、R类型中的这些位按照8-bit被分为4个部分,每一部分存储的是该色的亮度值。每种颜色占用内存的一个字节,各颜色亮度值的取值范围是0-255。这个值越接近0就越暗,越接近255就越亮。,M,Color Representation,D3DCOLOR赋值宏D3DCOLOR_ARGB:完成指定每个颜色分量并且把它放到D3DCOLOR中适当位置的任务。宏D3DCOLOR_XRGB,M,D3DCOLOR brightRed=D3DCOLOR_ARGB(255,255,0,0);D3DCOLOR someColor=D3DCOLOR_ARGB(255,144,87,201);,#define D3DCOL
3、OR_XRGB(r,g,b)D3DCOLOR_ARGB(0 xff,r,g,b),Color Representation,(2)D3DCOLORVALUE:使用一个浮点数来表示每一部分的亮度值。其取值范围是0-1,0表示没有亮度,1表示最大亮度。,M,typedef struct _D3DCOLORVALUE float r;float g;float b;float a;D3DCOLORVALUE;,可以使用结构D3DXCOLOR替代D3DCOLORVALUE,前者不仅包含与后者相同的数据成员,还提供了一组有用的构造函数和重载运算符,为颜色运算提供了便利。(两种结构可以相互转换),Colo
4、r Representation,顶点颜色 图元的颜色是由构成它的顶点的颜色决定的。因此,必须把一个颜色成员加入到我们的顶点数据结构中。注意:D3DCOLORVALUE类型不能用在这里,因为Direct3D希望用一个32位的值来描述顶点的颜色,M,Shading,着色处理发生在光栅化和指定图元上的顶点颜色怎样被计算成像素颜色之间。目前使用2种着色模式:平面着色(flat shading)Gouraud着色(Gouraud shading)。平面着色:图元像素的颜色是均匀的,且只指定图元第一个顶点的颜色。因此一旦三角形的第一个顶点被指定成红色,那么它的其他两个顶点也将会是红色而忽略其他顶点颜色。
5、平面着色使物体呈现是斑驳的,因为没有从一个颜色到另一个颜色的平滑过渡。Gouraud着色:平滑着色,图元表面的颜色是由每个顶点通过线性插值来获得。,M,Light Components,为了提高场景的真实性,我们可以为其加入灯光。灯光也能帮助表现物体的立体感以及物体的体积。当使用灯光时,我们不再自己指定顶点的颜色;Direct3D中每个顶点都通过灯光引擎来计算顶点颜色,该计算是基于定义的灯光资源,材质以及灯光资源关心的表面方向。通过灯光模型计算顶点颜色会得到更真实的场景。,M,Light Components,在Direct3D 灯光模型中,灯光是通过灯光资源的三个成员之一来照射的,即有三种灯
6、光。环境光(Ambient Light)这种类型的灯光将被其他所有表面反射且被用在照亮整个场景。例如,物体的各部分都被照亮,对于一个角度,甚至穿过不在光源直接照射的地方他们都能被照亮。漫反射(Diffuse Reflection)这种灯光按特殊方向传播。当它照射到一个表面,它将在所有方向上均匀的反射。因为漫射光在所有方向上都均匀的反射,被反射的光线将到达眼睛而与观察点无关,因此我们不必为观察者考虑。因而,漫射光仅仅需要考虑灯光方向和表面的姿态。这种灯光将成为你的资源中照射的普通灯光。,M,Light Components,镜面反射(Specular Reflection)这种灯光按照特殊方向传
7、播。当它照射到一个表面时,它严格地按照一个方向反射,这将产生一个明亮的光泽,它能在某角度被看见。因为这种灯光在一个方向反射,所以观察点必须考虑灯光的方向和表面姿态,且必须按照镜面灯光等式来考虑。镜面灯光被用在物体上产生高光的地方,这种光泽只有在灯光照射在磨光的表面上才会产生。镜面光比其他灯光类型要求更多的计算;因此,Direct3D提供了一个开关选择。实际上,它默认是被关闭的;要使用镜面光你必须设置D3DRS_SPECULARENABLE渲染状态。,M,Device-SetRenderState(D3DRS_SPECULARENABLE,true);,Light Components,每一种灯
8、光都是通过D3DCOLOR VALUE结构或者描述灯光颜色的D3DXCOLOR来描绘的。,M,D3DXCOLOR redAmbient(1.0f,0.0f,0.0f,1.0f);D3DXCOLOR blueDiffuse(0.0f,0.0f,1.0f,1.0f);D3DXCOLOR whiteSpecular(1.0f,1.0f,1.0f,1.0f);,在D3DXCOLOR类中的alpha值用在描述灯光颜色时是被忽略的。,Materials,在现实世界中我们看到的物体颜色将由物体反射回来的灯光颜色来决定。比如,一个红色的球是红色的,因为它吸收除红色光之外的所有灯光颜色。红色光是被球反射回来进入
9、我们眼睛的,因此我们看到的球是红色的。Direct3D通过定义物体材质来模拟这些所有的现象。材质允许我们定义表面反射灯光的百分比。材质是通过D3DMATERIAL9结构描述的,M,typedef struct _D3DMATERIAL9 D3DCOLORVALUE Diffuse;/指定此表面反射的漫射光数量D3DCOLORVALUE Ambient;/指定此表面反射的环境光数量D3DCOLORVALUE Specular;/指定此表面反射的镜面光数量 D3DCOLORVALUE Emissive;/给表面添加颜色float Power;/指定锐利的镜面高光 D3DMATERIAL9;,例如,
10、想得到一个红色的球。我们将定义球的材质来只反射红光吸收其他颜色的所有光:D3DMATERIAL9 red;:ZeroMemory(设置绿色和蓝色的值为0,这表明材质反射0%此颜色的光。我们设置红色为1,表示材质反射100%的红光。假如我们定义一个只发出蓝色光的光源,对球的光照将失败因为蓝色光将被全部吸收而没有红光被反射。当物体吸收了所有光以后,物体看起来就为黑色。同样的,当物体反射100%的红、绿和蓝光,物体就将呈现为白色。,Materials,顶点结构没有材质属性;一个通用的材质必须被设置。设置它我们使用IDirect3DDevice9:SetMaterial(CONST D3DMATERI
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 游戏 设计 颜色 灯光
链接地址:https://www.31ppt.com/p-5996857.html