计算机图形学实验 - 真实感图形场景的生成
更新时间:2024-03-22 07:52:01 阅读量: 综合文库 文档下载
- 计算机图形学实验报告推荐度:
- 相关推荐
实验四 真实感图形的生成
一、 实验内容
? ? ? ?
创建一个简单场景
场景中有一个复杂的三维几何体
通过一系列处理使得场景和几何体具有真实感 可以通过变换视点观察场景
二、 程序结构
创建Win32 Console Application,使用OpenGL的控制台应用程序框架。其中:
? init()函数进行场景初始化工作;
? reshape(GLsizei width, GLsizei height)函数设置窗口的视口大小,
同时设置透视深度和透视角度等参数;
? display()函数构建坐标系并通过调用具体的绘制图形函数来绘制具体
场景和几何图形;
? LoadBMP()函数导入纹理位图文件;
? LoadTexture()函数加载纹理到内存空间中;
? generateShadow(GLfloat shadow[4][4], const GLfloat ground[4],
const GLfloat light[4])函数来计算空间中物体上任意一点的平面阴影投射矩阵
? keyboard(unsigned char key, int x, int y)函数处理键盘按键消息; ? mouseButton(int button, int state, int x, int y)函数处理鼠标按
键消息;
最后由主函数main(int argc, char** argv)中调用OpenGL函数来显示窗口,并进行绘图和处理事件消息函数。
三、 代码说明
1. 加载位图纹理
首先,编写LoadBMP()函数导入位图文件,代码截图如下:
然后,编写LoadEarthTexture()函数加载导入的位图并设置相关参数,代码
截图如下:
2. 绘制房间场景
在drawScene()函数中调用OpenGL基本几何元素绘制过程glBegin(GL_QUADS)绘制4个平面,并为每个平面绑定相应的纹理图片,主要代码截图如下:
3. 绘制地球仪模型
编写drawEarth()函数绘制地球仪模型,并为地球仪模型绑定对应的纹理贴图,同时增加光照和材质的处理,代码截图如下:
4. 绘制模拟点光源
编写drawBulb()函数绘制模拟点光源及灯罩,首先调用glBegin(GL_TRIANGLE_STRIP)绘制4个三角形面构成棱锥形灯罩的4个侧面,然后调用gluSphere()函数绘制球形灯泡并增加光照和材质处理效果,代码截图如下:
5. 生成阴影
根据点光源、物体上的任意一点、物体在平面上的投影点“三点共线”的几何原理,以及投影点在平面上的位置关系,通过平面方程求得其法向量,然后利用点光源和物体上一点的坐标进行计算,得出物体上该点的平面阴影投射矩阵。因此编写generateShadow(GLfloat shadow[4][4], const GLfloat ground[4], const GLfloat light[4])来实现该矩阵的计算,代码截图如下:
然后在display()函数中调用上面的函数计算出地球仪模型的阴影投射矩阵,然后与模型矩阵进行相乘,进而绘制模型的阴影,代码截图如下:
6. 场景初始化参数设置,重绘窗口及视点设置
在init()函数中首先清除屏幕颜色和深度缓存,然后设置明暗处理和启用光照等参数,进行整个场景的初始化设置,代码截图如下:
在reshape(GLsizei width, GLsizei height)函数中设置视点的初始位置,以及透视投影的深度和角度,代码截图如下:
7. 键盘按键、鼠标按键消息处理
编写keyboard()函数处理键盘按键消息,对相关参数变量修改其步长,最后调用glutPostRedisplay()函数进行重绘窗口,部分代码截图如下:
编写mouseButton()函数处理鼠标按键消息,通过鼠标左键可控制地球仪是否自动绕地轴旋转,在此之前编写myIdle()函数实现地球仪旋转角度的步长增加,代码截图如下:
正在阅读:
OrCAD中批量替换和修改网络名最高效的方法吴成百原创-2016051811-28
童年偷着乐优秀作文06-19
特别的爱作文700字06-19
家训之诚信做人作文600字06-24
心理学名词解释10-18
山西朔州市2018学年高一历史上学期历次基础测评 第26课 世界多极05-21
东北师大中国现代文学作品选15秋在线作业2满分答案04-07
《蟋蟀的住宅》教学反思02-07
工作分析复习题10-06
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 图形
- 真实感
- 生成
- 场景
- 实验
- 计算机
- 第一次作业 计算机基础知识
- “礼让斑马线,文明过马路”活动总结 - 图文
- 宝鸡4S店可研报告电
- 数字电子技术基础习题集2-答案
- 北师大版小学一年级数学上册教案前后
- JSP初学者实验学习
- 全新版大学英语综合教程3课文原文及翻译完整版
- Modbus-RTU规约详解
- 2016年河南省中级抹灰工试题
- 新闻舆情处置方案
- 普通话语音与发声自考试题(11)
- 工作五步法具体内容
- 课时1 化学实验安全 过滤和蒸发
- 2017年高考考试大纲修订内容
- 2010房地产估价师《房地产估价理论与方法》试题精选
- 浅析如何对房地产项目开发的成本进行控制
- 2018-2019学年高中数学 第2章 平面解析几何初步 2.1 直线与方程
- 三级公共营养师技能真题(3)
- 低头学生,举头班级 - 听方海东老师讲座感悟
- 12级中专航空服务英语期末考试试卷A