软件学院 计算机图形学 课程实验报告
实验题目:实验 3:A Racing Car
学号:201200302043
日期:2013.12.9
班级: 12 级数字媒体技术
姓名: 修宇亮
Email:[email protected] 18366119913
实验目的:
熟练掌握和综合运用OpenGL编程技术来开发简单的三维交互式游戏
实验内容:
1. 利用Gl/Glu/Glut库,编写一个OpenGL程序,实现以下功能:
设计并绘制一辆汽车模型以及一个简单的直线跑道;其中,车轮可以用glutCylinder来绘制。
缺省视图是从外面一个固定的视点观察汽车和跑道;
利用鼠标和键盘控制汽车前进、后退、转弯、加速和减速;
制作一个弹出菜单,上面的菜单项用来控制车身和车轮的颜色以及退出程序;
定义对应于ReShape事件的回调函数,使得当用户改变窗口的大小时,显示的汽车不会变形。
2. 加分题(可选择做其中的0个、1个或多个)
采用弯曲的封闭的跑道。
轮胎画成封闭的形状。以上例子画出的只是一个两端开放的圆柱面, 你们可以使用gluDisk(…) 将圆柱体两端封
闭。
在缺省视图下,绘制汽车在跑道上的阴影(自定义一个假想的点光源);
在路边设置一些路标,对于地面、跑道和/或天空进行纹理映射等以增强逼真度。
除了缺省视图之外,支持第二种视图:坐在车内从驾驶座位向前看的视图。两种视图之间用“t”键进行切换。
实验软件和硬件环境:
IDE:VC2010 语言:C++ 系统:Windows 7
实验原理和方法:
1. 立方体,圆柱体,圆面,矩形面,圆环,等多面体和多边形的建模
2. 设置光源光照,物体材质,物体发光属性,物体漫射反射属性
3. 通过 glutRashapeFunc 函数保证窗口拉伸的时候小车不变形
4. 通过 glutDisplayFunc 函数绘制跑道,天空,路标,外墙,斑马线等场景以及小车
5. 通过 glutIdleFunc 函数保证小车接受前进/后退命令时候,小车持续运动
6. 通过 glutKeyboardFunc 函数,通过键盘按键控制小车前进,后退,加速,减速,停车,转弯,改变视角,
上帝视角,固定视角,第一人称视角,微调视角
7. 通过 gluPerspective 对场景进行透视投影,用 gluLookAt 控制小车的第一第二视角和微调视角
8. 通过 load_texture 将 bmp 图片转化为 Glint 类型,然后按照顶点对称的原则进行纹理贴合,而天空和草地
可以通过多面平铺来逼近真实效果