计算机图形第三次作业,《计算机图形学基础》第三次大作业实验报告.docx

这篇博客详细介绍了使用扫描线算法实现Phong光照模型的过程,包括如何计算反射方向和应用环境光。同时,博主探讨了双线性光强差值和法向差值算法,这两种算法通过光强和法向量的插值来提高渲染效率,并在实际应用中观察到法向算法的镜面反射效果更为聚焦。交互式图形用户界面允许用户调整模型、光源、环境光和反射参数,以及选择不同的渲染算法。
摘要由CSDN通过智能技术生成

第三次实验

1. 实验目的

实现用 Phong 光照明模型显示网格模型(*.smf)。分别实现不使用/使用增量式光强/法

向插值算法,比较三种不同的显示效果和效率。 Phong模型中各参数可调,观察它们的作用。

与用户的交互方式为图形用户界面,操作简单,界面友好。

2. 算法描述

2.1. 基于扫描线算法的Phong 模型实现

上一次大作业中我没有完成扫描线 ZBuffer 算法,使得程序的效率很低,这次作业考虑

到各种计算对时间的消耗会更大, 所以我首先完成了扫描线算法再进行这次作业代码的编写。

对扫描线Z-Buffer算法这里不作详细描述,主要介绍 Phong模型的实现。基于扫描线算

法的 Phong 模型实现是非常方便的,因为最基本的 Phong 模型中每个面的颜色是法向量的

函数,因此每个面的颜色是相同的,这样在扫描线算法之前我首先初始化了一个数组,将各

个面的颜色根据用户提供的参数以及 Phong 模型公式计算出来保存在这个数组里,每一项

对应一个面, 这样在具体扫描线算法的执行过程中每一个点颜色的获取都仅仅是对数组的读

取操作,是O(1)的复杂度,不会消耗太多时间。

算法如下:

1. 对物体表面上的每个点P,均需计算光线L的反射方向R,R=2N(N·L)-L。

为了减少计算量,假设:

2. 光源在无穷远处,L为常向量

3. 视点在无穷远处,V为常向量

4. 用(H•N)近似(R•V),H为L与V的平分向量

5. Phong光照明模型的RGB颜色模型形式

2.2. 双线性光强差值算法

考虑到双线性光强差值算法的核心思想是由顶点的光强插值计算各边的光强,然后由各

边的光强插值计算出多边形内部点的光强,结合之前实现的扫描线 ZBuffer 算法,我使用了

增量的方式实现这个算法,也就是将它和扫描线算法结合起来,在扫描线算法每个面的边表

中多加几个个域来表示当前的光强、光强在X 方向的单位增量和光强在 Y 方向的单位增量,

这样在扫描到每个点的时候就可以根据前一个点的光强以及光强增量获得该点的光强, 另外

在扫描线改变的时候光强也需要根据Y方向的增量来进行相应的修改。

2.3. 双线性法向差值算法

基本思想和双线性光强差值算法相同,也是利用扫描线 ZBuffer 算法作为基础,将一些

数据结构做一些相应修改即可方便实现这个算法。

3. 体会:两种差值算法的比较

双线性差值光强算法和双线性法向算法得到的结果差别不是很大, 相对而言比较明显的

区别是法向算法得到的模型镜面反射效果比较会聚,区域没有光强算法那么大。

5. 交互方式

Model——模型选项,可以进行缩放和旋转;

Illuminant——光源选项,可以选择光源的颜色和位置;

Ambient——环境光选项,可以选择环境光的颜色;

Reflectance——反射参数,可以设置各种参数;

Rendering Algorithm——渲染算法,可以选择三种算法中的一种。

展开阅读全文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值