第三章 OpenGL编程基础_第1页
第三章 OpenGL编程基础_第2页
第三章 OpenGL编程基础_第3页
第三章 OpenGL编程基础_第4页
第三章 OpenGL编程基础_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、,第三章,OpenGL编程基础,OpenGL 编程基础,第三章 - 2,内容,OpenGL简介 OpenGL API层次图 OpenGL核心库 OpenGL实用程序库 OpenGL系统扩展库 OpenGL实用程序工具库 OpenGL图形编程环境设置 OpenGL编程示例,OpenGL 简介,OpenGL(Open Graphics Library),源于美国SGI公司为其图形工作站开发的IRIS GL,在跨平台移植过程中发展成为OpenGL,现在OpenGL被认为是高性能图形和交互式视景处理的标准。 / SGI在1992年7月发布1.0版,后成为工业标准

2、,由成立于1992年的独立财团OpenGL Architecture Review Board (ARB)控制。 1995年12月ARB批准了1.1版本。 1999年5月通过的1.2.1。 2004年7月28日正式发布OpenGL 1.5。,OpenGL 编程基础,3,OpenGL 简介,关于OpenGL 1.5的应用,这些公司在一个联合声明中是这样阐述的:“可以实时地以电影画质渲染出轰动今夏的任何一部巨片中的计算机图形场景,而不用花上几个月去制作。汽车设计师可以设计出与照片别无二致的汽车造型;而喷气式战斗机的训练模拟则不但好看,而且精确到无法辨认出模拟场景与实物的区别。” OpenGL被设计

3、成独立于硬件,独立于窗口系统,在运行各种操作系统的各种计算机上都可用,并能在网络环境下以客户/服务器模式工作,是专业图形处理、科学计算等高端应用领域的标准图形库。,OpenGL 编程基础,4,OpenGL 简介,OpenGL / DirectX(Direct3D) OpenGL扩展(OpenGL Extensions) 显卡的发展速度比OpenGL版本更新速度快得多。 硬件厂商开发出一个新功能,可以针对新功能开发OpenGL扩展,软件开发人员通过这个扩展就可以使用新的硬件功能。 GL_ARB_multitexture(.); 一些常用的OpenGL扩展会在新版的OpenGL中加到OpenGL核

4、心中去,成为OpenGL标准的一部分,可以简化程序开发,程序员使用这些功能时不必做繁琐的扩展初始化工作。 Direct3D则没有扩展机制,硬件的新功能要等到微软发布新版DirectX后才可能支持。,OpenGL 编程基础,5,OpenGL 简介,OpenGL可以运行在当前各种流行操作系统之上,如Mac OS、Unix、Windows 95/98、Windows NT/2000、Linux、OPENStep、Python、BeOS等。 各种流行的编程语言都可以调用OpenGL中的库函数,如C、C+、Fortran、Ada、Java。 目前,Microsoft公司、SGI公司、ATT公司的Unix

5、软件实验室、IBM公司、DEC公司、SUN公司、HP公司等几家在计算机市场占主导地位的大公司都采用了OpenGL图形标准。 因此,OpenGL已成为目前的三维图形开发事实上的标准。,OpenGL 编程基础,6,OpenGL的基本特点,1.工业标准 OARB(OpenGL Architecture Review Board)联合会领导OpenGL技术规范的发展,OpenGL有广泛的支持,它是业界唯一的真正开放的、跨平台的图形标准。 2.可靠度高 OpenGL应用可以运行在支持OpenGL API标准的任何硬件上。 3.可扩展性 OpenGL是低级的图形API,它具有充分的可扩展性。 OpenGL

6、能紧跟最新硬件发展和计算机图形绘制算法的发展。成功的OpenGL扩展会被融入在未来的OpenGL版本之中。,OpenGL 编程基础,7,OpenGL的基本特点,4.可伸缩性 基于OpenGL API的图形应用程序可以运行在许多系统上,包括各种用户电子设备、PC、工作站以及超级计算机。 5.容易使用 OpenGL的核心图形函数功能强大,带有很多可选参数,这使得源程序显得非常紧凑; OpenGL可以利用已有的其它格式的数据源进行三维物体建模,大大提高了软件开发效率; 采用OpenGL技术,开发人员几乎可以不用了解硬件的相关细节,便可以利用OpenGL开发照片质量的图形应用程序。,OpenGL 编程

7、基础,8,OpenGL的基本功能,1.模型绘制 真实世界里的任何物体都可以在计算机中用简单的点、线、多边形来描述。OpenGL提供了丰富的基本图元绘制命令,从而可以方便地绘制物体。 2.模型观察 无论多复杂的图形都是由基本图元组成并经过一系列变换来实现的。OpenGL提供了一系列基本的变换,如模型变换、观察变换、投影变换及窗口-视口变换。 3.颜色模式 OpenGL提供了两种物体着色模式,一种是RGBA颜色模式,另一种是颜色索引模式。,OpenGL 编程基础,9,OpenGL的基本功能,4.光照处理 OpenGL提供管理4种光(辐射光、环境光、镜面光、漫反射光)的方法;还可以指定模型表面的反射

8、特性; 5.图像效果增强 提供了点、线、多边形的反走样技术; 为了使三维图形更加具有真实感,经常需要处理半透明或透明的物体图像,这就需要用到融合技术。 OpenGL提供了“fog”的基本操作来达到对场景进行雾化的效果。 6.位图和图像处理,OpenGL 编程基础,10,OpenGL的基本功能,7.纹理映射 纹理映射可以理解为将纹理粘贴在所绘制的三维模型表面,以使三维图形显得更生动。 8.动画 OpenGL提供了双缓存区(Double Buffer)技术来实现动画绘制。 9.交互技术 OpenGL提供了方便的三维人机交互接口。,OpenGL 编程基础,11,OpenGL体系结构,OpenGL 编

9、程基础,12,基于OpenGL的二次开发软件,Open Performer、Open Inventor、WTK、Vega等第三方软件,主要用于虚拟现实、视景仿真等领域。,Graphics Hardware,OpenGL,Performer Run-Time API,Simulator Application,OpenGL 编程基础,13,OpenGL与第三方软件,OpenGL 编程基础,14,OpenGL是图形 API,OpenGl是应用程序与图形硬件的接口。 OpenGL的核心库提供了100多个用于直接访问图形硬件的底端函数(以 gl 开头)。,OpenGL 编程基础,15,OpenGL A

10、PI层次图,OpenGL 编程基础,16,OpenGL库函数,Windows下常用的OpenGL库有两种,MS实现和SGI实现。两者都是由三大部分组成: 1.函数的说明文件 gl.h、glu.h、glut.h 2.静态链接库文件 opengl32.lib、glu32.lib、glut32.lib 3.动态链接库文件 opengl32.dll、glu32.dll、和glut32.dll SGI的版本是纯软件实现,不能利用硬件加速并且SGI已经在1999年宣布停止支持。,OpenGL 编程基础,17,OpenGL库函数,MS实现 从Win95 OSR2开始,微软操作系统已捆绑OpenGL32.DL

11、L; OpenGL32.dll是微软的OpenGL 1.1纯软件实现,我们的程序都要动态链接到这个dll。 相应的头文件和库文件都包含于Win32 Platform SDK; 微软的OpenGL32.DLL自动实现硬件加速驱动 HKEY_LOCAL_MACHINESoftwareMicrosoftWindows NTCurrentVersionOpenGLDrivers,OpenGL 编程基础,18,如何实现OpenGL硬件加速?,如果安装3D芯片厂商的驱动程序,会将一个不同名字的dll放到Windows系统目录下; 比如在Windows 2000下安装nVIDIA GeForce2 MX的驱

12、动程序(必须安装驱动,因为Windows自带的显卡驱动程序并不会提供OpenGL硬件加速能力),会在系统目录下放一个nvoglnt.dll(这就是nVIDIA的OpenGL驱动),并在注册表中登记nvoglnt.dll,让Windows知道硬件加速OpenGL驱动的名字,以后运行OpenGL程序,OpenGL32.dll就会把OpenGL调用直接转到nvoglnt.dll。,OpenGL 编程基础,19,OpenGL核心库,包含有115个函数,函数名的前缀为gl; 这部分函数用于常规的、核心的图形处理。 由于许多函数可以接收不同数据类型的参数,因此派生出来的函数原形多达300多个。,OpenG

13、L 编程基础,20,OpenGL实用程序库,OpenGL Utility Library(GLU) 是对OpenGL核心库的扩充,是其中的一部分。主要用于简化一些常用的任务:例如二次曲面的绘制(球体、锥体、圆柱体等),可进一步进行纹理映射、坐标变换、多边形区域剖分。 GLU 函数名使用前缀 glu gluLookAt( ); ,OpenGL 编程基础,21,OpenGL系统扩展库,OpenGL独立于各种操作系统和窗口系统。 每个窗口系统都有自己的函数库,用来扩充本身的功能,以便支持OpenGL图形绘制 X Window System - GLX Microsoft Windows - WGL

14、Apple Macintosh -AGL IBM OS/2 - PGL,OpenGL 编程基础,22,OpenGL实用程序工具库,The OpenGL Utility Toolkit (GLUT) GLUT是Mark Kilgard在SGI时写的一个免费的独立于窗口系统的实用程序工具库 可以在网上下载最新版本的GLUT Win32: Linux: GLUT库已经作为AUX库(OpenGL的辅助库)的功能更强的替代品了; GLUT库包括了使用弹出菜单、管理窗口、支持鼠标、键盘,甚至是游戏杆的支持; GLUT库函数使用前缀 glut glutCreateW

15、indow(); ,OpenGL 编程基础,23,OpenGL数据类型,OpenGL 编程基础,24,OpenGL函数命名约定,OpenGL常量名使用前缀:GL_ 或 GLUT_ OpenGL函数命名约定:,有些OpenGL函数最后带一个字母v,表示函数参数数组指针。 glColor3f(1.0,0.0,0.0); 等价于: float color_array=1.0,0.0,0.0; glColor3fv(color_array);,OpenGL 编程基础,25,如何编译 (VC6.0),Microsoft Visual C+ 6.0 使用Win32 Console Application创

16、建新项目; 打开Project Settings对话框,在该对话框的Link/Objects/library modules内加入opengl32.lib glu32.lib glut32.lib 开始写OpenGl程序代码 编译程序,OpenGL 编程基础,26,编程环境设置 (GLUT),Microsoft Visual C+ 6.0 将 glut.h 放在文件夹/include/GL/ 将 glut.lib放在文件夹/lib/ 将 glut32.dll放在文件夹/System32/ Microsoft Visual C+ .NET 将 glut.h 放在文件夹/platformSDK/i

17、nclude/GL/ 将 glut.lib放在文件夹/platformSDK/lib/ 将 glut32.dll放在文件夹/System32,OpenGL 编程基础,27,OpenGL示例-1,OpenGL 编程基础,28,OpenGL示例-1,#include #include / Called to draw scene void RenderScene(void) / Clear the window with current clearing color glClear(GL_COLOR_BUFFER_BIT); / Flush drawing commands glFlush();

18、/ Setup the rendering state void SetupRC(void) glClearColor(0.0f, 0.0f, 1.0f, 1.0f); ,OpenGL 编程基础,29,OpenGL示例-1,/ Main program entry point void main(void) glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutCreateWindow(Simple); glutDisplayFunc(RenderScene); SetupRC(); glutMainLoop(); ,OpenGL 编程基础,30,头

19、文件,#include #include windows.h:所有Windows应用程序都需要该头文件,它包含大多数的Win32函数原型。 注意:由于glut.h中包含了这个头文件,所以可以省略。 glut.h中包含gl.h和glu.h头文件,这两个头文件定义了OpenGL核心库和GLU库中函数的原型。,OpenGL 编程基础,31,主体,控制台模式的C和C+程序总是从函数main开始的,所以并没有WinMain。 控制台应用程序不涉及到窗口创建和消息循环。 但是,用win32可以从控制台应用程序中创建图形化窗口。 因为这些细节都被掩盖在GLUT库内了。,OpenGL 编程基础,32,主体,显

20、示模式 glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); 告诉GLUT库在创建窗口时使用哪种类型的显示模式; GLUT_SINGLE:使用单缓冲区窗口; 所有的绘图命令都在显示的窗口中执行; GLUT_DOUBLE:使用双缓冲区窗口; 执行绘图代码时能够在一个屏幕之外的缓冲区内进行渲染,然后用交换命令把图形瞬间放到屏幕上。 这种方法常用于产生动画效果。在交互式计算机图形学中,为了充分利用硬件性能来加快图形的绘制,很多场合使用双缓冲模式。 GLUT_RGB:使用RGB模式; 使用红、绿、蓝三种基色合成所需的颜色。,OpenGL 编程基础,33,双缓冲区,(

21、a),(b),OpenGL 编程基础,34,主体,创建OpenGL窗口 glutCreateWindow (Simple); 创建标题栏为Simple的窗口; 显示回调 glutDisplayFunc(RenderScene); 这将把先前定义的函数Renderscene设为显示回调函数。 只要需要绘制窗口,GLUT就会调用这里指定的函数。 例如,在第一次显示窗口或改变窗口大小或移上窗口上覆盖的其他窗口时就会发生调用。 这个函数也是调用OpenGI渲染函数的地方。,OpenGL 编程基础,35,主体,设置上下文并执行 SetupRC(); 该函数与GLUT和OpenGL都没关系;函数名可以任取

22、; 进行OpenGL初始化的地方,初始化必须在渲染之前进行。 0penGL的许多状态只需要设置一次,而不必每渲染一帧(全部图形的一个场景)就重新设置一次。 主程序结尾 glutMainLoop(); 这个函数让GLUT框架开始运行。在为屏幕显示和其他函数定义了回调之后,这个函数会处理所有特定于操作系统的消息、键击等等,直到用户终止程序。,OpenGL 编程基础,36,OpenGL图形调用,glClearColor(0.0f, 0.0f, 1.0f, 1.0f); 设置清除窗口时所用的颜色; 该函数的原型是:,在OpenGL中,一种颜色用红、绿、蓝成分的混合束表示。每种成分的值范围是O.0到1.0有效的任意浮点数。 因此在理论上可以产生无限种可能的颜色。但实际上可输出的颜色是有限的,在大多数设备上是24位真彩色(一干六百万种颜色)。 Alpha成分用于混合的特殊效果,比如半透明。,OpenGL 编程基础,37,OpenGL图形调用,OpenGL 编程基础,38,OpenGL图形调用,实际清除 glClear(GL_COLOR_BUFFER_BIT); glClear函数用来清除特定的缓冲区或缓冲区组合。缓

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论