《3d游戏设计》033-034 光照
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
点光源的属性包括:位置、颜色 颜色、衰减半径以及衰减率。
衰减半径说明了光照的范围,光照强度在光源所处的位置 光照强度在光源所处的位置(中心点)最高 向四周逐渐减弱,到达衰减半径的距离时光强变为 到达衰减半径的距离时光强变为0。
1 d max − d Id = d max − d min 0
在计算机图形学里,把光照模型分为 把光照模型分为3种:环境光、漫反射、镜面反射。复 杂的光照模型可以由这3个分量组成, ,用公式表示为:
I = I ambient + I diffuse + I specular
5.1 光照模型
5.1.1 光照计算
1.环境光(Ambient)
一个物体即使没有直接被光源照射,但只要有光线通过其他物体的折射、 一个物体即使没有直接被光源照射 环境光。 环境光没有空间上的位置和方向的特征,只有一个颜色亮度值。 环境光没有空间上的位置和方向的特征 环境光模型也被称为全局光照模型(Global Lighting Model)。 环境光模型也被称为全局光照模型
Flat着色处理也被称为扁平着色处理 着色处理也被称为扁平着色处理,它以三角形为单位进行颜色计算, 然后用这种颜色对三角形进行填充。 。
5.1 光照模型
5.1.2 着色处理
2.着色处理 • Gouraud着色处理 Gouraud
Gouraud着色处理首先计算三角形每个顶点的颜色 着色处理首先计算三角形每个顶点的颜色,然后用顶点颜色通过插 值来计算三角形内部各个点(像素点 像素点)的光照。
Biblioteka Baidu
D3DMATERIAL9 mtrl; ZeroMemory( &mtrl , sizeof(D3DMATERIAL9)); (D3DMATERIAL9)); mtrl.Diffuse.r = 0.8f; mtrl.Diffuse.g = 0.6f; mtrl.Diffuse.b = 0.5f; mtrl.Diffuse.a = 1.0f; //m_pD3DDevice为有效的Direct3D设备 设备
if d ≤ d min
if d min < d < d max if d > d max
5.2 光源
5.2.3 聚光灯(Spot Light)
聚光灯和点光源被称为位置光源,因为它们都具有位置的属性,在空间中 聚光灯和点光源被称为位置光源
有一个明确的位置。聚光灯表示从空间的一个特定位置向特定的方向放射光 聚光灯表示从空间的一个特定位置向特定的方向放射光
5.1 光照模型
5.1.2 着色处理
1.材质
在一个场景中,决定光照的因素除了光源以外 决定光照的因素除了光源以外,还有物体的材质。物体表 面材质属性决定了它能反射什么颜色的光线以及能反射多少光线。 面材质属性决定了它能反射什么颜色的光线以及能反射多少光线
物体的表面材质有很多材质参数, ,包括:环境反射、漫反射、镜面反射、 系数。
法线分为顶点法线和面法线,面法线垂直于面 面法线垂直于面,在面法线的方向上是正面
顶点法线垂直于一个面,并且位于顶点之上 并且位于顶点之上,顶点法线说明了多边形表面 的平滑程度。
5.3 Direct3D中基本光照的实现 中基本光照的实现
5.3.1 顶点设计
1.法线计算 通常情况下,可以用三角形的面法线作为顶点法线 可以用三角形的面法线作为顶点法线。 uuu u u v v v p1 = AB = A − B uuu uv u v v p2 = CB = C − B
5.3 Direct3D中基本光照的实现 中基本光照的实现
5.3.2 设置物体材质
在Direct3D中,结构D3DMATERIAL9 D3DMATERIAL9定义了物体的材质属性。
typedef struct _D3DMATERIAL9 { D3DCOLORVALUE Diffuse; D3DCOLORVALUE Ambient; D3DCOLORVALUE Specular; D3DCOLORVALUE Emissive; float Power; } D3DMATERIAL9;
察点位置,可以发现玻璃杯表面的亮度也在发生变化 可以发现玻璃杯表面的亮度也在发生变化。这种现象往往发生在光
法线N 法线 光向量L 反射光向量R
观察者向量V
α
5.1 光照模型
5.1.1 光照计算
3.镜面反射(Specular)
镜面反射的计算公式为:
I specular = S specular × (cos α ) = S specular × (V • R)
5.3 Direct3D中基本光照的实现 中基本光照的实现
5.3.1 顶点设计
2.顶点格式 需要在顶点中添加法线的信息以便进行光照计算。 需要在顶点中添加法线的信息以便进行光照计算
struct CUBE_CUSTOMVERTEX { FLOAT x, y, z; FLOAT tu, tv FLOAT nx, ny, nz; }; //定义顶点格式 #define CUBE_D3DFVF_CUSTOMVERTEX \ (D3DFVF_XYZ|D3DFVF_TEX1|D3DFVF_NORMAL) 顶点位置坐标 //顶点位置坐标 //纹理坐标 //顶点法线 顶点法线
在漫反射光照中一个物体的表面在所有方向上的反射都是一样的。 在漫反射光照中一个物体的表面在所有方向上的反射都是一样的
5.1 光照模型
5.1.1 光照计算
2.漫反射(Diffuse)
漫反射光照模型遵循Lambert定理 定理,该定理认为,对于理想漫反射的物体表 物体表面的点指向光源的向量)的夹角的余弦值决定 的夹角的余弦值决定。
光亮度(Power)和自发光(Emissive Emissive)。分别表示在各种光照模型下的反射
5.1 光照模型
5.1.2 着色处理
1.材质
引入材质后,物体表面的反射光计算公式变为 物体表面的反射光计算公式变为:
ITotal = I Ambient + I Diffuse + I Specular + I Emissive I ambient = mambient S ambient I diffuse = mdiffuse S diffuse ( L • N ) I specular = mspecular S specular (V • R ) p
可以把聚光灯光源看作由内外两个锥形组成,内部锥形中的光照强度最强 可以把聚光灯光源看作由内外两个锥形组成 源位置越远,光照强度越弱。
从内部锥形到外部锥形逐渐减弱,同时 同时,光照强度也受到距离的影响,距离
5.3 Direct3D中基本光照的实现 中基本光照的实现
5.3.1 顶点设计
1.法线计算 在进行光照计算时,需要顶点的法线 需要顶点的法线。 背向面法线方向的是背面。
ITotal = I Ambient + I Diffuse + I Specular + I Emissive
5.3 Direct3D中基本光照的实现 中基本光照的实现
5.3.2 设置物体材质
设定好材质,需要用函数SetMaterial SetMaterial指定材质
HRESULT SetMaterial( CONST D3DMATERIAL9 *pMaterial ); //指向定义材质的指针
p
p
公式中的p表示物体表面镜面反射的光强度 表示物体表面镜面反射的光强度,可以看出,V和R靠拢,反射光 就越亮。
5.1 光照模型
5.1.1 光照计算
3.镜面反射(Specular) 可以通过光向量L与法线向量N求出 R表示反射光线向量,可以通过光向量
R = 2( N • L ) N + ( − L ) = 2( N • L ) N − L
面(完全不光滑并且没有光泽)来说 来说,反射光由物体表面法线N和光向量L(从
I diffuse = S diffuse × cos α
I d iffu se = S d iffu se × ( L • N )
5.1 光照模型
5.1.1 光照计算
3.镜面反射(Specular)
观察一下金属物品或者玻璃制品( (如玻璃杯)的表面,移动自己所处的观 滑物体表面的高光反射中,称之为镜面反射 称之为镜面反射(Specular Reflection)。
第5章 光照 章
网络游戏开发 ——DirectX
专业教程 理论讲解部分
光照模型 光源 Direct3D中基本光照的实现 光照模型 Direct3D中基本光照的实现 光照模型
掌握光照模型 掌握光源的概念 掌握Direct3D中基本光照的实现 中基本光照的实现
5.1 光照模型
5.1.1 光照计算
在三维图形程序中,所有的光照效果都能够通过一定的计算方式生成 所有的光照效果都能够通过一定的计算方式生成,这 种计算的方式就被称为光照模型(Lighting Model Lighting Model)。
n = p1 × p2
//顺时针输入三角形3个顶点,计算面法线。 void ComputeTriNormal(D3DXVECTOR3& v1, D3DXVECTOR3& v2, (D3DXVECTOR3& D3DXVECTOR3& v3,D3DVECTOR& normalVec) { D3DXVECTOR3 tmpV1=v1-v2; D3DXVECTOR3 tmpV2=v1-v3; D3DXVECTOR3 tmpNormalVec; D3DXVec3Cross(&tmpNormalVec, &tmpV1, &tmpV2); , D3DXVec3Normalize(&tmpNormalVec,&tmpNormalVec tmpNormalVec,&tmpNormalVec); //向量叉乘 //单位化向量
5.1 光照模型
5.1.2 着色处理
1.材质
物体最终的颜色是几个分量的颜色之和,在进行颜色的叠加时,由于各个 物体最终的颜色是几个分量的颜色之和 间。
RGB分量叠加的值可能会超出1,而最后渲染时需要将光照颜色压缩到 而最后渲染时需要将光照颜色压缩到[0,1]之
在图形系统中,可以按照最大的分量对溢出颜色进行缩放 可以按照最大的分量对溢出颜色进行缩放,也可以通过限 制给定分量对最终颜色的贡献量来避免颜色偏移。 制给定分量对最终颜色的贡献量来避免颜色偏移
5.2 光源
5.2.3 聚光灯(Spot Light)
种光源中最多的,包括位置(position)、方向 聚光灯的属性是3种光源中最多的 (phi)以及内外锥衰减(falloff)。 )。
(direction)、距离衰减因子(attenuation attenuation)、内半径(theta)、外半径
5.1 光照模型
5.1.2 着色处理
2.着色处理 • Phong着色处理 Phong
Phong着色处理方法用三角形顶点处的法向量通过插值的方式计算三角形内 着色处理方法用三角形顶点处的法向量通过插值的方式计算三角形内 部各个点的法向量,再根据各个像素点的法向量重新计算像素点的颜色 再根据各个像素点的法向量重新计算像素点的颜色。
5.2 光源
5.2.1 平行光(Directional Light) )
在物理学中,将能够发光的一切物体都叫光源 将能够发光的一切物体都叫光源。 常见的光源可以分为3种:点光源 点光源、平行光、聚光灯。
平行光源表示一个距离被照物体无穷远的光源,由光源发出的光线平行通 平行光源表示一个距离被照物体无穷远的光源 过整个场景(或者说认为是平行的光线 或者说认为是平行的光线),平行光也可以称为方向光。
反射到达物体,它也可能被看见。这种基于整个自然界环境的整体亮度 这种基于整个自然界环境的整体亮度,称为
I ambient = S ambient
5.1 光照模型
5.1.1 光照计算
2.漫反射(Diffuse)
漫反射光的空间位置和方向对物体的照明有很大影响。 漫反射光的空间位置和方向对物体的照明有很大影响
5.1 光照模型
5.1.2 着色处理
2.着色处理
着色处理是计算光照并由此决定像素颜色的过程,主要存在3种类型的着色 着色处理是计算光照并由此决定像素颜色的过程 算光照效果。 • Flat着色处理
处理:Flat、Gouraud和Phong。这3种方法分别基于多边形 种方法分别基于多边形、顶点和像素来计
5.2 光源
5.2.2 点光源(Point Light)
点光源具有特定的位置和颜色亮度,向四周所有的方向发出光线,通常也 点光源具有特定的位置和颜色亮度 把点光源称为泛光灯(omni)或者球形光源 或者球形光源(spherical light)。
5.2 光源
5.2.2 点光源(Point Light)