计算机图形学实验报告及代码

发布时间 : 星期二 文章计算机图形学实验报告及代码更新完毕开始阅读

假设物体不透明,那么物体表面呈现的颜色仅由其反射光决定,通常人们把反射光考虑成三个分量的组合,这三个分量分别是: 环境反射 漫反射 镜面反射 6.2.1 环境反射光

环境反射光是由于邻近物体所造成的光多次反射所产生的,其光亮度可表示为: Ie=IaKa 式中 Ie----物体对环境光反射亮度; Ia----环境光亮度;

Ka----物体表面对环境光反射系数(0≤Ka≤l)。 6.2.2 漫反射光

漫反射光是由特定光源在物体表面反射光中那些向空间各方向均匀反射出去的光。设物体表面在P点法线为N,从P点指向光源的向量为L,两者夹角为θ。 于是,点P处漫反射光的强度为: Id =Ip kd cosθ

式中 Id ——表面漫反射光的亮度; Ip ——入射光的光亮度; kd——漫射系数 0≤Kd ≤l;

θ——入射光线与法线间夹角,0≤θ≤π/2。

当物体表面垂直于入射光方向时(N、L方向一致)看上去最亮。当θ越来越大,接近900时,则看上去越来越暗。 6.2.3 镜面反射光

上面讨论漫反射是一个粗糙无光泽表面,如粉笔。如果一个点光源照射到一个抛光的金属球时,在球上形成一块特别亮的区域,呈现所谓“高光”。它是光源在金属球面上产生的镜面反射光。

对于一个理想的镜面,入射到表面上的光严格地遵守光的反射定律朝一个方向——镜面反射方向反射出去;对于一般光滑表面,由于表面具有一定粗糙度,其表面实际上是由许多朝向不同微小表面组成,其镜面反射光散布在反射方向周围 。 B.T.Phong1975年提出来用余弦函数的幂次来模拟镜面 反射光的空间分布,可表示为:

Is=IpKs cosnφ Is ——观察者接收到镜面反射光亮度; Ip ——入射光的亮度;

φ ——镜面反射方向和视线方向的夹角; n ——镜面反射光的会聚系数

(与物体表面光滑度有关)一般取1~2000; Ks——镜面反射系统(与材料性质和入射光波长有关)。

表面越光滑,其镜面反射光会聚程度较高,n值较大。与漫反射不同,镜面反射光与物体颜色无关。

6.2.4 Phong光照模型

综上所述,从视点观察到物体表面上任一点亮度I应为环境光、漫反射光、镜面反射光的总和,即:

I=Ie+Id+Is 即:

I=Ie Ka+Ip (Kd cosθ+K s cosnφ)

令L为入射光方向单位矢量,N为表面法线单位矢量,R为反射光方向单位矢量,V为视线方向单位矢量,如图,则余弦函数可用矢量点积来表示,即 (L?N) =cosθ (R?V)=cos φ 即

I=Ia Ka+Ip [Kd (L?N)+K s (R?V) n]

对于彩色显示,可把光源分成红、绿、蓝(R?G?B)三基色光,对每一基色分别用相应算式来计算, 即

Ir =Ia Kar +Ip [Kdr (L?N)+Ks (R?V) n] Ig =Ia Kag+Ip [Kdg(L?N)+Ks (R?V) n] Ib =Ia Kab+Ip [Kdb (L?N)+Ks (R?V) n] 上式中镜面反射光一项对三个式子都是一样。 6.3.1 概述

明暗处理就是使物体表面光强度强弱表现。 上一节介绍了简单照明模型,只要知道物体表面某一点的法线就可以算出该点反射光强度。

对于表面是弯曲的形体,计算出曲面每一点法线,然后再按照模型来计算每一点明暗程度,计算工作量太大。 6.3 明暗处理方法

因此,用平面多面体来逼近弯曲表面形体。对于平面多边形来说,由于它的每个表面都是平面,而在同一平面上,任一点法线都是一样,因此,只要用一个固定的强度值来表示面上所有点(即整个面)的明暗程度就可以了,这样使得计算工作大为简化。 6.3.1 概述

为了不使光强度急剧变化,我们用下面两种方法。 1、哥罗德(Gouraud)强度插值法 2、冯(Phong)法向插值法

6.3.2 哥罗德(Gouraud)强度插值法 1、计算多边形每个顶点法向量

求出与该顶点相邻的多面体各面的法向平均值,作为该顶点法向。如图P点法向量为: Np=(N1+N2+N3)/3

其中N1、N2、N3分别是以 P为公共顶点的三个面的外法向;Np是 P点外法向。 2、计算各个顶点的光亮度I1,I2,?Im 6.3.2 哥罗德(Gouraud)强度插值法

3、用插值方法计算出多边形上任一点的光强度,如图:

4、用扫描线方法沿水平方向插值来计算出多边形内部各点的光亮度值,例如点R的光亮 度可以用下式计算:利用哥罗德法思路简明,计算方便,但对于镜面反射处理不理想,我们可用下面方法处理。

6.3.3 冯(Phong)法向插值法

我们上面介绍方法是以光强度进行插值,但对于镜面反射光亮度往往不理想,而Phong法是以法向进行插值,其原理和上面一样,所不同的是在上面插值公式中用N代替I即可,N是一个矢量,I是标量,所以法向插值计算量大一些,但产生效果好,比较真实,能显示出镜面特亮区域。 6.4 阴影生成方法 6.4.1 概述

1、定义:阴影是指景物中没有被光源直接照射的暗区。

在场景中阴影显示出来,可增强图形立体感,使得计算机生成画面更具有真实感。 2、阴影分类 (1)自身阴影 (2)投射阴影

投射阴影又分为:本影和半影 1、本影

物体影子中间全黑的轮廓分明部分是本影。本影是没有被光源照射部分。 2、半影

本影周围半明半暗部分是半影,半影是一部分被光源照射,一部分未被光源照射。本影计算复杂,一般只考虑半影计算。 6.4.2 自身阴影生成方法

生成过程如下:

(l)首先将视点置于光源位置,以光线照射方向作为观察方向,对在光照模型下的物体实施消隐算法,判别出在光照模型下的物体的“隐藏面”并在数据文件中加以标识;

(2)然后按实际的视点位置和观察方向,对物体实施消隐算法,生成真正消隐后的立体图形;

(3)检索数据文件,核查消隐后生成的图形中,是否包含有在光照模型下的“隐藏面”如有,则加以阴影符号标识这些面。 6.4.3 投射阴影生成方法 1、影域多面体方法 2、Z缓冲器方法 3、光线跟踪法

6.4.3 投射阴影生成方法 1、影域多面体方法

基本思想:先求出景物空间中光线被该物体轮廓多边形所遮挡的区域,即影域多面体。然后 再判断其后物体是否在该影域内,若在影域内为阴影。这个算法与扫描线算法相结合就容易实现。

6.4.3 投射阴影生成方法 2、Z缓冲器方法

由于阴影是光线照射不到面观察者却可见到的区域,换句话说,阴影是相对于光源不可见而观察点却可见到的区域。所以在画面中生成阴影的过程基本上相当于二次消隐,一次是对光源消隐,另一次是对视点消隐,Z缓冲器算法就是基于这个原理。 该法的优点:

能处理任意复杂的景物,可以较方便地在光滑曲面上生成阴影,且计算量小,程序简单; 缺点:阴影缓冲器的存储耗费较大。 6.4.3 投射阴影生成方法 3、光线跟踪法

要判断某点是否在阴影内,从该点的光源发一条射线,若与物体不相交,则说明不在阴影内,若与物体相交,说明在阴影内。

这种方法比较易于实现,且可以生成十分真实的阴影,但计算工作量较大。 6.5 整体光照模型和光线跟踪算法

前面介绍了简单光照模型,所考虑条件是对于不透明物体,若是透明物体,简单光照模型公式就不适合了。

我们先考虑透明性物体简单模型。 6.5.1 透明性简单模型 条件:1、透明体不应折射

2、无漫透视,光通过透明体时不产生模糊变形 6.5 整体光照模型 6.5.1 透明性简单模型

如图,A是透明体,Pt是视线穿过透明体与背后物体B的交点。此时由P点光到达 观察者光强度为:

I=(l-t)Ic十tIt 0≤t≤1

Ic为 P点光亮度,t为透明系数,t=0时对应不透明面.t=1为透明面,Ic和It可用 前面介绍的Phong模型计算。

这种方法无法模拟光通过透明介质时产生折射现象,须用下面介绍的整体光照明模型。 6.5.2 整体光照模型

景物表面某点P向观察点辐射的光亮度由三部分组成,依下式求出。 I=I1十Is Ks +It Kt 式中,

I1——光源直接照射引起的反射光亮度, 按照 Phong模型来计算

Is——在镜面反射方向上其它物体向点P轴射的光亮度;

It——在折射方向上其它物体向点P辐射的光亮度; Ks——景物表面的反射系数; Kt——景物的透射系数。

Is、It的确定要求助于光线跟踪算法。 6.5.3 光线跟踪算法

如何求象素点P亮度,由三部分组成:

1、光源直接照射及环境光所产生局部光亮度。 2、反射方向②来的光对 A的作用。 3、透射方向③来的光对A点的作用。 A点光强度为:

IA=I1A+IsAKsA+ItAKtA 为了求IsA和ItA ,必须求IB和IC:

IB= I1B+IsBKsB+ItBKtB IC= I1C+IsCKsC+ItCKtC IsC 可由连续跟踪内反射光线6求得,ItC=背景光。

最后,用 IsA= IB;ItC=IC代入求 A点光强度公式,即可求得A点光强度。 跟踪光线结束条件

跟踪光线未碰到任何物体; 跟踪光线碰到了场景背景;

跟踪光线在经过许多次反射和折射以后,光线对于视点的光强贡献小于某个设定值; 跟踪光线反射或折射次数(即跟踪深度)大于某个设定值; 6.5.4 辐射度算法

辐射度算法的原理是任何击中一个表面的光都被反射回场景之中,是任何光线,不仅仅是直接从光源射出的光线,因此辐射度算法比上述光线跟踪算法要复杂些,同时它的效果也要好得多,可以生成高真实感的光照效果图(如下彩图)。 基本原则

辐射度算法的基本原则就是摒除对物体和光源的划分,认为所有的东西都是潜在的光源,任何可见的东西不是辐射光线,就是反射光线,或者两者都是,只要它是一个光的来源,它即为一个光源。

总之,一切周围能看到的东西都是光源,这样,当我们考虑场景中的某一部分应接受多少光强时,就必须把所有的可见物体发出的光线都累加进去。 九、作业 课后习题 十、本章小结

在本章中,介绍了各种简单光照模型和明暗处理方法。

联系合同范文客服:xxxxx#qq.com(#替换为@)