OpenGL游戏编程
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
OpenGL概述
• 从程序开发人员的角度来看,OpenGL是一 组绘图命令的API集合。利用这些API能够 方便地描述二维和三维几何物体,并控制 这些物体按某种方式绘制到显示缓冲区中。 OpenGL的API集提供了物体描述、平移、 旋转、缩放、光照、纹理、材质、像素、 位图、文字、交互以及提高显示性能等方 面的功能,基本涵盖了开发二、三维图形 程序所需的各个方面。
OpenGL图形函数定义独立于任何程序设计语言,在 各种编程语言中,如C,C++,FORTRAIN,Ada和 Java等,都可以调用OpenGL的库函数。
OpenGL组成
OpenGL是一种API,包括了多个图形函数, 主要由以下函数库组成。 (1)OpenGL核心库:gl (2)OpenGL实用程序库: glu (3)OpenGL编程辅助库:aux (4)OpenGL实用程序工具包(OpenGL utility toolkit,GLUT):glut (5)Windows专用库:wgl (6)Win32 API函数库
OpenGL中的数据类型
2014-1-3
11
函数命名约定
OpenGL函数都遵循一个命名约定,即采用 以下格式: <库前缀><ห้องสมุดไป่ตู้命令><可选的参数个数><可 选的参数类型> 例如函数glColor3f(…),gl表示这个函数来 自库gl.h,color表示该函数用于颜色设定, 3f表示这个函数采用了三个浮点数参数。
gult库常用函数
• glutInit函数
– Void glutInit(int*argc,char**argv) – 功能:初始化glut库函数,从main函数中接收argc 和argv参数
• glutInitDisplayMode
– glutInitDisplayMode(unsigned int mode) – 功能:用于设置窗口的缓冲区和颜色模式的选择 – 参数:mode一般可以选择单缓冲和双缓冲 GLUT_SIGNAL或者GLUT_DOUBLE – 颜色选择GLUT_RGBA
嵌入式课程设计介绍
• • • • • 课程内容 授课方式 技术储备 考核方法 最终目标
课程内容
• 用C/C++语言实现 跨平台的《水果忍 者》游戏
授课方式
• • • • 理论授课和实际操作相结合 一节理论课程一节操作课程 把项目分解到每节课程中以项目推动课程 根据课程进展进行分组讨论
考核方法
• 行为考核(30分)+项目成绩考核(70分)=100
第五步,执行程序
OpenGL初步编程
OpenGL库和头文件:
动态库:opengl32.dll glu32.dll glut32.dll 放入 windows\system32目录下 静态库:opengl32.lib glu32.lib glut32.lib放入qt 安装目录的LIB目录下 头文件:gl.h glu.h glut.h放入qt安装目录的 Include\QtOpengGL文件夹下
//函数SetupRC用于初始化,常用来设置场景渲染状态 void SetupRC(void) { // 设置窗口的清除色为白色 glClearColor(1.0f, 1.0f, 1.0f, 1.0f); }
void main(void) { //初始化GLUT库OpenGL窗口的显示模式 glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); // 创建一个名为GLRect的窗口 glutCreateWindow("GLRect"); // 设置当前窗口的显示回调函数和窗口再整形回调函数 glutDisplayFunc(RenderScene); glutReshapeFunc(ChangeSize); SetupRC(); //启动主GLUT事件处理循环 glutMainLoop(); }
OpenGL中的颜色
• 在OpenGL中,一种颜色用红、绿、蓝成分 的混合来表示,每种成分的值范围是0.0到 1.0 。
OpenGL初步编程
在Windows下开发和创建一个OpenGL程序的 基本步骤:
第一步,选择一个编译环境,如QtCreator 第二步,安装GLUT工具包 第三步,建立一个OpenGL工程 第四步,编译连接
GL_TRIANGLES
GL_TRIANGLE_S TRIP GL_TRIANGLE_F AN GL_QUADS
GL_QUADS_STR IP
GL_POLYGON
2014-1-3
将指定的顶点用于构造四条形边。在第一对顶点之后,每对顶点定义一个 四边形。和GL_QUADS的顶点顺序不一样,每对顶点以指定顺序的逆序使 用,以便保证绕法的一致 将指定的顶点用于构造一个凸多边形。多边形的边缘决不能相交。最后一 个顶点会自动连接到第一个顶点以确保多边形是封闭的 23
最终目标
• 熟悉C/C++语言 • 能够用C/C++语言解决一个实际问题 • 掌握编程思路
OpenGL简介
OpenGL(Open Graphics Library,开放图形
库),是一个二维/三维的计算机图形和模型库,它源
于SGI(Silicon Graphics inc.)公司为其图形工作站开
发的IRIS GL,在跨平台移植过程中发展成为OpenGL。
// 函数ChangeSize是窗口大小改变时调用的登记函数 void ChangeSize(GLsizei w, GLsizei h) { if(h == 0) h = 1; //设置视区尺寸 glViewport(0, 0, w, h); // 重置坐标系统,使投影变换复位 glMatrixMode(GL_PROJECTION); glLoadIdentity(); // 建立修剪空间的范围 if (w <= h) glOrtho (0.0f, 250.0f, 0.0f, 250.0f*h/w, 1.0f, -1.0f); else glOrtho (0.0f, 250.0f*w/h, 0.0f, 250.0f, 1.0f, -1.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); }
用OpenGL绘图
画点、线和面 glBegin(GL_POINTS); glVertex3f(0.0f,0.0f,0.0f); glVertex3f(10.0f,10.0f,10.0f); glEnd(); 计算机中的图元只是把一组顶点或顶点列表解释 为屏幕上绘制的某些形状,而顶点是用函数 glVertex3f来定义,该函数中的参数指明定义点的x、 y和z坐标。
在绘制三角形的过程中,三个顶点将三角形封闭的过程是有序 的,即三角形的构成路径具有方向性,我们把指定顶点时顺序和方向的 组合称为“绕法”。 在一个全部由不透明封闭表面组成的场景中,背面多边形是永 远看不见的。剔除这些不可见的多边形对于加速图形的渲染有很大的益 处。开启和关闭剔除功能 可以调用带GL_CULL_FACE参数的glEnable 和glDisable函数。默认剔除功能是关闭的。如果一个虚构的对象的顶点 是按照多边形内部 顺时针的方向进行绘制的,那么可以称这个多边形基 于窗口坐标的投影是顺时针的。反之,则为逆时针。 glFrontFace就是用来指定多边形在窗口坐标中的方向是逆时针 还是顺时针的。GL_CCW说明逆时针多边形为正面,而GL_CW说明顺 时针多边形为正面。默认是逆时针多边形为正面
#include <windows.h> #include <glut.h> #include<qgl.h> // 函数RenderScene用于在窗口中绘制需要的图形 void RenderScene(void) { //用当前清除色清除颜色缓冲区,即设定窗口的背景色 glClear(GL_COLOR_BUFFER_BIT); //设置当前绘图使用的RGB颜色 glColor3f(1.0f, 0.0f, 0.0f); //使用当前颜色绘制一个填充的矩形 glRectf(100.0f, 150.0f, 150.0f, 100.0f); //刷新OpenGL命令队列 glFlush(); }
glut常用函数3
• glutReshapeFun
– glutReshapeFunc(void (*func)(int width, int height)); – 功能:窗口重绘函数,单窗口大小发生变化时必须重新绘制窗口, func函数指针就是重绘的函数
• glutMainLoop
– glutMainLoop(void); – 功能:进入GLUT事件处理循环,让所有的与“事件”有关的函数 调用无限循环
目前, OpenGL已成为开放的国际图形标准。
6
技术储备
• C语言基础包括常见的函数、指针、数组、 字符串、结构体等 • C++语言基础包括面向对象编程思想、类、 对象、继承、多态 • 常见的数据结构包括链表、队列、哈希表 • OPENGL API函数的使用 • 跨平台QtCreator开发环境的使用
• glutPostRedisplay
– glutPostRedisplay(void); – 功能:功能类似于直接调用显示回调函数display(),但该函数允 许实现在对何时真正需要调用显示回调函数而作出决策时,变得 更加“智能化”。在GLUT遍历整个事件循环时,必然会检索到许 多要求窗口重绘的事件。如果每次都去直接调用显示回调函数, 窗口必然会被多次绘制。而使用glutPostRedisplay()之后,就使得 在遍历消息队列的整个过程中,只对窗口重绘一次
• glutDisplayFun
– glutDisplayFunc(void (*func)(void)); – 功能:glutDisplayFunc函数用于注册一个绘图函数, 这样操作系 统在必要时刻就会对窗体进行重新绘制操作。类似于windows程 序设计中处理WM_PAINT消息。具体来说呢,就是设置一个函数 当需要进行画图时就调用这个函数
glut常用函数2
• glutWindowPosition
– void glutInitWindowPosition(int x, int y); – 功能:定义要创建窗口出现在屏幕中的位置 – 参数:x窗口出现的x轴坐标。
• glutInitWindowSize
– void glutInitWindowSize(int width, int height); – 功能:创建窗口的大小
跨平台特性 OpenGL与硬件、窗口和操作系统是相互独立的。为 了构成一个完整功能的图形处理系统,其设计实现共 分 5 层:图形硬件、操作系统、窗口系统、 OpenGL 和应用软件。 因而, OpenGL可以集成到各种标准窗口和操作系 统中。例如,操作系统包括UNIX,Windows NT, Windows 95/98, DOS等;窗口系统包括X Windows, Microsoft Windows等。
22
模式 GL_POINTS GL_LINES GL_LINE_STRIP GL_LINE_LOOP
图元类型
将指定的各个顶点用于创建单个的点 将指定的顶点用于创建线段。每两个顶点指定一条单独的线段。如果顶点 个数是奇数,则忽略最后一个 将指定的顶点用于创建线条。第一个顶点之后的每个顶点指定的是线条延 伸到的下一个点 特性和GL_LINE_STRIP相似,只不过最后一条线段是在指定的最后一个和 第一个顶点之间绘制。典型情况下,这用于绘制那些可能违反了 GL_POLYGON用法规则的封闭区域 将指定的顶点用于构造三角形。每三个顶点指定一个新三角形。如果顶点 个数不是三的倍数,多余的顶点将被忽略 将指定的顶点用于创建三角条。指定前三个顶点之后,后继的每个顶点与 它前面两个顶点一起用来构造下一个三角形。每个顶点三元组(在最初的 组之后)会自动重新排列以确保三角形绕法的一致性。 将指定的顶点用于构造三角扇形。第一个顶点充当原点,第三个顶点之后 的每个顶点与它的前一个顶点还有原点一起组合。 每四个顶点一组用于构造一个四边形。如果顶点个数不是四的倍数,多余 的顶点将被忽略