计算机图形学-光照模型与面绘制算法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
15
OpenGL方向光源(投射光源)
OpenGL方向效果的特性常量有三个:
GL_SPOT_DIRECTION GL_SPOT_CUTOFF GL_SPOT_EXPONENT
分别表示方向光源的方向、圆锥角以及强 度衰减
16
表面光照效果
光照模型使用为表面设定的各种光学特性 来计算表面的光照效果 这些特性包括透明度、颜色反射系数及各 种表面纹理参数 漫反射:反射光沿各个方向发散出去 镜面反射:反射光集中成明亮的一个点 环境光:场景各表面的反射光生成的光照 效果
3
光源
任一发出辐射能量的对象称为一个光源, 它对场景中其他对象的光照效果有贡献 点光源 无穷远光源 辐射度衰减 方向光源和投射效果 角强度衰减 扩展光源和Warn模型
4
点光源
使用三个RGB分 量指定的单个颜色 的点光源是发光体 的最简单的模型 一个场景的点光源 通过给出其位置和 发射光颜色来定义
I I ambdiff [ I l ,diff I l ,spec ]
l 1 n
k a I a I l [ k d ( N L) k s ( N H ) ns ]
l
n
29
表面的光反射
除了从光源反射光之外,场景中某些 表面还会发射光。 我们可以在光照模型中简单的加入发 射项来模拟表面发射光 然后将这一表面发射项加到由光源导 致的表面反射及背景光照明上
l n
31
RGB颜色考虑
对于RGB颜色描述,光照模型中的每一强 度描述是一个指定该强度的红、绿和蓝分 量的三元素向量。 类似的,反射系数也用RGB分量指定 然后使用分开的表达式计算表面颜色的各 个分量
32
亮度
亮度是颜色的另一特征,有时也称为光 能量 亮度给出了颜色亮或暗的程度信息,是 我们在观察光照时感知亮度变化的心理 上的度量 亮度值计算如下:
1 f redatten (dl ) a0 a1dl a2 dl2
7
强度衰减函数
考虑到无穷远点光源照射下,到光源的距 离是不确定的,强度衰减函数可表达成:
f l ,radatten
1.0 1 a0 a1d l a2 d l2
;如果光源在无穷远处 ;如果光源是局部光源
12
OpenGL点光源函数
OpenGL场景描述中可包括多个点光源,而 各种特性如位置、类型、颜色、衰减和投 射效果等与每个点光源结合在一起 glLight*(lightName,lightProperty,propertyV alue); glEnable(lightName); glEnagle(GL_LIGHTING);
Ik I
( n k ) / n 0
41
指定OpenGL光源颜色
OpenGL中使用符号颜色特性常量 GL_AMBIENT、GL_DIFFUSE和 GL_SPECULAR来设定颜色 其中每一个通过指定一个四元素浮点值来 赋值 光源0的默认颜色是环境光为黑色而漫反射 和镜面反射为白色,其他光源的环境光、 漫反射及镜面反射颜色特性均为黑色
kd I l cos
23
基本光照模型----漫反射
一个表面位置的全部漫反射表达式为:
I diff
k a I a k d I l ( N L) N L 0 k a I a N L 0
24
镜面反射和Phong模型
在光滑表面上看到的高光或镜面反射 是由接近镜面反射角的一个会聚区域 内入射光的全部或绝大部分成为反射 光所导致。 Phong曾提出一个计算镜面范围的经 验公式,称为Phong镜面反射模型
34
半透明材料
当表示半透明对象时,漫反射效果很重要。 经过一个半透明材料后,背景对象变成模 糊影像。 可以通过将背景对象均匀分布在一个有限 范围或使用光线跟踪方法来模拟半透明性
35
光折射
通过考虑光折射,可以模拟真实透明效果 当光线入射到一个透明对象表面时,一部分 光线被反射,另一部分被折射 由于不同对象中光线的速度不同,因此折射 光线的路径与入射光线也不同 折射光线的方向用折射角指定,是关于各材 质的折射率及入射方向的函数
i sin r sin i r
36
基本的透明模型
一个简单的表示透明对象的方法是不考虑 折射导致的路径平移 在实际操作中,该方法假设各对象间的折 射率不变,这样折射角总是与入射角相同。 该方法加速了光强度计算,并且对于较薄 的多边形表面,可是生成合理的透明效果
37
雾气效果
对象颜色上的雾气效果是光照模型中有时 会考虑的另一因素 雾气使颜色变淡、使对象变模糊 可以按照模拟空气的灰尘、烟或雾的多少 来指定一个函数修改表面颜色 雾气效果常用下列衰减函数来模拟:
19
基本光照模型----漫反射
N
N
dA
N
辐射能方向
20
基本光照模型----漫反射
假设每一表面都按理想漫反射体对待,则 可为确定将要按漫反射发散的入射光部分 的每一个表面设定一个参数kd(漫反射系 数) 这样,任何方向的漫反射是一个常数,它 等于入射光强度乘以漫反射系数。 因此,环境光对每一表面上各点的漫反射 贡献可表示为:
30
考虑强度衰减和高光的基本光照模型
包含多光源、衰减因子、方向光效果、无 穷远光源和发光表面的表面反射的通用、 单色光照模型为:
I I surfemissi on I ambdiff f l ,radatten f l ,angatten ( I l ,diff I l ,spec )
5
无穷远光源
离场景非常远的大型光源(如太阳)也可用一 个点发光体逼近,但是在方向效果上有所不同。 远距离光源仅在一个方向照明场景,从远距离 光源到场景中任意位置的光线路径接近不变。
6
辐射强度衰减
辐射光线从一点光源出发并在空间中传播, 离光源距离为dl时,它的振幅将按因子1/d2l 进行衰减。 即接近光源的表面将得到较高的入射光强度, 而较远的表面则强度较小。 生成真实感图形时,采用如下衰减因子:
al
0
10
角强度衰减的一般公式
1.0 f l ,angatten 0.0 (V V ) al obj light
,如果光源不是一个投影光源
,Vobj Vlight cos cosl
,其他
11
OpenGL光照函数
OpenGL点光源函数 指定一个OpenGL光源位置和类型 指定OpenGL光源颜色 指定OpenGL光源的光线强度衰减系数
17
基本光照模型----环境光
在基本光照模型中,可通过设定场景一般 亮度级来引入背景光。这样可以生成对所 有对象都相同的环境光,且近似的给出了 各个照明表面的全局漫反射 环境光光强度用Ia表示
18
基本光照模型----漫反射
在建立表面的漫反射模型时,假设入射光 在各个方向以相同强度发散而与观察位置 无关--理想漫反射体 朗伯余弦定律:在与对象表面法向量夹角 方向上,每个平面单位所发散的光线与夹 角余弦成正比;该方向的光强度可用单位 时间辐射能总量除以表面积在辐射方向的 投影来计算
14
指定OpenGL光源的光线强度衰减系数
光线强度衰减的三个OpenGL特性常量是:
GL_CONSTANT_ATTENUATION GL_LINEAR_ATTENUATION GL_QUADRATIC_ATTENUATION 每个衰减系数用正整数或正浮点数来设定
glLight(GL_LIGHT0,GL_CONSTAN_ATTENUATION,2.0); glLight(GL_LIGHT0,GL_LINEAR_ATTENUATION,1.0); glLight(GL_LIGHT0,GL_QUADRATIC_ATTENUATION,0.5);
lu min ance
visiblef
p( f ) I ( f )df
33
透明表面
对于如玻璃一类的对象,我们可以看到其 后面的东西,称该对象为透明的 如果不能看到一对象后面的东西,则称该 对象为不透明的 通常一个透明的对象表面上会同时产生反 射光和折射光。 折射光的相关作用取决于表面的透明程度 以及是否有光源或光照表面位于透明表面 之后
V R 0 V R 0
27
漫反射和镜面反射的合并
对于单个点光源,可以将光照表面上某点 处的漫反射和镜面反射表示为:
I I diff I spec
ka I a kd Il ( N L) ks Il ( N H )
ns
28
百度文库
多光源的漫反射和镜面反射
对于多个点光源的情况,可以在任意一个 表面点上叠加各个光源所产生的光照效果
由光照模型计算出来的光强度可以是0.0到 1.0之间的任意值,但计算机图形系统只能 显示一个有限强度集 因此,计算出的强度值必须转换为特定图 形系统中的一个系统允许值才能进行显示 另外,系统强度等级的允许数目必须按其 对应到我们的眼睛能感受到强度值差别的 程度来分布
40
分配系统强度等级
对于任何系统,强度等级的允许数量可分 布到从0.0到1.0的范围内,以使该分布对应 于我们对不同等级之间有相同光强度间隔 的感觉 人们对光强度的感觉是按对数等级变化
1
第8章 光照模型与面绘制算法
光源 表面光照效果 基本光照模型 多边形绘制算法 光线跟踪方法 辐射度光照模型 添加表面细节 纹理映射
2
几个基本概念
光照模型
主要用于对象表面某光照位置的颜色计算
表面绘制算法
使用光照模型为对象所有投影位置确定像素颜色
真实感成像包括:
表面特性的精确表示 场景中光照效果的物理描述
f atmo (d ) e f atmo (d ) e
d ( d ) 2
38
阴影
可以使用隐藏面算法确定光源不能照明的 区域 将视点置于光源位置,可以确定哪些表面 是不可见的,这些就是阴影区域 一旦对所有光源确定出阴影区域,这些阴 影可以看做是表面图案而保存于图案数组 中
39
光强度显示
8
方向光源和投射效果
一个局部光源稍加修改 就可产生方向光束或投 影光束 如果一个对象位于光源 的方向范围之外,则它 得不到该光源的光照
l
Vlight
(光线方向向量)
光源
9
角强度衰减
对于一个方向光源,可按照从点光源位置 出发的光强度角计算衰减 常用的方向光源角强度衰减函数为:
f angatten ( ) cos
42
多边形绘制算法
光照模型中的强度计算可以通过多种方法 应用于表面绘制。 可将光照模型用于确定每一投影像素位置 的表面强度,或将光照模型用于少量选定 点且在其他表面位置近似计算强度 图形软件包一般使用扫描线算法实现表面 绘制 更精确的多边形扫描方法为光线跟踪算法
43
恒定强度的明暗处理
最简单的绘制多边形面的方法是为其所有 的投影点赋以相同的颜色 该方法称为恒定强度表面绘制或平面绘制, 为显示对象上的多边形面片提供了快速而 简单的方法,可应用于快速生成一般曲面 的大致外观 平面显示对希望快速标识模拟曲面的单个 多边形面片的设计或其他应用也很有用
25
镜面反射和Phong模型
镜面反射的光强度主要由对象表面材质 属性、光线入射角以及一些其他因素(如 极性、入射光线的颜色等)所决定
I l ,spec W ( ) I l cos
n
26
镜面反射和Phong模型
对象表面上某点处由点光源生成的镜面 反射为:
I l , spec k s I l (V R ) ns 0.0
I ambdiff kd I a
21
基本光照模型----漫反射
当强度为Il的光源照明一个表面时,从该光 源来的入射光总量以来于表面与光源的相 对方向。
22
基本光照模型----漫反射
一个强度为Il的光源的入射光总量为
Il ,incident Il cos
强度为Il的光源的漫反射为
Il ,diff kd Il ,incident
13
指定一个OpenGL光源位置和类型
用于指定光源位置的符号常量是 GL_POSITION 光源类型和光源位置坐标值用一个四元素 浮点数向量来指定
GLfloat light1PosType[ ]={2.0,0.0,3.0,1.0} glLightfv(GL_LIGHT1,GL_POSITION,light1Pos Type); glEnable(GL_LIGHT1);