d游戏设计光照_第1页
d游戏设计光照_第2页
d游戏设计光照_第3页
d游戏设计光照_第4页
d游戏设计光照_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

会计学1d游戏设计光照5.1光照模型5.1.1光照计算第5章光照在三维图形程序中,所有的光照效果都能够通过一定的计算方式生成,这种计算的方式就被称为光照模型(LightingModel)。在计算机图形学里,把光照模型分为3种:环境光、漫反射、镜面反射。复杂的光照模型可以由这3个分量组成,用公式表示为:第1页/共35页5.1光照模型5.1.1光照计算1.环境光(Ambient)第5章光照一个物体即使没有直接被光源照射,但只要有光线通过其他物体的折射、反射到达物体,它也可能被看见。这种基于整个自然界环境的整体亮度,称为环境光。环境光没有空间上的位置和方向的特征,只有一个颜色亮度值。环境光模型也被称为全局光照模型(GlobalLightingModel)。第2页/共35页5.1光照模型5.1.1光照计算2.漫反射(Diffuse)第5章光照漫反射光的空间位置和方向对物体的照明有很大影响。在漫反射光照中一个物体的表面在所有方向上的反射都是一样的。第3页/共35页5.1光照模型5.1.1光照计算2.漫反射(Diffuse)第5章光照漫反射光照模型遵循Lambert定理,该定理认为,对于理想漫反射的物体表面(完全不光滑并且没有光泽)来说,反射光由物体表面法线N和光向量L(从物体表面的点指向光源的向量)的夹角的余弦值决定。第4页/共35页5.1光照模型5.1.1光照计算3.镜面反射(Specular)第5章光照观察一下金属物品或者玻璃制品(如玻璃杯)的表面,移动自己所处的观察点位置,可以发现玻璃杯表面的亮度也在发生变化。这种现象往往发生在光滑物体表面的高光反射中,称之为镜面反射(SpecularReflection)。第5页/共35页5.1光照模型5.1.1光照计算3.镜面反射(Specular)第5章光照镜面反射的计算公式为:公式中的p表示物体表面镜面反射的光强度,可以看出,V和R靠拢,反射光就越亮。第6页/共35页5.1光照模型5.1.1光照计算3.镜面反射(Specular)第5章光照R表示反射光线向量,可以通过光向量L与法线向量N求出第7页/共35页5.1光照模型5.1.2着色处理1.材质第5章光照在一个场景中,决定光照的因素除了光源以外,还有物体的材质。物体表面材质属性决定了它能反射什么颜色的光线以及能反射多少光线。物体的表面材质有很多材质参数,包括:环境反射、漫反射、镜面反射、光亮度(Power)和自发光(Emissive)。分别表示在各种光照模型下的反射系数。第8页/共35页5.1光照模型5.1.2着色处理1.材质第5章光照引入材质后,物体表面的反射光计算公式变为:第9页/共35页5.1光照模型5.1.2着色处理1.材质第5章光照物体最终的颜色是几个分量的颜色之和,在进行颜色的叠加时,由于各个RGB分量叠加的值可能会超出1,而最后渲染时需要将光照颜色压缩到[0,1]之间。在图形系统中,可以按照最大的分量对溢出颜色进行缩放,也可以通过限制给定分量对最终颜色的贡献量来避免颜色偏移。第10页/共35页5.1光照模型5.1.2着色处理2.着色处理第5章光照着色处理是计算光照并由此决定像素颜色的过程,主要存在3种类型的着色处理:Flat、Gouraud和Phong。这3种方法分别基于多边形、顶点和像素来计算光照效果。Flat着色处理也被称为扁平着色处理,它以三角形为单位进行颜色计算,然后用这种颜色对三角形进行填充。Flat着色处理第11页/共35页5.1光照模型5.1.2着色处理2.着色处理第5章光照Gouraud着色处理首先计算三角形每个顶点的颜色,然后用顶点颜色通过插值来计算三角形内部各个点(像素点)的光照。Gouraud着色处理第12页/共35页5.1光照模型5.1.2着色处理2.着色处理第5章光照Phong着色处理方法用三角形顶点处的法向量通过插值的方式计算三角形内部各个点的法向量,再根据各个像素点的法向量重新计算像素点的颜色。Phong着色处理第13页/共35页5.2光源5.2.1平行光(DirectionalLight)第5章光照在物理学中,将能够发光的一切物体都叫光源。常见的光源可以分为3种:点光源、平行光、聚光灯。平行光源表示一个距离被照物体无穷远的光源,由光源发出的光线平行通过整个场景(或者说认为是平行的光线),平行光也可以称为方向光。平行光只有颜色和方向,没有发光位置。第14页/共35页5.2光源5.2.2点光源(PointLight)第5章光照点光源具有特定的位置和颜色亮度,向四周所有的方向发出光线,通常也把点光源称为泛光灯(omni)或者球形光源(sphericallight)。第15页/共35页5.2光源5.2.2点光源(PointLight)第5章光照点光源的属性包括:位置、颜色、衰减半径以及衰减率。衰减半径说明了光照的范围,光照强度在光源所处的位置(中心点)最高,向四周逐渐减弱,到达衰减半径的距离时光强变为0。第16页/共35页5.2光源5.2.3聚光灯(SpotLight)第5章光照聚光灯和点光源被称为位置光源,因为它们都具有位置的属性,在空间中有一个明确的位置。聚光灯表示从空间的一个特定位置向特定的方向放射光子。第17页/共35页5.2光源5.2.3聚光灯(SpotLight)第5章光照聚光灯的属性是3种光源中最多的,包括位置(position)、方向(direction)、距离衰减因子(attenuation)、内半径(theta)、外半径(phi)以及内外锥衰减(falloff)。可以把聚光灯光源看作由内外两个锥形组成,内部锥形中的光照强度最强,从内部锥形到外部锥形逐渐减弱,同时,光照强度也受到距离的影响,距离光源位置越远,光照强度越弱。第18页/共35页5.3Direct3D中基本光照的实现5.3.1顶点设计1.法线计算第5章光照在进行光照计算时,需要顶点的法线。法线分为顶点法线和面法线,面法线垂直于面,在面法线的方向上是正面,背向面法线方向的是背面。顶点法线垂直于一个面,并且位于顶点之上,顶点法线说明了多边形表面的平滑程度。第19页/共35页5.3Direct3D中基本光照的实现5.3.1顶点设计1.法线计算第5章光照通常情况下,可以用三角形的面法线作为顶点法线。//顺时针输入三角形3个顶点,计算面法线。voidComputeTriNormal(D3DXVECTOR3&v1,D3DXVECTOR3&v2, D3DXVECTOR3&v3,D3DVECTOR&normalVec){ D3DXVECTOR3tmpV1=v1-v2; D3DXVECTOR3tmpV2=v1-v3; D3DXVECTOR3tmpNormalVec; D3DXVec3Cross(&tmpNormalVec,&tmpV1,&tmpV2); //向量叉乘

D3DXVec3Normalize(&tmpNormalVec,&tmpNormalVec); //单位化向量

normalVec=(D3DVECTOR)tmpNormalVec;}第20页/共35页5.3Direct3D中基本光照的实现5.3.1顶点设计2.顶点格式第5章光照需要在顶点中添加法线的信息以便进行光照计算。structCUBE_CUSTOMVERTEX{ FLOATx,y,z; //顶点位置坐标

FLOATtu,tv //纹理坐标

FLOATnx,ny,nz; //顶点法线 };//定义顶点格式#defineCUBE_D3DFVF_CUSTOMVERTEX\ (D3DFVF_XYZ|D3DFVF_TEX1|D3DFVF_NORMAL)第21页/共35页5.3Direct3D中基本光照的实现5.3.2设置物体材质第5章光照在Direct3D中,结构D3DMATERIAL9定义了物体的材质属性。typedefstruct_D3DMATERIAL9{D3DCOLORVALUEDiffuse;D3DCOLORVALUEAmbient;D3DCOLORVALUESpecular;D3DCOLORVALUEEmissive;floatPower;}D3DMATERIAL9;第22页/共35页5.3Direct3D中基本光照的实现5.3.2设置物体材质第5章光照设定好材质,需要用函数SetMaterial指定材质HRESULTSetMaterial(CONSTD3DMATERIAL9*pMaterial //指向定义材质的指针);D3DMATERIAL9mtrl;ZeroMemory(&mtrl,sizeof(D3DMATERIAL9));mtrl.Diffuse.r=0.8f;mtrl.Diffuse.g=0.6f;mtrl.Diffuse.b=0.5f;mtrl.Diffuse.a=1.0f;//m_pD3DDevice为有效的Direct3D设备m_pD3DDevice->SetMaterial(&mtrl);第23页/共35页5.3Direct3D中基本光照的实现5.3.3添加光源1.光源类型第5章光照在Direct3D中有3种光源类型:方向光(DirectionalLight)、点光源(PointLight)和聚光灯(SpotLight)。typedefenum_D3DLIGHTTYPE{D3DLIGHT_POINT=1, //点光源

D3DLIGHT_SPOT=2, //聚光灯

D3DLIGHT_DIRECTIONAL=3, //直射光(或平行光)

D3DLIGHT_FORCE_DWORD=0x7fffffff}D3DLIGHTTYPE;第24页/共35页5.3Direct3D中基本光照的实现5.3.3添加光源2.光源属性第5章光照在Direct3D中,使用结构体D3DLIGHT9定义各种类型光源的属性。typedefstruct_D3DLIGHT9{D3DLIGHTTYPEType; //光源类型D3DCOLORVALUEDiffuse; //漫反射颜色D3DCOLORVALUESpecular; //镜面反射颜色D3DCOLORVALUEAmbient; //环境光颜色D3DVECTORPosition; //位置D3DVECTORDirection; //方向floatRange; //方位floatFalloff; //光源内外锥衰减floatAttenuation0; //距离衰减系数floatAttenuation1; //距离衰减系数floatAttenuation2; //距离衰减系数floatTheta; //内锥floatPhi; //外锥}D3DLIGHT9;第25页/共35页5.3Direct3D中基本光照的实现5.3.3添加光源3.设置光源第5章光照光源类型不同,光源的属性也不同。D3DLIGHT9d3dLight;memset(&d3dLight,0,sizeof(d3dLight));d3dLight.Type=D3DLIGHT_POINT;d3dLight.Diffuse.r=1.0f;d3dLight.Diffuse.g=1.0f;d3dLight.Diffuse.b=1.0f;d3dLight.Ambient.r=0.1f;d3dLight.Ambient.g=0.1f;d3dLight.Ambient.b=0.1f;d3dLight.Position.x=-300;d3dLight.Position.y=300;d3dLight.Position.z=-300;d3dLight.Attenuation0=1.0f; d3dLight.Attenuation1=0.0f;d3dLight.Attenuation2=0.0f;d3dLight.Range=400.0f;点光源第26页/共35页5.3Direct3D中基本光照的实现5.3.3添加光源3.设置光源第5章光照光源类型不同,光源的属性也不同。D3DLIGHT9d3dLight;memset(&d3dLight,0,sizeof(d3dLight));d3dLight.Type=D3DLIGHT_DIRECTIONAL;d3dLight.Direction.x=1.0f;d3dLight.Direction.y=0.0f;d3dLight.Direction.z=0.0f;d3dLight.Diffuse.r=1.0f;d3dLight.Diffuse.g=1.0f;d3dLight.Diffuse.b=1.0f;//环境光d3dLight.Ambient.r=0.1f;d3dLight.Ambient.g=0.1f;d3dLight.Ambient.b=0.1f;平行光第27页/共35页5.3Direct3D中基本光照的实现5.3.3添加光源3.设置光源第5章光照光源类型不同,光源的属性也不同。D3DLIGHT9d3dLight;memset(&d3dLight,0,sizeof(d3dLight));d3dLight.Type=D3DLIGHT_SPOT;d3dLight.Position.x =-300.0f;d3dLight.Position.y =300.0f;d3dLight.Position.z =-300.0f;d3dLight.Direction.x=1.0f;d3dLight.Direction.y=0.0f;d3dLight.Direction.z=0.0f;d3dLight.Diffuse.r=1.0f;d3dLight.Diffuse.g=1.0f;d3dLight.Diffuse.b=1.0f;聚光灯//环境光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;d3dLight.Attenuation2=0.0f;d3dLight.Range=100.0f;d3dLight.Phi=10.0f;d3dLight.Theta=1.0f;d3dLight.Falloff =1.0f;第28页/共35页5.3Direct3D中基本光照的实现5.3.4激活光照运算第5章光照//m_pDevice为有效的Direct3D设备m_pDevice->SetRenderState(D3DRS_LIGHTING,TRUE)激活光照运算//m_pDevice为有效的Direct3D设备//d3dLight为一个表示光源的指针m_pDevice->SetLight(0,&d3dLight);指定光源//m_pDevice为有效的Direct3D设备m_pDevice->LightEnable(1,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论