1.实验目的:
- 通过示范代码1,理解简单光照明模型的基本原理与实现;
- 通过示范代码2和太阳系示范代码,学习与掌握OpenGL光照与材质设置与使用方法。
2.实验内容:
在示范代码1基础上,按以下要求修改:
(1) 阅读和修改示范代码中的有关参数,产生不同光照效果,观察显示效果。挑选两张修改的效果图保存为图1-2,与对应修改的代码一起保存至word实验文档中(15分钟);
(2) 将代码中的球体改为圆柱体,将圆柱体的光照效果图存为图3,与对应修改的代码一起保存至word实验文档中(25分钟);
在示范代码2的基础上,按以下要求完成任务:
(3) 阅读和修改示范代码2中的有关参数,产生不同光照效果,观察显示效果。挑选两张修改的效果图保存为图4-5,与对应修改的代码一起保存至word实验文档中(15分钟);
(4)参考太阳系示范代码,该代码显示一个简单的太阳系模型,尝试为其增加光照与材质效果,挑选两张修改的效果图保存为图6-7,与对应修改的代码一起保存至word实验文档中(25分钟);
(5) 整理word实验文档,将其命名为“序号-姓名-Prj6.doc”,电子版提交至雨课堂,A4打印稿下一次课前或实验课前提交。
3.实验原理:
Phong光照明模型是由物体表面上一点P反射到视点的光强I为环境光的反射光强Ie、理想漫反射光强Id、和镜面反射光Is的总和,即
$$
I = I_a k_a + I_p K_d(LN) + I_p K_s(RV)^n
$$
其中R,V,N为单位矢量;$I_p$为点光源发出的入射光强;$I_a$为环境光的漫反射光强;$K_a$环境光的漫反射系数;$K_d$漫反射系数( )取决于表面的材料;$K_s$镜面反射系数( );n幂次,用以模拟反射光的空间分布,表面越光滑,n越大。
在用Phong模型进行真实感图形计算时,对物体表面上的每个点P,均需计算光线的反射方向R,再由V计算 。为减少计算量,我们可以作如下假设:a)光源在无穷远处,即光线方向L为常数;b)视点在无穷远处,即视线方向V为常数;c)用 近似 。这里H为L和V的角平分向量, 。在这种简化下,由于对所有的点总共只需计算一次H的值,节省了计算时间。结合RGB颜色模型,Phong光照明模型的最终形式详见教材公式(8.21)。
示范代码1中,光源在无穷远处,光线方向为单位向量L(0.5, 0.5, 0.707),视点在无穷远处,视线方向V为(0, 0, 1)。
4.示范代码:
(1) 示范代码1-球体简单光照模型效果图
1 | #include <GL/glut.h> |
程序运行结果:
图1
(2) 示范代码2-OpenGL光照与材质下球体效果图
1 | #include <GL/glut.h> |
程序运行结果:
图2