OpenGL编程基础
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、OpenGL框架 框架
1、OpenGL简介 、 简介 OpenGL(Open Graphics Library,开放图形库), 是一个二维/三维的计算机图形和模型库,它源于SGI (Silicon Graphics inc.)公司为其图形工作站开发的 IRIS GL,在跨平台移植过程中发展成为OpenGL。 目前, OpenGL已成为开放的国际图形标准。
OpenGL API Calls OpenGL Command Buffer T&L Rasterization Frame buffer
2010-12-16
9
(3)OpenGL状态机制 ) 状态机制 OpenGL的工作方式是一种状态机制,它可以进 行各种状态或模式设置,这些状态或模式在重新改 变它们之前一直有效。 状态变量可以通过glEnable()、glDisable()这两个 函数来设置成有效或无效状态 。 另外可以用下列四个函数来获取某个状态变量的 值:glGetBooleanv()、glGetDoublev()、 glGetFloatv()和glGetIntegerv()。
2010-12-16
建立变换(坐标变换,投影变换,视窗变换) – 建立变换(坐标变换,投影变换,视窗变换)。
• 颜色模式的指定:RGBA模式和颜色索引模式 颜色模式的指定:
–提供人机交互的接口。 提供人机交互的接口。
2
OpenGL的特点 的特点 从程序开发人员的角度来看, 从程序开发人员的角度来看,OpenGL是一组 是一组 绘图命令的API集合。利用这些 集合。 绘图命令的 集合 利用这些API能够方便地 能够方便地 描述二维和三维几何物体, 描述二维和三维几何物体,并控制这些物体按 某种方式绘制到显示缓冲区中。 某种方式绘制到显示缓冲区中。OpenGL的API 的 集提供了物体描述、平移、旋转、缩放、光照、 集提供了物体描述、平移、旋转、缩放、光照、 纹理、材质、像素、位图、文字、 纹理、材质、像素、位图、文字、交互以及提 高显示性能等方面的功能,基本涵盖了开发二、 高显示性能等方面的功能,基本涵盖了开发二、 三维图形程序所需的各个方面。 三维图形程序所需的各个方面。与一般的图形 开发工具相比, 开发工具相比,OpenGL具有以下几个突出特 具有以下几个突出特 点:
第一步,选择一个编译环境, 第一步,选择一个编译环境,如VC++ 第二步,安装GLUT工具包 第二步,安装GLUT工具包 第三步,建立一个OpenGL工程 第三步,建立一个OpenGL工程 第四步, 第四步,编译连接 第五步, 第五步,执行程序
OpenGL初步编程 OpenGL初步编程
OpenGL库和头文件: OpenGL库和头文件: 库和头文件
GLbitfield
2010-12-16 12
百度文库数据类型
定义为C类型 signed char short long float double unsigned char unsigned short unsigned long
5、函数命名约定 OpenGL函数都遵循一个命名约定,即采用以下格式:
<库前缀><根命令><可选的参数个数><可选的参数类型>
函数ChangeSize ChangeSize是窗口大小改变时调用的登记函数 // 函数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(); } //函数SetupRC用于初始化, //函数SetupRC用于初始化,常用来设置场景渲染状态 函数SetupRC用于初始化 void SetupRC(void) { // 设置窗口的清除色为白色 glClearColor(1.0f, 1.0f, 1.0f, 1.0f); }
2010-12-16
红色成分 0.0 1.0 0.0 1.0 1.0 0.0 0.25
绿色成分 0.0 0.0 1.0 1.0 0.0 1.0 0.25
蓝色成分 0.0 0.0 0.0 0.0 1.0 1.0 0.25
14
OpenGL初步编程 OpenGL初步编程
在Windows下开发和创建一个OpenGL程 Windows下开发和创建一个OpenGL程 下开发和创建一个OpenGL 序的基本步骤: 序的基本步骤:
2010-12-16
10
3、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函数库
动态库: 动态库:opengl32.dll glu32.dll glut32.dll 放入 windows\system32目录下 windows\system32目录下 静态库: glut32.lib放入VC安 静态库:opengl32.lib glu32.lib glut32.lib放入VC安 装目录的LIB目录下 装目录的LIB目录下 头文件: glut.h放入VC安装目录的 头文件:gl.h glu.h glut.h放入VC安装目录的 Include\GL文件夹下 Include\GL文件夹下
(1)跨平台特性 OpenGL与硬件、窗口和操作系统是相互独立的。 与硬件、窗口和操作系统是相互独立的。 与硬件 为了构成一个完整功能的图形处理系统, 为了构成一个完整功能的图形处理系统,其设计实现 图形硬件、操作系统、窗口系统、 共分 5 层:图形硬件、操作系统、窗口系统、 OpenGL和应用软件。 和应用软件。 和应用软件 因而, 因而, OpenGL可以集成到各种标准窗口和操作 可以集成到各种标准窗口和操作 系统中。例如,操作系统包括UNIX,Windows NT, 系统中。例如,操作系统包括 , Windows 95/98, DOS等;窗口系统包括 Windows, 等 窗口系统包括X , Microsoft Windows等。 等 OpenGL图形函数定义独立于任何程序设计语言,在 图形函数定义独立于任何程序设计语言, 图形函数定义独立于任何程序设计语言 各种编程语言中, 各种编程语言中,如C,C++,FORTRAIN,Ada和 , , , 和 Java等,都可以调用 的库函数。 等 都可以调用OpenGL的库函数。 的库函数
例如函数glColor3f(…),gl表示这个函数来自库 gl.h,color表示该函数用于颜色设定,3f表示这个 函数采用了三个浮点数参数。
2010-12-16
13
6、OpenGL中的颜色 在OpenGL中,一种颜色用红、绿、蓝成分的混合来 表示,每种成分的值范围是0.0到1.0 。
数据类型 黑 红 绿 黄 紫 青 深灰
2010-12-16 11
4、OpenGL中的数据类型 、 中的数据类型 内部表示法 GLbyte 8位整数 GLshort 16位整数 GLint,GLsizei 32位整数 GLfloat GLclampf GLfloat,GLclampf 32位浮点数 GLdouble,GLclampd 64位浮点数 GLubyte,GLboolean 8位无符号整数 GLshort 16位无符号整数 GLuint,GLenum, 32位无符号整数
2、OpenGL的工作方式 (1)体系结构 一个完整的窗口系统的OpenGL 图形处理系统的结构如右图所示: 最底层为图形硬件,第二层为操 作系统,第三层为窗口系统,第 四层为OpenGL,最上面的层为 应用软件。
2010-12-16
应用软件
OpenGL
窗口系统
操作系统
图形硬件
8
(2)OpenGL的流水线 当应用程序进行OpenGL API函数调用时,OpenGL命 令将被放在一个命令缓冲区中,这样,命令缓冲区中 包含了大量的命令、顶点数据和纹理数据。当这个缓 冲区被清空时,缓冲区中的命令和数据都将传递给流 水线的下一个阶段。
(5)出色的编程特性 ) OpenGL在各种平台上已有多年的应用实践, 在各种平台上已有多年的应用实践, 在各种平台上已有多年的应用实践 加上严格的规范控制,因此OpenGL具有良好 加上严格的规范控制,因此 具有良好 的稳定性。 的稳定性。 OpenGL具有充分的独立性与易使用性等。 具有充分的独立性与易使用性等。 具有充分的独立性与易使用性等
程序清单1.1: 程序清单1.1:在窗口内绘制一个矩形 1.1 //GLRect.c #include <windows.h> #include <gl/glut.h> #include<gl/gl.h> #include<gl/glu.h> // 函数RenderScene用于在窗口中绘制需要的图形 函数RenderScene用于在窗口中绘制需要的图形 RenderScene void RenderScene(void) { //用当前清除色清除颜色缓冲区 用当前清除色清除颜色缓冲区, //用当前清除色清除颜色缓冲区,即设定窗口的背景色 glClear(GL_COLOR_BUFFER_BIT); //设置当前绘图使用的RGB颜色 //设置当前绘图使用的RGB颜色 设置当前绘图使用的RGB glColor3f(1.0f, 0.0f, 0.0f); //使用当前颜色绘制一个填充的矩形 //使用当前颜色绘制一个填充的矩形 glRectf(100.0f, 150.0f, 150.0f, 100.0f); //刷新OpenGL命令队列 //刷新OpenGL命令队列 刷新OpenGL glFlush(); }
(3)网络透明性 ) 建立在客户/ 建立在客户/服务器模型上的网络透明性是 OpenGL的固有特性,它允许一个运行在工作站上的 的固有特性, 的固有特性 进程在本机或通过网络在远程工作站上显示图形。 进程在本机或通过网络在远程工作站上显示图形。利 用这种性质能够均衡各工作站的工作负荷, 用这种性质能够均衡各工作站的工作负荷,共同承担 图形应用任务。 图形应用任务。 (4)高质量和高性能 ) 无论是在CAD/CAM、三维动画还是可视化仿真 、 无论是在 等领域, 等领域,OpenGL高质量和高效率的图形生成能力都 高质量和高效率的图形生成能力都 能得到充分的体现。在这些领域中, 能得到充分的体现。在这些领域中,开发人员可以利 制作出效果逼真的二、 用OpenGL制作出效果逼真的二、三维图像来。 制作出效果逼真的二 三维图像来。
2010-12-16
华中科技大学计算机学院 李国宽
1
OpenGL的功能: 的功能: 的功能 • 模型绘制 –绘制点、线和多边形,构造三维模型。 绘制点、线和多边形,构造三维模型。 • 模型观察 • 光照应用 • 图象效果增强:反走样、混合和雾化 图象效果增强: • 位图和图象处理 • 纹理映射 • 实时动画:双缓存技术(double buffer) 实时动画: • 交互技术
(2)应用的广泛性 ) OpenGL是目前最主要的二、三维交互式图形应用程 是目前最主要的二、 是目前最主要的二 序开发环境, 序开发环境,已成为业界最受推荐的图形应用编程接 自从1992年发表以来,OpenGL已被广泛地应用 年发表以来, 口。自从 年发表以来 已被广泛地应用 于CAD/CAM、三维动画、数字图像处理以及虚拟现 、三维动画、 实等领域, 公司的3D 实等领域,Kinetix公司的 Studio Max就是突出的 公司的 就是突出的 代表。无论是在PC机上 机上, 代表。无论是在 机上,还是在工作站甚至是大型 机和超级计算机上, 机和超级计算机上,OpenGL都能表现出它的高性能 都能表现出它的高性能 和强大威力。 和强大威力。
1、OpenGL简介 、 简介 OpenGL(Open Graphics Library,开放图形库), 是一个二维/三维的计算机图形和模型库,它源于SGI (Silicon Graphics inc.)公司为其图形工作站开发的 IRIS GL,在跨平台移植过程中发展成为OpenGL。 目前, OpenGL已成为开放的国际图形标准。
OpenGL API Calls OpenGL Command Buffer T&L Rasterization Frame buffer
2010-12-16
9
(3)OpenGL状态机制 ) 状态机制 OpenGL的工作方式是一种状态机制,它可以进 行各种状态或模式设置,这些状态或模式在重新改 变它们之前一直有效。 状态变量可以通过glEnable()、glDisable()这两个 函数来设置成有效或无效状态 。 另外可以用下列四个函数来获取某个状态变量的 值:glGetBooleanv()、glGetDoublev()、 glGetFloatv()和glGetIntegerv()。
2010-12-16
建立变换(坐标变换,投影变换,视窗变换) – 建立变换(坐标变换,投影变换,视窗变换)。
• 颜色模式的指定:RGBA模式和颜色索引模式 颜色模式的指定:
–提供人机交互的接口。 提供人机交互的接口。
2
OpenGL的特点 的特点 从程序开发人员的角度来看, 从程序开发人员的角度来看,OpenGL是一组 是一组 绘图命令的API集合。利用这些 集合。 绘图命令的 集合 利用这些API能够方便地 能够方便地 描述二维和三维几何物体, 描述二维和三维几何物体,并控制这些物体按 某种方式绘制到显示缓冲区中。 某种方式绘制到显示缓冲区中。OpenGL的API 的 集提供了物体描述、平移、旋转、缩放、光照、 集提供了物体描述、平移、旋转、缩放、光照、 纹理、材质、像素、位图、文字、 纹理、材质、像素、位图、文字、交互以及提 高显示性能等方面的功能,基本涵盖了开发二、 高显示性能等方面的功能,基本涵盖了开发二、 三维图形程序所需的各个方面。 三维图形程序所需的各个方面。与一般的图形 开发工具相比, 开发工具相比,OpenGL具有以下几个突出特 具有以下几个突出特 点:
第一步,选择一个编译环境, 第一步,选择一个编译环境,如VC++ 第二步,安装GLUT工具包 第二步,安装GLUT工具包 第三步,建立一个OpenGL工程 第三步,建立一个OpenGL工程 第四步, 第四步,编译连接 第五步, 第五步,执行程序
OpenGL初步编程 OpenGL初步编程
OpenGL库和头文件: OpenGL库和头文件: 库和头文件
GLbitfield
2010-12-16 12
百度文库数据类型
定义为C类型 signed char short long float double unsigned char unsigned short unsigned long
5、函数命名约定 OpenGL函数都遵循一个命名约定,即采用以下格式:
<库前缀><根命令><可选的参数个数><可选的参数类型>
函数ChangeSize ChangeSize是窗口大小改变时调用的登记函数 // 函数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(); } //函数SetupRC用于初始化, //函数SetupRC用于初始化,常用来设置场景渲染状态 函数SetupRC用于初始化 void SetupRC(void) { // 设置窗口的清除色为白色 glClearColor(1.0f, 1.0f, 1.0f, 1.0f); }
2010-12-16
红色成分 0.0 1.0 0.0 1.0 1.0 0.0 0.25
绿色成分 0.0 0.0 1.0 1.0 0.0 1.0 0.25
蓝色成分 0.0 0.0 0.0 0.0 1.0 1.0 0.25
14
OpenGL初步编程 OpenGL初步编程
在Windows下开发和创建一个OpenGL程 Windows下开发和创建一个OpenGL程 下开发和创建一个OpenGL 序的基本步骤: 序的基本步骤:
2010-12-16
10
3、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函数库
动态库: 动态库:opengl32.dll glu32.dll glut32.dll 放入 windows\system32目录下 windows\system32目录下 静态库: glut32.lib放入VC安 静态库:opengl32.lib glu32.lib glut32.lib放入VC安 装目录的LIB目录下 装目录的LIB目录下 头文件: glut.h放入VC安装目录的 头文件:gl.h glu.h glut.h放入VC安装目录的 Include\GL文件夹下 Include\GL文件夹下
(1)跨平台特性 OpenGL与硬件、窗口和操作系统是相互独立的。 与硬件、窗口和操作系统是相互独立的。 与硬件 为了构成一个完整功能的图形处理系统, 为了构成一个完整功能的图形处理系统,其设计实现 图形硬件、操作系统、窗口系统、 共分 5 层:图形硬件、操作系统、窗口系统、 OpenGL和应用软件。 和应用软件。 和应用软件 因而, 因而, OpenGL可以集成到各种标准窗口和操作 可以集成到各种标准窗口和操作 系统中。例如,操作系统包括UNIX,Windows NT, 系统中。例如,操作系统包括 , Windows 95/98, DOS等;窗口系统包括 Windows, 等 窗口系统包括X , Microsoft Windows等。 等 OpenGL图形函数定义独立于任何程序设计语言,在 图形函数定义独立于任何程序设计语言, 图形函数定义独立于任何程序设计语言 各种编程语言中, 各种编程语言中,如C,C++,FORTRAIN,Ada和 , , , 和 Java等,都可以调用 的库函数。 等 都可以调用OpenGL的库函数。 的库函数
例如函数glColor3f(…),gl表示这个函数来自库 gl.h,color表示该函数用于颜色设定,3f表示这个 函数采用了三个浮点数参数。
2010-12-16
13
6、OpenGL中的颜色 在OpenGL中,一种颜色用红、绿、蓝成分的混合来 表示,每种成分的值范围是0.0到1.0 。
数据类型 黑 红 绿 黄 紫 青 深灰
2010-12-16 11
4、OpenGL中的数据类型 、 中的数据类型 内部表示法 GLbyte 8位整数 GLshort 16位整数 GLint,GLsizei 32位整数 GLfloat GLclampf GLfloat,GLclampf 32位浮点数 GLdouble,GLclampd 64位浮点数 GLubyte,GLboolean 8位无符号整数 GLshort 16位无符号整数 GLuint,GLenum, 32位无符号整数
2、OpenGL的工作方式 (1)体系结构 一个完整的窗口系统的OpenGL 图形处理系统的结构如右图所示: 最底层为图形硬件,第二层为操 作系统,第三层为窗口系统,第 四层为OpenGL,最上面的层为 应用软件。
2010-12-16
应用软件
OpenGL
窗口系统
操作系统
图形硬件
8
(2)OpenGL的流水线 当应用程序进行OpenGL API函数调用时,OpenGL命 令将被放在一个命令缓冲区中,这样,命令缓冲区中 包含了大量的命令、顶点数据和纹理数据。当这个缓 冲区被清空时,缓冲区中的命令和数据都将传递给流 水线的下一个阶段。
(5)出色的编程特性 ) OpenGL在各种平台上已有多年的应用实践, 在各种平台上已有多年的应用实践, 在各种平台上已有多年的应用实践 加上严格的规范控制,因此OpenGL具有良好 加上严格的规范控制,因此 具有良好 的稳定性。 的稳定性。 OpenGL具有充分的独立性与易使用性等。 具有充分的独立性与易使用性等。 具有充分的独立性与易使用性等
程序清单1.1: 程序清单1.1:在窗口内绘制一个矩形 1.1 //GLRect.c #include <windows.h> #include <gl/glut.h> #include<gl/gl.h> #include<gl/glu.h> // 函数RenderScene用于在窗口中绘制需要的图形 函数RenderScene用于在窗口中绘制需要的图形 RenderScene void RenderScene(void) { //用当前清除色清除颜色缓冲区 用当前清除色清除颜色缓冲区, //用当前清除色清除颜色缓冲区,即设定窗口的背景色 glClear(GL_COLOR_BUFFER_BIT); //设置当前绘图使用的RGB颜色 //设置当前绘图使用的RGB颜色 设置当前绘图使用的RGB glColor3f(1.0f, 0.0f, 0.0f); //使用当前颜色绘制一个填充的矩形 //使用当前颜色绘制一个填充的矩形 glRectf(100.0f, 150.0f, 150.0f, 100.0f); //刷新OpenGL命令队列 //刷新OpenGL命令队列 刷新OpenGL glFlush(); }
(3)网络透明性 ) 建立在客户/ 建立在客户/服务器模型上的网络透明性是 OpenGL的固有特性,它允许一个运行在工作站上的 的固有特性, 的固有特性 进程在本机或通过网络在远程工作站上显示图形。 进程在本机或通过网络在远程工作站上显示图形。利 用这种性质能够均衡各工作站的工作负荷, 用这种性质能够均衡各工作站的工作负荷,共同承担 图形应用任务。 图形应用任务。 (4)高质量和高性能 ) 无论是在CAD/CAM、三维动画还是可视化仿真 、 无论是在 等领域, 等领域,OpenGL高质量和高效率的图形生成能力都 高质量和高效率的图形生成能力都 能得到充分的体现。在这些领域中, 能得到充分的体现。在这些领域中,开发人员可以利 制作出效果逼真的二、 用OpenGL制作出效果逼真的二、三维图像来。 制作出效果逼真的二 三维图像来。
2010-12-16
华中科技大学计算机学院 李国宽
1
OpenGL的功能: 的功能: 的功能 • 模型绘制 –绘制点、线和多边形,构造三维模型。 绘制点、线和多边形,构造三维模型。 • 模型观察 • 光照应用 • 图象效果增强:反走样、混合和雾化 图象效果增强: • 位图和图象处理 • 纹理映射 • 实时动画:双缓存技术(double buffer) 实时动画: • 交互技术
(2)应用的广泛性 ) OpenGL是目前最主要的二、三维交互式图形应用程 是目前最主要的二、 是目前最主要的二 序开发环境, 序开发环境,已成为业界最受推荐的图形应用编程接 自从1992年发表以来,OpenGL已被广泛地应用 年发表以来, 口。自从 年发表以来 已被广泛地应用 于CAD/CAM、三维动画、数字图像处理以及虚拟现 、三维动画、 实等领域, 公司的3D 实等领域,Kinetix公司的 Studio Max就是突出的 公司的 就是突出的 代表。无论是在PC机上 机上, 代表。无论是在 机上,还是在工作站甚至是大型 机和超级计算机上, 机和超级计算机上,OpenGL都能表现出它的高性能 都能表现出它的高性能 和强大威力。 和强大威力。