欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    计算机专业课程设计OPENGL旋转立方体.docx

    • 资源ID:88155975       资源大小:120.07KB        全文页数:39页
    • 资源格式: DOCX        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    计算机专业课程设计OPENGL旋转立方体.docx

    西安文理学院计算机科学系课程设计报告设计名称:软件课程设计设计题目:旋转立方体的设计学生学号:专业班级: 学生姓名: 学生成绩:指导教师职称:课题工作时间:2023.5.31 至 2023.6.11说明:1、报告中的任务书、进度表由指导教师在课程设计开头前填写并发给每个学生;四、五两项中英文摘要由学生在完成综合设计后填写。2、学生成绩由指导教师依据学生的设计状况给出各项分值及总评成绩。3、指导教师评语一栏由指导教师就学生在整个设计期间的寻常表现、设计完成状况、报告的质量及辩论状况,给出客观、全面的评价。4、全部学生必需参与课程设计的辩论环节,凡不参与辩论者,其成绩一律按不及格处理。辩论小组成员应由 2 人及以上教师组成。5、报告正文字数一般应不少于 3000 字,也可由指导教师依据本门综合设计的状况另行规定。6、寻常表现成绩低于 6 分的学生,取消辩论资格,其本项综合设计成绩按不及格处理。计算机科学系课程设计任务书学生姓名 设计题目内容概要:王雅宁学号14102080210专业班级2023 级软件工程 2 班旋转立方体的设计画出一个正方体,并将它旋转起来。文献资料:1. 谭浩强C 程序设计M第三版 清华大学出版社 20232. 严蔚敏.吴伟民 数据构造M高等教育 20233. 钱能 C+程序设计教程M其次版清华大学出版社 20234. 郑丽 Visual Basic 程序设计清华大学出版社 2023-10-29设计要求:1 用 C/C+或 VB 实现;2. 友好性:界面要友好;3. 可读性:源程序代码清楚、有层次;4. 当鼠标离屏幕中心的位置远近可以打算立方体旋转速度的快慢。工作期限:设计工作自 2023 年 5 月 31 日至 2023 年 6 月 11 日止。指导教师:系主任:日 期:2023 年 5 月 28 日计算机科学系课程设计进度安排表专业: 软件工程姓名: 王雅宁学号: 14102080210日期5 月 31 日 6 月 1 日6 月 2 日6 月 3 日6 月 4 日6 月 6 日6 月 7 日6 月 8 日6 月 9 日6 月 10 日6 月 11 日6 月 11 日月 日 月 日月 日 月 日月 日月 日月 日 月日月 日月 日月 日 月 日月 日 月 日月 日月 日月 日月 日内容备注分析题目,查阅相关资料拟定整体方案,编写程序程序编写调试程序整理报告辩论指导教师签名:2023 年 5 月 28 日指导教师评语指导教师:签字日期:2023 年6 月10日辩论记录表学生姓名:学号:班级: 辩论地点:辩论内容记录:合计各项分值分值答评分标准实际合计得分得分备注在规定时间内能就所设计的内容辩成绩2510进展阐述,言简意明,重点突出, 论点正确,条理清楚。15在规定时间内能准确、完整、流利地答复教师所提出的问题。辩论小组成员签字:2023 年6 月 11 日成绩评定表学生姓名:学号:班级:类别 合计各项分值分值评分标准实际合计得分得分备注寻常表现1010按时参与设计指导,无违反纪律情况。按设计任务书的要求完成了全部20任务,能完整演示其设计内容,符完成状况30合要求。能对其设计内容进展具体、完整的10介绍,并能就指导教师提出的问题进展正确的答复。报告文字通顺,内容翔实,论述充10分、完整,立论正确,构造严谨合理;报告字数符合相关要求,工整标准,整齐划一。5课题背景介绍清楚,综述分析充分。报告质量355设计方案合理、可行,论证严谨, 规律性强,具有说服力。5符号统一;图表完备、符合标准要求。5能对整个设计过程进展全面的总结,得出有价值的结论或结果。5参考文献数量在 2 篇以上,格式符合要求,在正文中正确引用。在规定时间内能就所设计的内容10进展阐述,言简意明,重点突出,辩论状况2515论点正确,条理清楚。在规定时间内能准确、完整、流利地答复教师所提出的问题。总评成绩:分指导教师:签字日期: 2023 年6月 15日摘 要软件工程专业经过两年的课程学习,已经积存了相关高级语言程序设计的根本学问。画出正方体并使之旋转,这一题目考察了程序设计自顶而下、逐步细化的相关根本思想。题目难点在于实现可视化界面的交互、以及图像的旋转过程。分析题目可以得出程序可以大致分为两个方面的内容:1. 画出一个正方体。2. 使正方体旋转起来。经过查找相关资料,本程序承受功能强大的图形库 OPENGL 并调用一系列 WINDOWS API 承受 C/C+语言在 Microsoft Visual C+6.0 环境下编写。很好的解决了用 C/C+编写图形界面的难点问题。通过 Win32 平台的 OPENGL API 实现了逼真的三维旋转效果关键词: 正方体;旋转;可视化;OPENGLAbstractSoftware Engineering after two years course of study, has accumulated a relevant high-level language programming basics. Draw the cube and make it spin, this subject examines the design top-down process, gradually refining the basic idea related.Subject difficulty is to achieve interactive visual interface, and image rotation process.Analysis procedures can be drawn subject can be broadly divided into two aspects:1. Draw a cube.2. 2. To make a cube spin.After find relevant information, this program features a powerful graphics library OPENGL and call a WINDOWS API using C / C + + language in Microsoft Visual C + +6.0 environment preparation.Good solution using C / C + + graphical interface written and difficult problems. OPENGL API through the Win32 platform to achieve a realistic three-dimensional rotation effectKeywords :cube;spin;visual;OpenGL西安文理学院计算机科学系课程设计报告目 录目 录I第一章 课题背景21.1 引言21.1.1 背景及目的21.2 题目概述21.2.1 问题及技术要求21.2.2 理论依据及工作内容2其次章 设计简介及设计方案论述32.1 设计简介32.2 OPENGL 图形库简介32.2.1 OPENGL 历史简介32.2.2 OPENGL 特点32.2.3 OPENGL 工作挨次42.3 OPENGL 简洁编程方法42.3.1 OPENGL 根本语法42.3.2 OPENGL 状态机制42.3.3 OPENGL 根本构造52.4 程序所使用的 OPENGL 库函数52.5 OPENGL 及 WINDOWS 坐标系62.6 WINDOWS 下配置 OPENGL 环境72.7 WINDOWS 消息机制72.8 大体设计方案8第三章 具体设计103.1 OPENGL 的绘制工作103.1.1 OPENGL 的初始化工作103.1.2 OPENGL 的主体绘制工作103.2 鼠标掌握正方体的旋转113.3 重置 OPENGL 窗口123.4 WINDOWS 中 OPENGL 窗体设置及创立123.5 完成 WINDOWS 主程序13第四章 设计结果及分析144.1 设计结果分析144.2 进一步美化程序14总结15致谢16参考文献17附录18- I -西安文理学院计算机科学系课程设计报告第一章 课题背景1.1 引言随着专业课程学习的深入,相关高级语言程序设计的学问已经有所积存,如何更好的把握并应用已经成为当务之急。通过软件工程课程设计的过程能够学习程序设计的根本思想以及整体流程。1.1.1 背景及目的根本高级语言程序设计以及相关专业根底课程已经学习完毕,在学习过程中遇到的一些难点问题,为了综合以前学过的课程学问并融会贯穿。可以通过课程设计的独立完成来通过相关途径解决,从而能够更好的把握程序设计的思想,提升编程力量。1.2 题目概述1.2.1 问题及技术要求此题:画出一个正方体,并将它旋转起来。主要应实现以下 4 点根本要求:1. 用 C/C+或 VB 实现;2. 友好性:界面要友好;3. 可读性:源程序代码清楚、有层次;4. 当鼠标离屏幕中心的位置远近可以打算立方体旋转速度的快慢。1.2.2 理论依据及工作内容题目难点在于实现可视化界面的交互、以及图像的旋转过程。分析题目可以得出程序可以大致分为两个方面的工作内容:1.画出一个正方体。2.使正方体旋转起来。通过在互联网上查找资料,我打算使用 OPENGL 图形库来解决 C/C+编写图形界面困难的问题。- 10 -其次章 设计简介及设计方案论述2.1 设计简介为了实现本程序的两大功能, 打算承受 OPENGL图形库并调用一系列WINDOWS API 承受 C/C+语言编写。首先,应生疏 OPENGL 在 WIN32 平台下的相关 API,以及其余 WINDOWS 窗口交互的相关接口方法,来构建窗口的内容。其次,生疏了解OPENGL 库函数在窗体中实现绘图既绘制正方体,实现正方体旋转功能的相关函数。最终,实现 OPENGL 与 WINDOWS 的交互的过程,完成程序及注释。2.2 OPENGL 图形库简介2.2.1 OPENGL 历史简介OpenGL 是 SGISilicon Graphics Inc.公司对 IRIS GL 进展改进,扩展可移植性, 形成的一个跨平台开放式图形编程接口,利用它可以很便利地开发出有多种特别视觉效果(如光照、纹理、透亮、阴影)的三维图形 。由于 OpenGL 承受类似 C 语言的语法,所以对于学过 C 语言的人来说使用起来特别便利。2.2.2 OPENGL 特点从程序开发人员的角度来看,OpenGL 是一组绘图命令的 API 集合。利 用这些 API 能够便利地描述二维和三维几何物体,并掌握这些物体按某种方式绘制到显示缓冲区中。OpenGL 的 API 集合供给了物体描述、平移、旋转、缩放、光照、纹理、材质、象素、位图、文字、交互以及提高显示性能等方面的功能,根本涵盖了开发二、三维图形程序所需的各个方面。与一般的图形开发工具相比,OpenGL 具有以下几个突出特点:(1) 应用广泛(2)跨平台性(3) 高质量和高性能(4)精彩的编程特性(5)网络透亮性2.2.3 OPENGL 工作挨次OpenGL 的工作挨次就是一个从定义几何要素到把象素段写入帧缓冲区的过程。在屏幕上显示图象的主要步骤是以下 3 步: 1构造几何要素(点、线、多边形、图像、位图),创立对象的数学描述。在三维空间放置对象,选择有利的观看点。 2计算对象的颜色,这些颜色可能直接定义,或由光照条件及纹理间接给出。 3光栅化,把对象的数学描述和颜色信息转换到屏幕的象素。2.3 OPENGL 简洁编程方法2.3.1 OPENGL 根本语法OpenGL 根本函数均使用 gl 作为函数名的前缀,如 glClearColor;实用函数则使用 glu 作为函数名的前缀,如 gluSphere。OpenGL 根本常量的名字以 GL_开头,如 GL_LINE_LOOP;有用常量的名字以 GLU_开头,如GLU_FILL。一些函数如 glColor*(定义颜色值),函数名后可以接不同的后缀以支持不同的数据类型和格式。如 glColor3b()、glColor3d()、 glColor3f()和 glColor3bv()等,这几个函数在功能上是相像的,只是适用于不同的数据类型和格式,其中 3 表示该函数带有三个参数,b、d、f 分别表示参数的类型是字节型、双精度浮点型和单精度浮点型,v 则表示这些参数是以向量数组形式消灭的。OpenGL 还定义了一些特别的类型名,如 GLfloat,GLvoid。它们其实就是 C 中的 float 和 void。在 gl.h 文件中可以看到以下定义:typedef float GLfloat; typedef void GLvoid;一些根本的数据类型都有类似的定义。2.3.2 OPENGL 状态机制OpenGL 的工作方式是一种状态机制,它可以进展各种状态或模式设置,这些状态或模式在重转变它们之前始终有效。例如,当前颜色就是一个状态变量,在这个状态转变之前,绘制的每个象素都将使用该颜色,直到当前颜色被设置为其它颜色为止。OpenGL 中大量地使用了这种状态机制, 如颜色模式、投影模式、单双显示缓存区的设置、背风光的设置、光源的位置和特性等等。2.3.3 OPENGL 根本构造OpenGL 程序的根本构造可分为三个局部:第一局部是初始化局部,主要是设置一些 OpenGL 的状态开关,如颜色模式(RGBA 或 ALPHA 等)的选择,是否作光照处理(假设有的话,还需设置光源的特性),深度检验,裁剪等等。这些状态一般都用函数 glEnable, glDisable来设置,中为相应的状态。其次局部设置观看坐标系下的取景模式和取景框位置及大小。主要利用了三个函数:1. 函数 void glViewport(left, top, right, bottom):设置在屏幕上的窗口大小, 四个参数描述屏幕窗口四个边界坐标(以象素表示);2. 函数 void glOrtho(left, right, bottom, top, near, far):设置投影方式为正交投影(平行投影),其取景体积观看体是一个各面均为矩形的六面体; 3函数 void gluPerspective(fovy, aspect, zNear, zFar):设置投影方式为透视投影,其取景体积观看体是一个截头锥体棱台,在这个体积内的物体投影到锥体的顶点。第三局部是 OpenGL 的主要局部,使用 OpenGL 的库函数构造几何物体对象的数学描述,包括点线面的位置和拓扑关系,几何变换,光照处理等等。2.4 程序所使用的 OPENGL 库函数1OpenGL 函数库分为以下几类:(1)OpenGL 核心库:gl115 个函数(2)OpenGL 编程关心库:aux31 个函数(3)OpenGL实 用 程 序 工 具 包 OpenGLutilitytoolkit , GLUT : glut30 多个函数(4) Windows 专用库:wgl6 个函数(5) OpenGL 有用库(GLU)利用较低层 OpenGL 命令编写一些执行特别任务的例程,如纹理映射、坐标变换、NURBS 曲线曲面等。GLU 库函数前缀都用 glu。(6)OpenGL 的 X Window 系统扩大(GLX)在使用 X Window 系统的机器上,供给一种建立 OpenGL 现场(context), 并把它与可绘(draw able)窗口关联起来的方法。GLX 作为 OpenGL 的附件提供。GLX 库函数前缀为 glx。(7)OpenGL Programming Guide 关心库(Auxiliary Library)这个库建立了一系列简洁而又较完整的编程例子,例如初始化窗口、监控输入,以及绘制一些三维几何体等函数。关心库函数用前缀 aux。在 Windows95/98 中,相关的库以动态链接库的形式存在,opengl32.lib、glu32.lib、glaux.lib 分别表示OpenGL 库,有用库和关心库,和它们相应的头文件是 gl.h、glu.h 及 glaux.h。2根本常用函数初始化glutInit 创立窗口glutCreateWindow设定窗口的显示模式glutInitDisplayMode指定窗口的位置和大小glutInitWindowPosition 和 glutInitWindowSize 指定窗口的显示内容函数glutDisplayFunc运行框架glutMainLoop 刷窗口的缓冲区glClear(GL_COLOR_BUFFER_BIT); 设定投影参数(将三维图形投影到显示窗口)glMatrixMode(GL_PROJECTION);2.5 OPENGL 及 WINDOWS 坐标系OPENGL 的三维坐标系如图 2-1 所示: XOY 平面为屏幕所在YOXZ图 2-1 OPENGL 三维坐标系WINDOWS 的窗体坐标如图 2-2 所示:OXY图 2-2WINDOWS 窗体二维坐标系2.6 WINDOWS 下配置 OPENGL 环境第一步:选择一个编译环境现在 Windows 系统的主流编译环境有 Visual Studio,Broland C+ Builder, Dev-C+等,它们都是支持 OpenGL 的。但这里我选择 VC+ 6.0 作为 OpenGL 的环境。其次步:安装 GLUT 工具包GLUT 不是 OpenGL 所必需的,但它会给我们的学习带来肯定的便利,推举安装。Windows 环境下的 GLUT 下载地址:大小约为 150k :/ opengl.org/resources/libraries/glut/glutdlls37beta.zipWindows 环境下安装 GLUT 的步骤:1、将下载的压缩包解开,将得到 5 个文件2、以我的安装名目为例:(1) “d:Program FilesMicrosoft Visual StudioVC98includeGL 文件夹”。把解压得到的 glut.h 放到这个 GL 文件夹里。没有 GL 文件夹可以自己建一个,一般都有的。(2) “d:Program FilesMicrosoft Visual StudioVC98lib 文件夹”。把解压得到的glut.lib 和 glut32.lib 放到静态函数库所在文件夹,即 lib 文件夹。(3) 把解压得到的 glut.dll 和 glut32.dll 放到操作系统名目下面的 system32 文件夹内。典型的位置为:C:WindowsSystem32这是格外重要的动态链接库设置!2.7 WINDOWS 消息机制消息机制是Windows 应用程序的核心,在Windows 中发生的一切都可以用消息来表示,消息用于告知操作系统发生了什么,全部的Windows 应用程序都是消息驱动的,除了WM_COMMAND 消息,全部以WM_为前缀的消息都是标准的Windows 消息,如窗口、鼠标移动、窗口大小转变等,程序启动或退出甚至每一段固定的时间都会产生标准 Windows消息。Windows 消息掌握中心一般是三层构造,其顶端就是Windows 内核。Windows 内核维护着一个消息队列,其次级掌握中心从这个消息队列中猎取属于自己管辖的消息,后做出处理, 有些消息直接处理掉,有些还要发送给下一级窗体(Window)或控件Control。其次级掌握中心一般是各Windows 应用程序的Application 对象。第三级掌握中心就是 Windows 窗体对象,每一个窗体都有一个默认的窗体过程,这个过程负责处理各种接收到的消息。1、消息的组成:一个消息由一个消息名称UINT,和两个参数WPARAM,LPARAM。当用户进展了输入或是窗口的状态发生转变时系统都会发送消息到某一个窗口。例如当菜单转中之后会有WM_COMMAND 消息发送,WPARAM 的高字中HIWORD(wParam)是命令的 ID 号,对菜单来讲就是菜单 ID。固然用户也可以定义自己的消息名称,也可以利用自定义消息来发送通知和传送数据。2、谁将收到消息:一个消息必需由一个窗口接收。在窗口的过程 WNDPROC中可以对消息进展分析,对自己感兴趣的消息进展处理。例如你期望对菜单项选择择进展处理那么你可以定义对WM_COMMAND 进展处理的代码,假设期望在窗口中进展图形输出就必需对WM_PAINT 进展处理。3、未处理的消息到那里去了:M$为窗口编写了默认的窗口过程,这个窗口过程将负责处理那些你不处理消息。正由于有了这个默认窗口过程我们才可以利用 Windows 的窗口进展开发而不必过多关注窗口各种消息的处理。例如窗口在被拖动时会有很多消息发送,而我们都可以不予理睬让系统自己去处理。4、窗口句柄:说到消息就不能不说窗口句柄,系统通过窗口句柄来在整个系统中唯一标识一个 窗口,发送一个消息时必需指定一个窗口句柄说明该消息由那个窗口接收。而每个窗口都会 有自己的窗口过程,所以用户的输入就会被正确的处理。例如有两个窗口共用一个窗口过程 代码,你在窗口一上按下鼠标时消息就会通过窗口一的句柄被发送到窗口一而不是窗口二。一个消息从产生到被一个窗口响应,其中有5 个步骤:1) 系统中发生了某个大事。2) Windows 把这个大事翻译为消息,然后把它放到消息队列中。3) 应用程序从消息队列中接收到这个消息,把它存放在TMsg 记录中。4) 应用程序把消息传递给一个适当的窗口的窗口过程。5) 窗口过程响应这个消息并进展处理。步骤 3 和 4 构成了应用程序的消息循环。消息循环往往是Windows 应用程序的核心,由于消息循环 使一个应用程序能够响应外部的大事。消息循环的任务就是从消息队列中检索消息,然后把消息传递给适当的窗口。假设消息队列中没有消息,Windows 就允许其他应用程序处理它们的消息。 Windows 操作系统最大的特点就是其图形化的操作界面,其图形化界面是建立在其消息处理机制这个根底之上的2.8 大体设计方案综上所述,在本程序中。首先使用相关的 WINDOWS API 创立窗口,其次实现程序的相应功能:1. 使用 OPENGL 相应库函数画出正方体。2. 使之旋转起来。3. 在窗体中响应鼠标大事,掌握正方体的旋转。程序流程图如图 2-3 所示:WINMAIN 主程序将程序激活并进入消息循环程序激活由CreateGLWindow创立窗体创立窗体成功由函数 InitGL初始化 OPENGL 调用相关参数由 DrawGLscene在窗体中实现绘图旋转程序完成由KillGLWindows销毁窗口,推出消息循环,完毕程序。图 2-3 程序流程图程序的大体内容以及机构已经构造成型,功能局部还需要进一步的细化。明显在消息循环中的内容还远不止这些,还需参加响应以下大事: 1当窗口大小发生变化时,重置窗口。2. 响应鼠标大事,并转变相对应的参数值,来转变旋转速度。3. 响应窗口中断大事,如关闭大事、屏保大事。第三章 具体设计3.1 OPENGL 的绘制工作上一章我们提到完成 OPENGL 的绘制工作主有两个主要方面的工作需要完成: 1OPENGL 的初始化。2OPENGL 的绘制工作,其中包括了是正方体旋转。以下我们分别来完成。3.1.1 OPENGL 的初始化工作通过查找资料 OPENGL 的初始化工作由如下库函数过程来完成glShadeModel(GL_SMOOTH);/ 启用阴影平滑启用 smooth shading(阴影平滑)。阴影平滑通过多边形精细的混合颜色,并对外部光进展平滑。glClearColor(0.0f, 0.0f, 0.0f, 0.5f);/ 黑色背景颜色值的范围从 0.0f 到 1.0f。0.0f 代表最黑的状况,1.0f 就是最亮的状况。glClearColor 后的第一个参数是 Red Intensity(红色重量),其次个是绿色,第三个是蓝色。最大值也是 1.0f,代表特定颜色重量的最亮状况。接下来的三个函数必需做的是关于 depth buffer(深度缓存)的。将深度缓存设想为屏幕后面的层。深度缓存不断的对物体进入屏幕内部有多深进展跟踪。我们本节的程序其实没有真正使用深度缓存,但几乎全部在屏幕上显示3D 场景OpenGL 程序都使用深度缓存。它的排序打算那个物体先画。这样您就不会将一个圆形后面的正方形画到圆形上来。深度缓存是 OpenGL 格外重要的局部。glClearDepth(1.0f);/ 设置深度缓存glEnable(GL_DEPTH_TEST);/ 启用深度测试glDepthFunc(GL_LEQUAL);/ 所作深度测试的类型接下来是透视图修饰使透视图好看些: glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);/ 真正精细的透视修正3.1.2 OPENGL 的主体绘制工作首先使用 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 去除屏幕和深度缓存然后使用 glLoadIdentity;重置当前的模型观看矩阵,确定绘制好图形的位置glTranslatef(0.0f,0.0f,z); 移入屏幕 z 个单位。函数 glTranslatef(x, y, z)作用为沿着 X, Y 和 Z 轴移动;现在是本程序中最重要的语句:glRotatef(angle,0.0f,0.0f,0.0f),其中 angle 为每次旋转的角度,之后分别是 XYZ 三个轴的旋转重量,这三个旋转重量构成了三维坐标轴中的旋转法向量。glBegin(GL_QUADS);开头绘制四边形(使用每 4 个连续的顶点定义一个四边形的“填充图元-GL_QUANS“)开头绘制顶点: 前面glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f,1.0f);/ 纹理和四边形的左下glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f,1.0f);/ 纹理和四边形的右下glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,1.0f,1.0f);/ 纹理和四边形的右上glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,1.0f,1.0f);/ 纹理和四边形的左上纹理的相关的内容在后面再介绍,先在正方体的前面已经绘制好了,接下来依次绘制:后面,顶面,底面,右面,左面并以 glEnd;完毕3.2 鼠标掌握正方体的旋转上面我们介绍到旋转函数的作用,来解决程序是要使正方体旋转起来的问题,程序还有一个要求就是,当鼠标离屏幕中心越来越远时,正方体旋转速度加快。我们可以在 WINDOWS 消息响应中参加鼠标大事,猎取当前鼠标位置。case WM_MOUSEMOVE:int mousex=LOWORD(lParam);/得到鼠标的 x 方向重量int mousey=HIWORD(lParam);/得到鼠标的 y 方向重量m_mousex=mousey-m_height/2;/掌握增加正方体绕 y 轴的旋转重量m_mousey=mousex-m_width/2;/掌握增加正方体绕 x 轴的旋转重量return 0;m_mousex,m_mousey 为掌握旋转的全局变量。3.3 重置 OPENGL 窗口下面的代码的作用是重设置 OpenGL 场景的大小,而不管窗口的大小是否已经转变(假定您没有使用全屏模式)。甚至您无法转变窗口的大小时(例如您在全屏模式下),它至少仍将运行一次-在程序开头时设置我们的透视图。OpenGL 场景的尺寸将被设置成它显示时所在窗口的大小。GLvoid ReSizeGLScene(GLsizei width, GLsizei height)/ 重置 OpenGL 窗口大小if (height=0)/ 防止被零除height=1;/ 将 Height 设为 1glViewport(0, 0, width, height);/ 重置当前的视口下面几行为透视图设置屏幕。意味着越远的东西看起来越小。这么做创立了一个现实外观的场景。此处透视依据基于窗口宽度和高度的 45 度视角来计算。0.1f, 100.0f 是我们在场景中所能绘制深度的起点和终点。glMatrixMode(GL_PROJECTION) 指明接下来的两行代码将影响 projection matrix(投影矩阵)。投影矩阵负责为我们的场景增加透视。 glLoadIdentity 近似于重置。它将所选的矩阵状态恢复成其原始状态。调用 glLoadIdentity 之后我们为场景设置透视图。glMatrixMode(GL_MODELVIEW) 指 明 任 何 的 变 换 将 会 影 响 modelview matrix(模型观看矩阵)。模型观看矩阵中存放了我们的物体讯息。最终我们重置模型观看矩阵glMatrixMode(GL_PROJECTION);/ 选择投影矩阵glLoadIdentity;/ 重置投影矩阵/ 设置视口的大小gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);glMatrixMode(GL_MODELVIEW);/ 选择模型观看矩阵glLoadIdentity;/ 重置模型观看矩阵3.4 WINDOWS 中 OPENGL 窗体设置及创立WINDOWS 中 OPENGL 的窗体的设置及创立主要有以下几个大的方面,其中具体细节不再阐述:1. 相关变量的设置HGLRC柄hRC=NULL;/窗口着色描述表句HDChDC=NULL;/OpenGL 渲染描述表句柄HWNDhWnd=NULL;/保存我们的窗口句柄HINSTANCEhInstance;/保存程序的实例第一行设置的变量是 Rendering Context(着色描述表)。每一个 OpenGL 都被连接到一个着色描述表上。着色描述表将全部的 OpenGL 调用命令连接到 Device Context(设备描述表)上。我将 OpenGL 的着色描述表定义为 hRC 。要让您的程序能够绘制窗口的话,还需要创立一个设备描述表,也就是其次行的内容。Windows 的设备描述表被定义为 hDC 。DC 将窗口连接到 GDI(Graphics Device Interface 图形设备接口)。而 RC 将 OpenGL 连接到 DC。第三行的变量 hWnd 将保存由 Windows 给我们的窗口指派的句柄。最终,第四行为我们的程序创立了一个 Instance(实例)。2. 取得窗口实例,定义窗口类并注册3. 创立窗口并检查窗口是否成功创立。我们将传递CreateWindowEx所需的全部参数。如扩展风格、类名字(与您在注册窗口类时所用的名字一样)、窗口标题、窗体风格、窗体的左上角坐标(0,0 是个安全的选择)、窗体的宽和高。我们没有父窗口,也不想要菜单,这些参数被设为 NULL。还传递了窗口的实例,最终一个参数被设为 NULL。4. OPENGL 供给了有限数量的像素模式,它包括的属性有颜色模式,深度缓冲区,等等内容。像素模式与渲染窗口、设备环境、以及所支持的数据类型相关联。在创 建 一 个 渲 染 环 境 之 前 , 必 须 使 用 一 种 适 当 的 像 素 格 式 , 既 PIXELFORMATDESCRIPTO 来进展设置5. 创立窗口成功并响应相应的大事。如重置窗口大小和推出。之后将它设为前端窗口(给它更高的优先级),并将焦点移至此窗口。然后调用 ReSizeGLScene 将屏幕的宽度和高度设置给透视 Open

    注意事项

    本文(计算机专业课程设计OPENGL旋转立方体.docx)为本站会员(老**)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开