基于OpenGL的3D旋转魔方实现汇总

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

华中科技大学电子科学与技术系

课程设计报告

( 2010-- 2011年度第 2 学期)

名称:软件课程设计

题目:基于OpenGL的3D旋转魔方实现

院系:

班级:

学号:

学生姓名:

指导教师:

设计周数:

成绩:

日期:年月日

目录

1.课程设计介绍............................................................................................ (2)

1.1目的.............................................................................................................. (2)

1.2内容.............................................................................................................. (2)

1.3取得的成果 (2)

2.程序分析..................................................................................................... (3)

2.1 程序原理 (3)

2.2 程序流程 (4)

2.3 数据结构 (13)

2.4 重要函数 (13)

3.程序分析与结果演示 (16)

3.1 成果演示 (16)

3.2 程序分析 (17)

4.出现过的问题 (18)

5.心得和小节 (19)

1.课程设计介绍

1.1目的

21世纪是高科技时代,是信息技术时代,而计算机技术无疑会引领各行各业,为我们带来一个全新的时代。作为新世纪的接班人,我们必须拥有良好的计算机应用能力,才能跟上世界发展的大流,不至于在激烈的竞争中被淘汰。而程序作为计算机的灵魂,因此编程能力对当代大学生来说至关重要。

通过本课程单元的学习,可以对软件工程项目从整体上有一个较清晰的了解和认识;可以提高自身软件编程能力,培养对计算机编程兴趣,培养良好的编程习惯。同时编程时的态度和方法对我们今后的学习和工作也有重要影响。

所以整体看来软件课程设计这门课程提高了我们计算机使用水平,培养了我们良好的学习态度,对我们个人的发展而言有着重要的意义。

1.2 内容

(1)巩固和加强c语言相关编程知识,学会用Visual C++6.0进行c语言编程。

(2)掌握程序设计流程和思想,模块化结构分析以及程序设计流程,初步培养需求分析、软件测试、调试的能力。

(3)掌握win32相关编程知识,了解windows程序内部运行机制。

(4)掌握OpenGL贴图技术原理与函数实现,掌握OpenGL几何的移动、旋转等模式变化的原理。

(5)掌握魔方图形构造原理,在掌握二阶魔方构造原理的基础上,构造出三阶魔方并实现其旋转。

1.3 取得的成果

在理解和掌握老师所给的范例程序的基础上,借助Win32平台进行了一系列调试和学习,熟练掌握了Win32 Application开发流程。同时也学习和了解了OpenGL的基本知识,掌握了一些OpenGL的重要技术与重要函数的使用,编写了一些简单的OpenGL程序。在比较透彻的了解了二阶魔方的构造原理后,成功地构造出了三阶魔方,换上了自己班级同学的图片,并且在一个小立方体的六个面上贴上了不同的图片。能够比较完美的实现三阶魔方各个层面的随机旋转,并且把窗口背景设置为红色。为了使程序更加有趣,我在程序中导入了刘德华的《爱你一万年》这首歌,使魔方在旋转的同时能够播放歌曲。除此之外,我还实现了一种三阶魔方自由移动的屏保效果:即三阶魔方在旋转的同时能够在屏幕内部自由移动,并且在边缘无限次的反弹。在魔方平移的过程中同样可以通过四个方向键来控制魔方的移动。当松开方向键后,魔方会继续按照先前的方式自由移动。

2.程序分析

2.1 程序原理

(1)OpenGL

OpenGL是为Open Graphics Library的简称,它是3D绘图工业标准,广泛地应用于计算机3D绘图领域。它是个专业的开放的3D程序接口,是一个功能强大,调用方便的底层3D图形库。它独立于窗口系统和操作系统,以它为基础开发的应用程序可以十分方便地在各种平台间移植;OpenGL可以

与Visual C++紧密接口,便于实现机械手的有关计算和图形算法,可保证算法的正确性和可靠性;它具有七大功能:建模、变换、颜色模式设置、光照和材质设置、纹理映射、位图显示和图象增强和双缓存动画功能。OpenGL 使用简便,效率高。

本项目是在Visual C++6.0开发环境下,使用OpenGL函数库,绘制魔方并实现魔方贴图、随机旋转、以及键盘控制等功能。采用基本图形的绘图函数及定位函数,添加相应纹理来实现魔方模型的绘制。通过读取载入BMP 文件,应用纹理贴图技术来完成对魔方旋转面的处理。通过OpenGL中对图形的旋转和平移函数来实现对魔方整体的旋转和平移。

(2)旋转

在建立好空间三维模型后,要实现魔方体每一层面的旋转。而魔方体每一层面的旋转归结于每一个小立方体的旋转。每个小立方体的旋转又最终归结于每个点的旋转。对于一个坐标为(x,y,z)的点,如果围绕z轴逆时针旋转角度为a,则旋转之后z坐标不变,x和y坐标分别变为x*cosa - y*sina,x*sina + y*cosa,如图1所示:

图1

这样,实现了每个点的旋转,针对每个立方体只需采用循环对8个点均采取旋转操作就可实现一个立方体的旋转。

(3)消息循环与定时器

由于程序在运行时CPU只能执行一个任务,然而此项目中魔方在旋转的同时要实现平移,所以需要用到Win32中的定时器功能。

此程序中要用到的定时器的函数原型为:

SetTimer(HWND hWnd ,UINT nIDEvent,UINT uElapse,TIMERPROC lpTimerFunc)

HWND hWnd为窗口句柄,使程序和定时器建立联系,UINT nIDEvent 是定时器ID,用于区分不同的定时器;UINT uElapse为定时器触发周期,意味着多长时间执行一次;,TIMERPROC lpTimerFunc为该定时器执行时触发的函数。所以控制好不同定时器的触发周期和触发函数,就能使魔方的各个层面的旋转和平移互不冲突。

相关文档
最新文档