没有合适的资源?快使用搜索试试~ 我知道了~
第五章-OpenGL光照与材质(一).pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 180 浏览量
2022-11-12
01:40:11
上传
评论
收藏 707KB PDF 举报
温馨提示
试读
18页
。。。
资源推荐
资源详情
资源评论
第五章 光照与材质
本章开始,将逐步介绍如何运用 OpenGL 技术进行真实感图形的绘制,充分展示三维图
形虚拟世界的魅力!
OpenGL 光照是计算机真实感图形绘制的非常重要的内容之一,没有光照,虚拟世界便
没有了立体感、层次感和斑斓的色彩(如图 5-1 所示)。本章在建模、图形变换的基础上,
将着重讲述隐藏面的消除、光照模型、明暗处理、光源设置、材质定义和相关的的计算机图
形学概念等。
图 5-1 经过光照计算的球和没有光照的球
考虑到真实感图形绘制的难度,只会讲述最基本的图形学概念和原理,大部分篇幅会从
实践角度进行光照编程,使初学者顺利理解基本的 OpenGL 光照、材质等函数的应用方法,
掌握最基本的真实感图形编程方法,引导读者快速进入 OpenGL 三维图形世界。
5.1 真实感图形基本概念
真实感图形绘制是计算机图形学的一个重要组成部分,它综合利用数学、物理学、计算
机科学和其它科学知识在计算机图形设备上生成象彩色照片那样的具有真实感的图形。一般
说来,用计算机在图形设备上生成真实感图形必须完成以下四个步骤:一是用建模,即用一
定的数学方法建立所需三维场景的几何描述,场景的几何描述直接影响图形的复杂性和图形
绘制的计算耗费;二是将三维几何模型经过一定变换转为二维平面透视投影图;三是确定场
景中所有可见面,运用隐藏面消隐算法将视域外或被遮挡住的不可见面消去;四是计算场景
中可见面的颜色,即根据基于光学物理的光照模型计算可见面投射到观察者眼中的光亮度大
小和颜色分量,并将它转换成适合图形设备的颜色值,从而确定投影画面上每一象素的颜色,
最终生成图形。
由于真实感图形是通过景物表面的颜色和明暗色调来表现景物的几何形状、空间位置以
及表面材料的,而一个物体表面所呈现的颜色是由表面向视线方向辐射的光能决定的。在计
算机图形学中,常采用一个既能表示光能大小又能表示其颜色组成的物理量即光亮度
(luminance)或光强(intensity of light)来描述物体表面朝某方向辐射光能的颜色。采用这
个物理量可以正确描述光在物体表面的反射、透射和吸收现象。
物体表面向空间给定方向辐射的光强可应用光照模型进行计算。简单的光照模型通常假
定物体表面是光滑的且由理想材料构成,因此只考虑光源照射在物体表面产生的反射光,所
生成的图形可以模拟不透明物体表面的明暗过渡,具有一定的真实感效果。复杂的光照模型
除了考虑上述因素外,还要考虑周围环境的光对物体表面的影响。如光亮平滑的物体表面会
将环境中其它物体映像在表面上,而通过透明物体也可看到其后的环境景象。这类光照模型
称为整体光照模型,它能模拟出镜面映像、透明等较精致的光照效果。为了更真实的绘制图
形,还要考虑物体表面的细节纹理,这通常使用一种称为“纹理映射”(texture mapping)的
技术把已有的平面花纹图案映射到物体表面上,并在应用光照模型时将这些花纹的颜色考虑
进去,物体表面细节的模拟使绘制的图形更接近自然景物。
5.2 隐藏面的消除
从视点方向看,近的物体会遮掩远的物体,在三维世界中,被遮掩物体(或物体的一部
分)是不可见的。将实体被遮掩的部分消除掉不显示称为隐藏面的消除。
在 OpenGL 中,完成隐藏面的消除需要对程序作如下的调整。
首先,修改显示模式。把“auxInitDisplayMode (AUX_DOUBLE | AUX_RGBA);”改为
“auxInitDisplayMode (AUX_DOUBLE | AUX_RGBA|| AUX_DEPTH);”。
其次,启动深度测试。即执行:glEnable(GL_DEPTH_TEST);
5.3 光照明模型
物体表面所呈现的颜色是由表面向视线方向辐射进入人眼中光决定的。建立数学模型模
拟物体表面的光照明物理现象,按照数学模型计算物体表面向视线方向辐射进入人眼中的光
亮度,即可获得像素所对应的物体上的可见点的颜色,这样绘制出来的图形具有较强的真实
感,如图 5-1。这些数学模型就称为明暗效应模型或者光照明模型。
当光照射到物体表面时,光可能被吸收、反射和透射,被物体吸收的部分转化为热,只
有反射光、透射光能够进入人眼产生视觉效果,它们决定了物体所呈现的颜色。如果物体是
不透明的,则透射光不存在,物体的颜色仅由反射光决定。这种情形正是简单光照模型需要
考虑的,简单光照模型只考察光源直接照射下物体表面的反射情况。
OpenGL 只考虑简单光照明模型。
5.3.1 光学反射模型
通常物体表面的反射光可以认为包含三个分量:对环境光的反射、对特定光源的漫反射
和镜面反射。
1、环境光的反射
环境光(ambient light)来自周围环境(如墙面)散射的光,在空间近似均匀分布,入射至物
体表面后向空间各个方向均匀反射出去。物体对环境光的反射分量可表示为
I K
a
I
a
,
0 K
a
1
其中 Ia 是入射的环境光亮度,Ka 是环境光漫反射系数,它与物体表面性质有关。如果简单
光照模型中仅考虑环境光的反射分量,则物体表面的亮度是一个恒定值,没有明暗的自然过
渡。
2、散射(diffuse reflection):
光线的散射又称为漫反射,表示特定光源在物体表面的反射光中那些向空间各个方向均
匀反射出去的光。兰伯特(Lambert)余弦定律指出:当点光源照射到一个散射体时,其表面
反射光亮度和光源入射角(入射光线和表面法矢量的夹角)的余弦成正比,即
I K
d
I
l
cos(
)
,
0
2
,
0 K
d
1
图 5-2 漫反射模型示意图 图 5-3 镜面反射模型示意图
其中 I
l
是入射的环境光亮度,Kd 是环境光漫反射系数,它与物体表面性质有关。
从上面的公式和图示可以看出,入射光与表面法向量的夹角越大,向外均匀散发的光线
强度就越小,入射光与表面法向量的夹角越小,向外均匀散发的光线强度就越大,夹角为0
时,散射光达到最大值。
3、镜面反射(specular reflection):
表示特定光源在物体表面的反射光中那些遵循反射定律的光。对于纯镜面,反射光和入
射光对称地分布在表面法向的两侧(如图 5-3 所示)。对于一般光滑表面,可理解为由许多
朝向不同的微小平面构成,入射光经许多微小平面反射后形成的反射光不再是单向的,而是
分布于理想镜面反射方向的周围。通常采用余弦函数的幂次来模拟一般光滑表面的镜面反射
光的空间分布。 镜面反射光的计算公式为
I K
s
I
l
cos
n
(
)
,
0
2
I
l
是入射光亮度。Ks 是物体表面镜面反射系数,
为理想镜面反射方向与视线方向的夹角,
n 为镜面反射光的会聚指数。
5.3.2 兰伯特反射光照模型
只考虑对环境光的反射分量和对特定光源的散射分量,则物体表面的反射光亮度为 :
I K
a
I
a
K
d
I
l
cos(
)
,
0
2
,
0 K
a
K
d
1
适用于粗糙、无光泽的物体,如粉笔、黑板。对于擦亮的金属、光滑的塑料等光亮物体
不能模拟(缺少镜面反射)。
5.3.3 Phong 光照模型
综合考虑环境光、散射光和镜面反射光,则物体表面的反射光亮度为
I K
a
I
a
K
d
I
l
cos(
) K
s
I
l
cos
n
(
)
实际上光的亮度与传播距离的平方成反比,Il 为光源处的光亮度,光线抵达物体表面以
及从物体表面反射进入观察者眼睛的过程中存在衰减的问题。漫反射分量和镜面反射分量应
该乘以一个衰减因子,以取得远的物体看起来暗些的效果。当场景的投影变换采用透视投影
时,Warnock 提出线性衰减因子 1/d,而 Rommey 提出衰减因子 1/dp 可以取得比较真实的效
果。此时 Phong 光照模型可以进一步描述为
I K
a
I
a
I
l
n
K cos(
) K cos (
)
d s
p
d K
其中 d 是物体上当前考察点到视点的距离,K 是一个任意的常量,0=< P <=2。
计算物体上可见点光亮度时通常是将光亮度转换成为光栅图形显示器采用的RGB 三基
色,这时计算需要在三个基色上分别进行。如果存在多个光源,则将效果线性相加。此时光
照模型可以描述为
I K
a
I
a
j1
m
I
l
j
d
p
K
(K
d
cos
j
K
s
cos
n
j
)
r
a
1
K
a
g
a
d
p
K
b
a
r
l
j
m
n
(K
d
cos
j
K
s
cos
j
)
g
l
j
j 1
b
l
j
建立了光照模型后,就可以用于消隐算法中计算像素所对应的物体上可见点的亮度。
5.4 明暗处理
光照计算时需要用到多边形上点的法矢量,如果多边形上点的法矢量总是取多边形的面
法矢,则由于不同平面片之间法矢量不连续,最终绘制出来的图像看起来呈多面体状(图
5-4(a))。
(a)用不连续的面法矢量绘制结果
图 5-4 漫反射模型示意图
(b)用取平均的点法矢量绘制结果
解决的方法是:首先多边形的顶点法矢量不再简单的取为其所在多边形的面法矢,而是
取为共享该顶点的所有多边形的面法矢的平均值;其次多边形内部点的法矢量也不再简单地
取为多边形的面法矢,而是利用多边形顶点的法矢量通过双线性插值计算出。使用这种方法
绘制的结果如图 5-4(b)所示。
明暗处理有两种方法:一种是 Phong 明暗处理(插值法矢),一种是 Gouraud 明暗处理
(插值颜色)。
5.4.1 Phong 明暗处理(插值法矢)
如图 5-5 所示,P1、P2、P3 是多边形顶点,其法矢量视为共该点的所有多边形法矢量
的平均值。由 P1、P2 的法矢量可以线性插值计算出 A 点的法矢量,由 P1、P3 的法矢量可
以线性插值计算出 B 点的法矢量,于是 P 点的法矢量可以由 A、B 点处的法矢量线性插值
计算出,计算出 P 的法矢量后应用简单光照模型可以计算出 P 点的光亮度。
图 5-5 P 点法矢量的双线性插值
5.4.2 Gouraud 明暗处理(插值颜色)
由于每个像素点都需要法向量插值和光照计算,Phong 明暗处理计算量较大,一种简化
的处理方法是先利用光照模型计算出多边形顶点处亮度,然后对亮度进行双线性插值,直接
获得像素的颜色,如图 5-5,P1、P2、P3 是多边形顶点,其亮度已经计算出。A 点的亮度可
剩余17页未读,继续阅读
资源评论
不吃鸳鸯锅
- 粉丝: 8292
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于pytorch+OpenCV的手写数字识别源码+使用文档+全部资料(优秀项目).zip
- 基于C++和Opencv的传统手势识别源码+使用文档+全部资料(优秀项目).zip
- 与我最爱的人度过的第二个情人节,花心思制作的一个网页送给她
- Python实战:高效读取Excel数据.zip
- 历史学习网站 JAVA+Vue.js+SpringBoot+MySQL
- µ×ɼµÂ͵ƻºÍÒ¿ÏÍɼÂÎ×Á
- 基于pytorch+OpenCV的手写数字识别源码+使用文档+全部资料(优秀项目).zip
- C++ 一个 回文素数 回文素 数
- C++ 一个 回文素数 回文素 数
- 基于pytorch+OpenCV的手写数字识别源码+使用文档+全部资料(优秀项目).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功