# 实验目的和要求
在OpenGL观察实验的基础上,通过实现实验内容,掌握OpenGL中消隐和光照的设置,并验证课程中消隐和光照的内容。
# 实验内容和原理
使用Visual Studio C++编译已有项目工程。
![](https://www.writebug.com/myres/static/uploads/2022/6/12/4816ea309596c8d7617d3edc35257e1b.writebug)
模型尺寸不做具体要求。要求修改代码达到以下要求:
1. 通过设置材料使得桌面和四条腿的颜色各不相同,分别为:(1, 0, 0), (0, 1, 0), (1, 1, 0), (0, 1, 1), (0, 0, 1);
2. 通过设置材料使得茶壶为金黄色;
3. 添加按键处理,移动场景中的光源,并能改变光源的颜色(在两种颜色间切换,颜色自己定义);
4. 修改茶壶的镜面反射系数,使之对光源呈现高光;
5. 在场景中添加一个聚光光源,其照射区域正好覆盖茶壶,并能调整改聚光光源的照射角度和朝向。
# 主要仪器设备
Visual Studio C++
glut.zip
模板工程
# 操作方法和实验步骤
## 材质设定
首先,根据实验的要求,我们要对桌子的材质进行适当的修改,以使得在光照条件下,桌子和茶壶可以呈现出我们理想的效果。关于材质的设定,可以在绘制的时候设置好。源工程中的函数对应为Draw—_Traingle,显然是忘了改名,但是就在这个基础上做吧。
为了使得视觉效果良好,要分别设置镜面反射和漫反射。在进行光照计算时,材料对环境光的反射率与每个进入光源的环境光结合。对环境光与漫反射光的反射程度决定了材料的颜色,并且它们很相似。对镜面反射光的反射率通常是白色或灰色(即对镜面反射光中红、绿、蓝的反射率相同)。镜面反射高光最亮的地方将变成具有光源镜面光强度的颜色。
其中桌面和桌腿的漫反射系数和镜面反射的颜色我决定都使用物体固有色,而对于茶壶,镜面反射系数为了呈现高光效果,通过不断调试来找一个合适的颜色与镜面反射系数,比如50。
![](https://www.writebug.com/myres/static/uploads/2022/6/12/78e96cd3497cbeb2037fc38bf23b54ba.writebug)
效果如下:各个物体都有了固有色,茶壶有了高光效果。
![](https://www.writebug.com/myres/static/uploads/2022/6/12/1f825bec873a0f6d69ef3fbcc34c2efd.writebug)
## 光源设置
下面设置光照。本实验中要设置两个光源——点光源与聚光灯,并且用键盘按键操作切换与移动。
考虑到在后面绘制、移动等多个函数中都要用到光照的参数,所以在全局变量中设置光照参数。
![](https://www.writebug.com/myres/static/uploads/2022/6/12/c512dbb8cad5910d78ba0de300032de9.writebug)
然后在redraw函数里设置光照,参考帮助:
![](https://www.writebug.com/myres/static/uploads/2022/6/12/a249ce94488d3d66947bddb4e2581578.writebug)
## 交互控制设置
最后在key函数中设置好键盘操作就好了。决定利用小键盘的各个数字来控制灯的种类切换、颜色切换、点光源的位置调整和聚光灯的角度调整。
![](https://www.writebug.com/myres/static/uploads/2022/6/12/7d79897d0d811fb253404ce40dd0cec8.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/6/12/088b2397ebd4122cdc1c3a7b52113656.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/6/12/150a2ac6f0439b405c2ab2c5fffef00b.writebug)
# 实验数据记录和处理
(略)
# 实验结果与分析
## 仅点光源:
![](https://www.writebug.com/myres/static/uploads/2022/6/12/21ea7772b74d3ad003ce408b5c539283.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/6/12/21ea7772b74d3ad003ce408b5c539283.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/6/12/eb6dd62465e71a18d2a0a887b0fa3cbc.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/6/12/8c39fc332b693210a77f70b7a222b988.writebug)
## 加入聚光灯:
![](https://www.writebug.com/myres/static/uploads/2022/6/12/3fd7bdc2371a698eb1129a61efcbc224.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/6/12/6ac161408f597c6ccc9b6bfa103f15ef.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/6/12/4c03c9628aed9bf561df3ea86bb9ed4d.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/6/12/8bac8fc69dfa0fca0f1996d3c9e87f83.writebug)
# 讨论、心得
学习了OpenGL中材质的设定和光照的设定。总结一下OpenGL里涉及到的几个重要函数:
材质设置函数:void glMaterialfv(GLenum face, GLenum pname, TYPE *param);
参数1:GL_FRONT(正面),GL_BACK(反面),GL_FRONT_AND_BACK(正反两面);
参数2:
![](https://www.writebug.com/myres/static/uploads/2022/6/12/b325aea3d7d81cbae2283a3425ff7c01.writebug)
通常,GL_AMBIENT和GL_DIFFUSE都取相同的值,可以达到比较真实的效果。使用GL_AMBIENT_AND_DIFFUSE可以同时设置GL_AMBIENT和GL_DIFFUSE属性。
- void glMateriali(GLenum face, GLenum pname, TYPE *param);
用该函数设置反射系数
- 光照设置函数:void glLightfv (GLenum light, GLenum pname, TYPE *params);
在OpenGL中,仅仅支持有限数量的光源。使用GL_LIGHT0表示第0号光源,GL_LIGHT1表示第1号光源,依次类推,OpenGL至少会支持8个光源,即GL_LIGHT0到GL_LIGHT7。使用glEnable函数可以开启它们。例如,glEnable(GL_LIGHT0);可以开启第0号光源。使用glDisable函数则可以关闭光源。一些OpenGL实现可能支持更多数量的光源,但总的来说,开启过多的光源将会导致程序运行速度的严重下降,光源GL_LIGHT0与其他几个光源不同,其他光源的默认颜色时黑色。GL_DIFFUSE,GL_SPECULAR的默认值是(1.0,1.0,1.0,1.0),而其他光源的默认值是(0.0,0.0,0.0,1.0)。
通常设置光照成分需要经过这么几步:设置环境光——设置镜面光成分——设置漫射光成分。光源的属性GL_SPECULAR影响镜面反射区域的颜色,一般物体的镜面反射区域的颜色为入射光线的颜色,要实现真实感,应该将它的值设置成与GL_DIFFUSE相同。
GL_POSITION属性可以设置光源的位置。对于聚光灯的设置,我们需要考虑更多属性:GL_SPOT_DIRECTION、GL_SPOT_EXPONENT、GL_SPOT_CUTOFF属性。
GL_SPOT_DIRECTION属性有三个值,表示一个向量,即光源发射的方向。光源的默认方向是(0.0,0.0,-1.0),即指向z轴负方向。
GL_SPOT_EXPONENT属性只有一个值,表示聚光的程度,为零时表示光照范围内向各方向发射的光线强度相同,为正数时表示光照向中央集中,正对发射方向的位置受到更多光照,其它位置受到较少光照。数值越大,聚光效果就越明显。
GL_SPOT_CUTOFF属性也只有一个值,表示一个角度,它是光源发射光线所覆盖角度的一半,其取值范围在0到90之间,也可以取180这个特殊值。取值为180时表示光源发射光线覆盖360度,即不使用聚光灯,向全周围发射。即一个点光源。
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
资源包含文件:设计报告word+源码及可执行exe文件 在OpenGL观察实验的基础上,通过实现实验内容,掌握OpenGL中消隐和光照的设置,并验证课程中消隐和光照的内容。 模型尺寸不做具体要求。要求修改代码达到以下要求: 1.通过设置材料使得桌面和四条腿的颜色各不相同,分别为:(1, 0, 0), (0, 1, 0), (1, 1, 0), (0, 1, 1), (0, 0, 1); 2.通过设置材料使得茶壶为金黄色; 3.添加按键处理,移动场景中的光源,并能改变光源的颜色(在两种颜色间切换,颜色自己定义); 4.修改茶壶的镜面反射系数,使之对光源呈现高光; 在场景中添加一个聚光光源,其照射区域正好覆盖茶壶,并能调整改聚光光源的照射角度和朝向。 详细介绍参考:https://blog.csdn.net/sheziqiong/article/details/125258136
资源推荐
资源详情
资源评论
收起资源包目录
基于C++OpenGL实现的小桌茶壶图形绘制消隐和光照.zip (12个子文件)
2_exe
glut32.dll 232KB
Ex5.exe 47KB
3_report
实验报告5.doc 559KB
设计报告.doc 559KB
LICENSE 1KB
1_code
Ex5.sln 856B
Ex5
main.cpp 7KB
Ex5.vcxproj 4KB
glut
glut32.dll 232KB
glut32.lib 28KB
glut.h 26KB
README.md 7KB
共 12 条
- 1
shejizuopin
- 粉丝: 9516
- 资源: 1288
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 农村信用社联合社计算机信息系统投产与变更管理办.docx
- 农村信用社联合社计算机信息系统数据管理办法.docx
- 利用SPSS作临床效度分析线上计算网站介绍-医学研究部统计谘.(医学PPT课件).ppt
- 利用Zabbix监控mysqldump定时备份数据库状态.docx
- 利用计算机解决问题的基本过程.doc
- 化工铁路通信工程总结.doc
- 北京大学网络教育软件工程作业.docx
- 医药公司(连锁店)计算机操作规程未新系统的自行按照旧制修改-新系统过制的编号加修模版.doc
- 医药公司(连锁店)计算机系统操作规程模版.doc
- 医药连锁门店计算机系统的操作和管理程序未新系统的自行按照旧制修改-新系统过制的编号加修模版.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页