三维图形设计课程设计报告.docx

上传人:b****5 文档编号:5651190 上传时间:2022-12-30 格式:DOCX 页数:9 大小:1.07MB
下载 相关 举报
三维图形设计课程设计报告.docx_第1页
第1页 / 共9页
三维图形设计课程设计报告.docx_第2页
第2页 / 共9页
三维图形设计课程设计报告.docx_第3页
第3页 / 共9页
三维图形设计课程设计报告.docx_第4页
第4页 / 共9页
三维图形设计课程设计报告.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

三维图形设计课程设计报告.docx

《三维图形设计课程设计报告.docx》由会员分享,可在线阅读,更多相关《三维图形设计课程设计报告.docx(9页珍藏版)》请在冰豆网上搜索。

三维图形设计课程设计报告.docx

三维图形设计课程设计报告

数字媒体技术专业

三维图形设计课程设计报告

院系:

印刷包装与数字媒体学院

专业班级:

学生学号:

学生姓名:

指导教师:

起止时间:

2016-1-11至 2016-1-15

2015年秋季学期

复式漫游

摘要

本文主要描述了计算机图形学中,利用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)清除颜色缓存和深度缓存。

(2)计算好坐标后,用glBegin(GL_QUADS)先后绘制出场景周围的环境、别墅的结构以及别墅内部的家具。

其中的屋顶是主要是由四边形和三角形即glBegin(GL_TRIANGLES)组合绘制而成。

(3)客厅的沙发是先用多个四边形绘制出,然后用glTranslatef()和glRotatef()平移旋转后得到了组合沙发,最后再用glPushMatrix()和glPopMatrix()放入堆栈,以防影响其他的坐标位置。

客厅的吊灯是用gluCylinder()绘制两个空心圆柱体得到的,同理进行平移旋转放到合适的位置,最后放入堆栈。

楼梯则是用glutSolidCube()绘制多个立方体并对其进行多次平移后实现的。

二楼卧室的吊灯是靠glutSolidCone()实心圆锥体绘制出的。

其他的家具、装饰同理。

(4)然后给别墅周围围上院墙、铺上道路、并装上大门,同理都由四边形拼接实现。

(5)最后用glutSolidSphere()绘制出多个球体,通过平移组合成一个简易的小熊。

并将其的Z坐标设为一个变量,用if语句让它在一定的范围内自增,在main函数中用glutIdleFunc(DrawGLScene)调用DrawGLScene实现小熊的自动前行。

5.光照模型的建立

(1)在main函数里加入SetupRC()函数。

(2)在SetupRC()函数里先定义三个光源,即为环境光、漫反射光和镜面反射光并设置好它们的颜色后,开启深度检测,并用glEnable(GL_LIGHTING)开启使能光照,用glLightfv()建立光照并设置光源位置。

6.加入OpenGL纹理贴图

(1)先用GLuinttexture[24]创建纹理存储,然后在LoadGLTextures()函数中,用AUX_RGBImageRec*TextureImage[1]创建纹理的存储空间。

(2)接着用TextureImage[i]=LoadBMP("data/i.bmp")载入多张不同的图片,用glGenTextures(1,&texture[i])生成纹理。

(3)在InitGL()函数中用glEnable(GL_TEXTURE_2D)开启纹理贴图,并用glBindTexture(GL_TEXTURE_2D,texture[i])选择生成的纹理,贴在所需要的面上,像别墅中的地板,家具、壁纸、草坪都是贴的纹理贴图。

最后再用glDisable(GL_TEXTURE_2D)关闭纹理。

(4)在main函数里加入LoadGLTextures()函数和InitGL()函数。

7.键盘的控制即漫游技术的实现

(1)首先在main函数里加入函数glutSpecialFunc(specialKey)来响应特殊键事件处理回调。

(2)在specialKey()函数中用switch语句使在按下不同的按键时做出相应的响应,达到交互的效果。

按上下键可以实现前进和后退,则是靠不断改变镜头在X和Z方向上的移动量。

前进的时候,坐标不断减小,拉近距离;反之,后退的时候,坐标则不断增加以实现漫游。

(3)pageup和pagedown是通过不断改变x轴方向上旋转的角度大小,即结合glRotatef(lookupdown,1.0f,0.0f,0.0f)实现的。

(4)在此函数还加了一个可以使游戏者产生跳跃感的效果,能够更加真实地模拟人走路的时候,视线此起彼伏的状态。

8.鼠标控制技术的实现

在main函数里加入glutMouseFunc(processMouse)来调用函数processMouse来处理鼠标左键是否被按下,加入glutMotionFunc(processMouseActiveMotion)

调用processMouseActiveMotion函数来处理鼠标拖动事件,如果左键按下,则通过改变X和Y方向上的旋转角,来转动整个场景。

9.添加弹出式菜单

(1)先用menu=glutCreateMenu(processMenuEvents)创建菜单,并告诉GLUT,processMenuEvents处理菜单事件。

(2)给菜单添加条目,分别为“Black”、“Green”、“Blue”、“Yellow”、“Night”、“Day”,然后用glutAttachMenu(GLUT_RIGHT_BUTTON)把菜单和鼠标右键关联起来。

(3)在processMenuEvents函数中把传过来的value值用switch、case语句进行选择。

前四个颜色选项,是通过glClearColor(red,green,blue,0.0)改变背景颜色;最后两个白天黑夜的实现,分别是通过开启光源和关闭光源实现的。

(4)最后在main函数中调用createGLUTMenus()函数。

10.背景音乐的添加

(1)为了使程序有更丰富的效果,我添加了音乐《小幸运》。

首先加入导入音乐的头文件#include"mmsystem.h"。

(2)然后将PlaySound("小幸運.wav",NULL,SND_ALIAS|SND_ASYNC)加入到main函数里。

程序运行后,便可播放背景音乐了。

调试运行:

总的来说,运行程序较为顺利。

只出现过一个小问题,即只要一按方向键进行前进或后退时,画面中有的纹理贴图便会自动消失。

后来经仔细检查发现是一开始定义纹理存储空间时定义的不够,匹配正确的数组个数后便可正常显示纹理贴图了。

设计总结:

这次课程设计的圆满结束,意味着我们对计算机图形学的学习将要告一段落了。

通过这次的实践练习,不仅扎实了我的OpenGL知识,还让我深深地感受到计算机图形学的无限魅力。

在刚接触这门课的时候,我看到别人做的场景漫游,就觉得怎么这么厉害,我要达到那个水平还要很久很久吧。

不过,经过这次的课设,我发现我自己竟然也可以实现了,内心的喜悦难以言表。

虽然还有好多不足的地方,但我们对计算机图形的学习绝不能在此止步,还有很多可以去探索研究的地方。

下面我来说说我这次作品的优缺点。

优点在于整体作品的感觉美观大方。

我在做整栋复式的结构还有复式的家具,花了很大的功夫,算坐标,找贴图,最后终于达到了理想中的效果。

我觉得不足的地方,就是整个作品立体感不强,比如院子中的墙还有别墅的墙都是有厚度的,然后我却用一个平面就将它代替了,这是我没做好的地方。

今后会注意这一方面。

总而言之,我对我此次的作品还是比较满意的。

这次课设我收获颇丰。

不仅复习了C语言知识,还提高了我分析和解决问题的能力,而且我也学到了很多人生的道理。

在做一件看似很难的事时,我们要有一个总体的框架,不要有畏难心理。

静下心来,沉着地分析问题,问题总会迎刃而解的。

因此,成功的关键在于你是否拥有这样的心理。

参考文献

[1]吴学毅.三维图形设计课程设计指导书,2010年11月.

[2]吴学毅.计算机图形学原理与实践[M].北京:

印刷工业出版社,2008.

附录:

图1程序运行的首界面图2近距离观察别墅

图3俯视观察别墅图4客厅展示图

图5卧室展示图图6餐厅展示图

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 企业管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1