《《游戏设计》光照.ppt》由会员分享,可在线阅读,更多相关《《游戏设计》光照.ppt(36页珍藏版)》请在三一办公上搜索。
1、网络游戏开发DirectX,第5章 光照,第5章 光照,光照模型光源Direct3D中基本光照的实现,光照模型Direct3D中基本光照的实现,光照模型,掌握光照模型掌握光源的概念掌握Direct3D中基本光照的实现,5.1 光照模型5.1.1 光照计算,第5章 光照,在三维图形程序中,所有的光照效果都能够通过一定的计算方式生成,这种计算的方式就被称为光照模型(Lighting Model)。,在计算机图形学里,把光照模型分为3种:环境光、漫反射、镜面反射。复杂的光照模型可以由这3个分量组成,用公式表示为:,5.1 光照模型5.1.1 光照计算1环境光(Ambient),第5章 光照,一个物体
2、即使没有直接被光源照射,但只要有光线通过其他物体的折射、反射到达物体,它也可能被看见。这种基于整个自然界环境的整体亮度,称为环境光。,环境光没有空间上的位置和方向的特征,只有一个颜色亮度值。环境光模型也被称为全局光照模型(Global Lighting Model)。,5.1 光照模型5.1.1 光照计算2漫反射(Diffuse),第5章 光照,漫反射光的空间位置和方向对物体的照明有很大影响。在漫反射光照中一个物体的表面在所有方向上的反射都是一样的。,5.1 光照模型5.1.1 光照计算2漫反射(Diffuse),第5章 光照,漫反射光照模型遵循Lambert定理,该定理认为,对于理想漫反射的
3、物体表面(完全不光滑并且没有光泽)来说,反射光由物体表面法线N和光向量L(从物体表面的点指向光源的向量)的夹角的余弦值决定。,5.1 光照模型5.1.1 光照计算3镜面反射(Specular),第5章 光照,观察一下金属物品或者玻璃制品(如玻璃杯)的表面,移动自己所处的观察点位置,可以发现玻璃杯表面的亮度也在发生变化。这种现象往往发生在光滑物体表面的高光反射中,称之为镜面反射(Specular Reflection)。,5.1 光照模型5.1.1 光照计算3镜面反射(Specular),第5章 光照,镜面反射的计算公式为:,公式中的p表示物体表面镜面反射的光强度,可以看出,V和R靠拢,反射光就
4、越亮。,5.1 光照模型5.1.1 光照计算3镜面反射(Specular),第5章 光照,R表示反射光线向量,可以通过光向量L与法线向量N求出,5.1 光照模型5.1.2 着色处理1材质,第5章 光照,在一个场景中,决定光照的因素除了光源以外,还有物体的材质。物体表面材质属性决定了它能反射什么颜色的光线以及能反射多少光线。,物体的表面材质有很多材质参数,包括:环境反射、漫反射、镜面反射、光亮度(Power)和自发光(Emissive)。分别表示在各种光照模型下的反射系数。,5.1 光照模型5.1.2 着色处理1材质,第5章 光照,引入材质后,物体表面的反射光计算公式变为:,5.1 光照模型5.
5、1.2 着色处理1材质,第5章 光照,物体最终的颜色是几个分量的颜色之和,在进行颜色的叠加时,由于各个RGB分量叠加的值可能会超出1,而最后渲染时需要将光照颜色压缩到0,1之间。,在图形系统中,可以按照最大的分量对溢出颜色进行缩放,也可以通过限制给定分量对最终颜色的贡献量来避免颜色偏移。,5.1 光照模型5.1.2 着色处理2着色处理,第5章 光照,着色处理是计算光照并由此决定像素颜色的过程,主要存在3种类型的着色处理:Flat、Gouraud和Phong。这3种方法分别基于多边形、顶点和像素来计算光照效果。,Flat着色处理也被称为扁平着色处理,它以三角形为单位进行颜色计算,然后用这种颜色对
6、三角形进行填充。,Flat着色处理,5.1 光照模型5.1.2 着色处理2着色处理,第5章 光照,Gouraud着色处理首先计算三角形每个顶点的颜色,然后用顶点颜色通过插值来计算三角形内部各个点(像素点)的光照。,Gouraud着色处理,5.1 光照模型5.1.2 着色处理2着色处理,第5章 光照,Phong着色处理方法用三角形顶点处的法向量通过插值的方式计算三角形内部各个点的法向量,再根据各个像素点的法向量重新计算像素点的颜色。,Phong着色处理,5.2 光源5.2.1 平行光(Directional Light),第5章 光照,在物理学中,将能够发光的一切物体都叫光源。常见的光源可以分为
7、3种:点光源、平行光、聚光灯。,平行光源表示一个距离被照物体无穷远的光源,由光源发出的光线平行通过整个场景(或者说认为是平行的光线),平行光也可以称为方向光。,平行光只有颜色和方向,没有发光位置。,5.2 光源5.2.2 点光源(Point Light),第5章 光照,点光源具有特定的位置和颜色亮度,向四周所有的方向发出光线,通常也把点光源称为泛光灯(omni)或者球形光源(spherical light)。,5.2 光源5.2.2 点光源(Point Light),第5章 光照,点光源的属性包括:位置、颜色、衰减半径以及衰减率。,衰减半径说明了光照的范围,光照强度在光源所处的位置(中心点)最
8、高,向四周逐渐减弱,到达衰减半径的距离时光强变为0。,5.2 光源5.2.3 聚光灯(Spot Light),第5章 光照,聚光灯和点光源被称为位置光源,因为它们都具有位置的属性,在空间中有一个明确的位置。聚光灯表示从空间的一个特定位置向特定的方向放射光子。,5.2 光源5.2.3 聚光灯(Spot Light),第5章 光照,聚光灯的属性是3种光源中最多的,包括位置(position)、方向(direction)、距离衰减因子(attenuation)、内半径(theta)、外半径(phi)以及内外锥衰减(falloff)。可以把聚光灯光源看作由内外两个锥形组成,内部锥形中的光照强度最强,从
9、内部锥形到外部锥形逐渐减弱,同时,光照强度也受到距离的影响,距离光源位置越远,光照强度越弱。,5.3 Direct3D中基本光照的实现5.3.1 顶点设计1法线计算,第5章 光照,在进行光照计算时,需要顶点的法线。法线分为顶点法线和面法线,面法线垂直于面,在面法线的方向上是正面,背向面法线方向的是背面。,顶点法线垂直于一个面,并且位于顶点之上,顶点法线说明了多边形表面的平滑程度。,5.3 Direct3D中基本光照的实现5.3.1 顶点设计1法线计算,第5章 光照,通常情况下,可以用三角形的面法线作为顶点法线。,/顺时针输入三角形3个顶点,计算面法线。void ComputeTriNormal
10、(D3DXVECTOR3,5.3 Direct3D中基本光照的实现5.3.1 顶点设计2顶点格式,第5章 光照,需要在顶点中添加法线的信息以便进行光照计算。,struct CUBE_CUSTOMVERTEXFLOAT x,y,z;/顶点位置坐标FLOAT tu,tv/纹理坐标FLOAT nx,ny,nz;/顶点法线;/定义顶点格式#define CUBE_D3DFVF_CUSTOMVERTEX(D3DFVF_XYZ|D3DFVF_TEX1|D3DFVF_NORMAL),5.3 Direct3D中基本光照的实现5.3.2 设置物体材质,第5章 光照,在Direct3D中,结构D3DMATERIA
11、L9定义了物体的材质属性。,typedef struct _D3DMATERIAL9 D3DCOLORVALUE Diffuse;D3DCOLORVALUE Ambient;D3DCOLORVALUE Specular;D3DCOLORVALUE Emissive;float Power;D3DMATERIAL9;,5.3 Direct3D中基本光照的实现5.3.2 设置物体材质,第5章 光照,设定好材质,需要用函数SetMaterial指定材质,HRESULT SetMaterial(CONST D3DMATERIAL9*pMaterial/指向定义材质的指针);,D3DMATERIAL9
12、mtrl;ZeroMemory(,5.3 Direct3D中基本光照的实现5.3.3 添加光源1光源类型,第5章 光照,在Direct3D中有3种光源类型:方向光(Directional Light)、点光源(Point Light)和聚光灯(Spot Light)。,typedef enum _D3DLIGHTTYPE D3DLIGHT_POINT=1,/点光源 D3DLIGHT_SPOT=2,/聚光灯 D3DLIGHT_DIRECTIONAL=3,/直射光(或平行光)D3DLIGHT_FORCE_DWORD=0 x7fffffff D3DLIGHTTYPE;,5.3 Direct3D中基本
13、光照的实现5.3.3 添加光源2光源属性,第5章 光照,在Direct3D中,使用结构体D3DLIGHT9定义各种类型光源的属性。,typedef struct _D3DLIGHT9 D3DLIGHTTYPE Type;/光源类型 D3DCOLORVALUE Diffuse;/漫反射颜色 D3DCOLORVALUE Specular;/镜面反射颜色 D3DCOLORVALUE Ambient;/环境光颜色 D3DVECTOR Position;/位置 D3DVECTOR Direction;/方向 float Range;/方位 float Falloff;/光源内外锥衰减 float Att
14、enuation0;/距离衰减系数 float Attenuation1;/距离衰减系数 float Attenuation2;/距离衰减系数 float Theta;/内锥 float Phi;/外锥 D3DLIGHT9;,5.3 Direct3D中基本光照的实现5.3.3 添加光源3设置光源,第5章 光照,光源类型不同,光源的属性也不同。,D3DLIGHT9 d3dLight;memset(,点光源,5.3 Direct3D中基本光照的实现5.3.3 添加光源3设置光源,第5章 光照,光源类型不同,光源的属性也不同。,D3DLIGHT9 d3dLight;memset(,平行光,5.3 D
15、irect3D中基本光照的实现5.3.3 添加光源3设置光源,第5章 光照,光源类型不同,光源的属性也不同。,D3DLIGHT9 d3dLight;memset(,聚光灯,/环境光d3dLight.Ambient.r=0.0f;d3dLight.Ambient.g=0.0f;d3dLight.Ambient.b=0.0f;/镜面反射d3dLight.Specular.r=0.0f;d3dLight.Specular.g=0.0f;d3dLight.Specular.b=0.0f;d3dLight.Attenuation0=1.0f;d3dLight.Attenuation1=0.0f;d3dL
16、ight.Attenuation2=0.0f;d3dLight.Range=100.0f;d3dLight.Phi=10.0f;d3dLight.Theta=1.0f;d3dLight.Falloff=1.0f;,5.3 Direct3D中基本光照的实现5.3.4 激活光照运算,第5章 光照,/m_pDevice为有效的Direct3D设备m_pDevice-SetRenderState(D3DRS_LIGHTING,TRUE),激活光照运算,/m_pDevice为有效的Direct3D设备/d3dLight为一个表示光源的指针m_pDevice-SetLight(0,指定光源,/m_pDev
17、ice为有效的Direct3D设备m_pDevice-LightEnable(1,TRUE);/使能灯光,打开光源,小结(理论课),第5章 光照,光照模型光源Direct3D中基本光照的实现,小测验(题目部分),第5章 光照,单选题1下列选项中不属于光照模型概念的是()。A环境光B漫反射 C镜面反射 D聚光灯2关于着色处理的类型,以下说法正确的是()。APhong着色处理速度最快BFlat着色处理最为真实CFlat着色处理用顶点颜色进行插值运算,得到多边形内部的像素颜色D.Phong着色处理需要单独计算各个像素点的光照3在Direct3D中,点光源不具备的属性是()。A方向B颜色C范围D位置,小测验(答案部分),第5章 光照,单选题1下列选项中不属于光照模型概念的是(D)。A环境光B漫反射 C镜面反射 D聚光灯2关于着色处理的类型,以下说法正确的是(D)。APhong着色处理速度最快BFlat着色处理最为真实CFlat着色处理用顶点颜色进行插值运算,得到多边形内部的像素颜色D.Phong着色处理需要单独计算各个像素点的光照3在Direct3D中,点光源不具备的属性是(A)。A方向B颜色C范围D位置,课后作业,第5章 光照,【作业1】制作霓虹灯,思路分析:利用点光源或者聚光灯,设计光源的颜色和位置属性随着时间而变化。,第5章 光照,The End,
链接地址:https://www.31ppt.com/p-6528029.html