三维图形设计课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字媒体技术专业
三维图形设计课程设计报告
院系:印刷包装与数字媒体学院
专业班级:
学生学号:
学生姓名:
指导教师:
起止时间: 2016-1-11 至2016-1-15
复式漫游
摘要
本文主要描述了计算机图形学中,利用OpenGL实现的三维场景漫游作品《复式漫游》。其中合理运用计算机图形学知识,通过基本图元的绘制函数绘制出复杂的图形,进行纹理贴图、几何变换、建立光照模型,最终建立出具有真实感的三维场景。该作品还可以实现鼠标控制、键盘交互、漫游等功能,使我们可以自由地在场景中移动,观看复式小楼的角角落落。本文主要从设计目的、系统设计、系统结构框图、实现思路、系统功能流程图、实现步骤、调试运行、设计总结这几方面对作品进行介绍,附录部分可看到运行效果图。详细内容请见本文。
关键词:OpenGL复式漫游计算机图形学知识
目录
绪论 (3)
正文 (3)
设计目的 (3)
系统设计 (4)
系统结构框图 (5)
实现思路 (5)
系统功能流程图 (6)
实现步骤 (7)
调试运行 (10)
设计总结 (10)
参考文献 (11)
附录 (11)
绪论
三维场景漫游就是假定有一个虚拟人可以在三维场景中进行移动从而观察整个场景的过程。漫游的既可以通过移动视点和观察方向(照相机)来进行,也可以保持视点在坐标原点通过移动场景来进行。我所采用的是保持视点在坐标原点通过移动场景来进行。
我做的三维场景漫游是关于一幢简易别墅的漫游。进入院子,别墅便可映入眼帘。这个别墅我一共建了两层,第一层左侧是客厅,右侧是餐区。通过客厅的楼梯便可上到二层,二层便是卧室,出了卧室的右面是一片草坪,屋主人便可在此运动或休憩。大家可以使用方向键在别墅里进行游览。通过方向键的左右键实现左右转动来仔细观摩每个房间;通过上下方向键可进行前进或后退。通过pageup和pagedown可从仰视和俯视两个角度来观察房间。还有按住鼠标左键便可左右转动整个场景;单击鼠标右键通过选项菜单可改变背景的颜色以及实现白天黑夜的效果。
此次作品是在VC平台上借助OpenGL库函数及基本图元绘制、glut内置几何体、图形的几何变换、矩阵堆栈函数、二维观察变换、三维观察变换、光照模型、纹理贴图、键盘和鼠标的交互输入、场景漫游等计算机图形学相关知识实现的,其具体实现过程见正文。最终运行的效果图请见附录部分。
关于此次作品我是很认真、努力地完成,其间计算坐标、查找纹理贴图花费了很大的功夫。作品算不上完美,至少算是态度端正吧。作品中也存在很多不足,殷切希望老师能够批评指正。
正文
设计目的:
(1)通过此次课程设计,能够使我对课程中所学的基本原理、算法和技术有
更深入的理解,并将这些环节的知识融会贯通,巩固课内所学的理论、
技术和技能;
(2)通过做三维场景漫游,一方面是使我能够接触到这项技术,并深入地学
习了解它,然后运用它;另一方面是希望通过这项技术,能够对其他相关软件的学习起到一定的辅助作用。
(3)通过对OpenGL相关库函数的学习和运用,提高我们综合开发图形软件
的开发能力,未毕业设计和毕业后从事与图形开发相关的工作打下打下良好的综合技能和知识基础。
系统设计:
(1)首先先建立一个场景,即建立这栋别墅的周围环境,让其看起来更加真
实。通过建立四个面并贴图实现,四周贴上街道背景图,地面贴上草坪图。
(2)开始绘制别墅。别墅为双层别墅,按照所构想的别墅结构坐标先绘制出
别墅的整体框架。最后再给别墅加上屋顶。
(3)然后给别墅里每个房间添置上家具。在客厅里分别出绘制沙发、茶几、
茶壶、吊灯、楼梯,窗户,电视,壁画,再给所绘制出来的图形贴上纹理贴图;同理餐厅也是先绘制出餐桌,椅子,冰箱并贴上图片,卧室添置床、吊灯还有衣柜并贴图。卧室右边的院落贴上草坪的图片。简易的二层复式便建好了。
(4)接着在别墅的四周围上墙面,即用四个矩形外加贴图实现。并给院子加
上半敞开的门,最后铺上鹅卵石的道路。
(5)用多个球体组合拼接成一个小熊,并写一个函数让我们在运行程序的时
候小熊会沿着鹅卵石道路径直走到院子门口停住,欢迎每个游客的到来。
(6)再添加一些功能,通过菜单选择可以切换白天和黑夜的效果。最后附上
美妙的背景音乐,让大家可以随着音乐愉悦地参观这栋别墅。
系统结构框图:
整体结构图
房间细节布局图
实现思路:
(1)四周场景中的街道、草坪是由四个矩形拼接而成,并用纹理贴图的相关知识所实现的。
(2)别墅整体结构的创建以及周围的院落、道路、大门都是靠基本图元的绘制所完成的,即四边形和三角形。
(3)别墅中内部的家具,像沙发、衣柜、餐桌、椅子等都是是通过多个四边形绘制而成的,并通过一定的平移、旋转、缩放变换达到最终的效果;客
厅的吊灯和卧室的吊灯分别是靠几何体中的圆柱和圆锥体;客厅中的楼梯是用长方体并平移变换而成。
(4)小熊的绘制是由多个不同颜色的球体堆叠而成,通过将z坐标设成变量,不断地改变坐标值并调用回调函数让其实现自动平移。
(5)实现白天或黑夜的效果运用菜单实现,分别通过打开光源和关闭关闭光源。
(6)在整个场景中浏览,前后移动、左右转动视角通过漫游技术,结合鼠标和键盘控制的交互技术实现。
系统功能流程图:
实现步骤:
1.先进行VC6.0环境下基于OpenGL程序开发的运行环境配置
(1)将OpenGL开发库子目录下\INCLUDE所有文件拷贝到VC所在子目录的\include\gl目录下。
(2)将OpenGL开发库子目录下\LIB所有文件拷贝到VC所在子目录的\lib 目录下。
(3)将OpenGL开发库子目录下\DLL所有文件拷贝到windows所在子目录的\system32目录下。
配置好后,便可用vc++6.0开始创建工程,编写程序。将所需要用到的相关头文件即stdafx.h、stdlib.h、math.h、GL/glut.h、GL/glaux.h包含进去。
2.编写main函数
(1)首先用函数glutInitDisplayMode()定义显示方式为双缓冲区,深度缓冲区的RGBA窗口。
(2)调用函数glutCreateWindow()来创建窗口并设置标题为《复式漫游》;再分别用glutInitWindowPosition()和glutInitWindowSize()来定义窗口的位置和大小;用initScene()初始化场景,在函数中开启深度检测。
(3)用回调函数glutDisplayFunc(DrawGLScene)调用DrawGLScene函数在窗口中绘制图形;用回调函数glutReshapeFunc(ReSizeGLScene)可以实现当窗口发生变化时,调用ReSizeGLScene重新定义窗口属性。
(4)最后加入glutMainLoop()函数让程序进入一个永不结束的循环。
3.在ReSizeGLScene函数中设置观察点,选择投影矩阵,设置模型矩阵,再用gluPerspective和gluLookAt设置观察方式和视点。
4.在DrawGLScene函数中绘制三维场景
(1)先用glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)清除颜色缓存和深度缓存。