基于 openGL 的虚拟教室绘制
——虚拟现实与数据可视化课程作业
姓名:张琦
学号:22012206
专业:测控技术与仪器
指导老师:孙立博老师
一. 作业要求
用 openGL 绘制一个虚拟教室场景。要求实现视角可变化以及漫游功能,教
室里的物品不少于五件。
二.整体思路分析
运用 openGL 图形库函数,基于 visualc++6.0 平台绘制一个虚拟教室的步骤大概如下:
1. 首先建立起一个教室的整体框架,即画出一个空间坐标系中的长方体,当然四个面
均可使用 GL_QUADS 来实现,只要定下教室的大小以及在空间坐标系中的位置,即
可定下八个顶点坐标。
这是我绘制教室这个大场景的部分代码截图:
2.选择一个合适的视点,我们看物体时,我们的眼睛在什么位置,我们看向什么位置均会
影响看到的效果,选取合适的“眼睛”坐标和视点坐标,利用 gluLookAt 函数,来使整个教
室呈现在观察者的视野当中。键盘控制改变视角只需加入一个键盘响应函数并在其中添加视
点 相 关 变 量 的 增 加 和 减 少 即 可 实 现 。 比 如 : gluLookAt(myEye.x, myEye.y, myEye.z,
vPoint.x+30*sin(vAngle), vPoint.y,-30*cos(vAngle), 0.0f, 1.0f, 0.0f);当然这是加入了改变视角和
巡游的功能。
3.具体绘制部分:绘制其他处于这个长方体中的物体,桌子,椅子,讲台,空调等,考虑纹
理贴图以及设置灯光和材质。绘制桌椅均使用 openGL 中的绘制简单几何体的函数,
glBegin(GL_QUADS)以及 glutSolidCube(1.0f)和一些矩阵变化平移缩放来实现。纹理贴图部分
参考网上代码使用一个载入位图返回纹理编号的函数 int load_texture(char*filename)来实
现。
三.程序框图(部分主要)
四.总结与评价
1)技术总结:
1.初次接触 openGL 这一图形函数库确实有很多地方需要注意。首先就是视点的问题,
刚开始绘制时,在画完了四面墙以及天花板和地板之后,运行出来的窗口中只有两块重叠的
白板, 仔 细 思 考 以 及 调 试 程 序 之 后 才 发 现 是 视 点 的 问 题 。 通 过 查 阅 资 料 给
gluLookAt(GLdouble eyex,GLdouble eyey,GLdouble eyez,GLdouble centerx,GLdouble
centery,GLdouble centerz,GLdouble upx,GLdouble upy,GLdouble upz)这个函数赋值了正
确合适的参数,才在窗口中看到了一个教室的大概轮廓。但是设置对视点之后发现窗口出现
了变形,查阅资料发现是因为视口比例不对,视口比例要和所绘制的教室的纵横比相同,调
用 glViewport(0,0,(GLsizei) we, (GLsizei) he)函数即可实现视口变换。
2.在编写响应键盘操作的函数时,相关变量要不断修改并持续变化,一定要在响应函数中要
再次调用窗口刷新函数和再显示函数
才能实现程序响应连续键盘操作的功能。
3 进行纹理贴图时,发现在已经贴过图的表面上再次贴图就会使其受遮挡,想要达到预期效
果我投机取巧采用的坐标近似的办法,比如在墙壁上绘制窗户,左墙壁的 x 左边已经是-40,
那么窗户的 x 左边用-39.9 来近似,这样并不会影响纹理的效果,也能使得两幅贴图同时展
现出来。
2)心得体会
主函数
显示回调
函数
响应键盘操作函
数(特殊和普通)
初始化函数(对各项
参数进行初始化)
打印相关信息函数
窗口刷
新函数
DrawSence
drawdes
ks
drawchairs
light
material
视点及视口
这次使用 openGL 图形函数库来绘制虚拟教室场景让我重新对 c++的知识有了新的体会,
这是我第一次编写大规模的代码(代码已经快到 1000 行),出错的时候排查都不好排查。
所以我借鉴学习别人的程序,尽量使用封装函数,函数调用函数,这也是 c++语言的特点。
让自己的代码看起来更加有层次感,条理也更加清楚,我想以后再借助于 c++的平台来学习
实践其他函数库以完成更加复杂功能时我会入门的更快更得心应手。
openGL 我以前并没有过接触,除了仔细消化老师上课时介绍的知识,课后我上网查阅
了大量资料以及例子程序,在这个自我学习的过程中,我深刻体会到接触任何一种语言或者
函数库都需要抱着一种从头从基础学起,不放过任何细节的心态,才能真正的入门。
五. 完成情况
1、 画出了教室里的基本物体:黑板、讲台、投影仪、空调、门窗、音响、五排三列桌
子、五排三列凳子,挂钟,挂灯等。整体风格参照东大教室风格。
2、 添加了纹理和灯光效果,门窗,空调,挂钟,黑板均使用纹理贴图。使得整个教室
更加形象生动具有真实感。
3、 灯光具有键盘可控性,对比开灯关灯效果。投影仪和收起放下效果,以及一些其他
实现转换视角和巡游的按键操作,可实现 360 度环视,左右平移,前进后退,并且
对巡游范围进行了限制,只能在教室这个大场景中进行巡游。
4、 在输出窗口添加了按键提示信息,使界面更加友好。
六.结果展示
初始窗口截图:
2.投影仪放下:
- 1
- 2
- 3
- 4
前往页