OpenGL编程基础第三章-2内容OpenGL简介OpenGLAPI层次图OpenGL核心库OpenGL实用程序库OpenGL系统扩展库OpenGL实用程序工具库OpenGL图形编程环境设置OpenGL编程示例OpenGL编程基础第三章-3OpenGL简介OpenGL(OpenGraphicsLibrary),源于美国SGI公司为其图形工作站开发的IRISGL,在跨平台移植过程中发展成为OpenGL,现在OpenGL被认为是高性能图形和交互式视景处理的标准。SGI在1992年7月发布1.0版,后成为工业标准,由成立于1992年的独立财团OpenGLArchitectureReviewBoard(ARB)控制。1995年12月ARB批准了1.1版本。1999年5月通过的1.2.1。2004年7月28日正式发布OpenGL1.5。OpenGL编程基础第三章-4OpenGL简介关于OpenGL1.5的应用,这些公司在一个联合声明中是这样阐述的:“可以实时地以电影画质渲染出轰动今夏的任何一部巨片中的计算机图形场景,而不用花上几个月去制作。汽车设计师可以设计出与照片别无二致的汽车造型;而喷气式战斗机的训练模拟则不但好看,而且精确到无法辨认出模拟场景与实物的区别。”OpenGL被设计成独立于硬件,独立于窗口系统,在运行各种操作系统的各种计算机上都可用,并能在网络环境下以客户/服务器模式工作,是专业图形处理、科学计算等高端应用领域的标准图形库。OpenGL编程基础第三章-5OpenGL简介OpenGL/DirectX(Direct3D)OpenGL扩展(OpenGLExtensions)显卡的发展速度比OpenGL版本更新速度快得多。硬件厂商开发出一个新功能,可以针对新功能开发OpenGL扩展,软件开发人员通过这个扩展就可以使用新的硬件功能。GL_ARB_multitexture(...);一些常用的OpenGL扩展会在新版的OpenGL中加到OpenGL核心中去,成为OpenGL标准的一部分,可以简化程序开发,程序员使用这些功能时不必做繁琐的扩展初始化工作。Direct3D则没有扩展机制,硬件的新功能要等到微软发布新版DirectX后才可能支持。OpenGL编程基础第三章-6OpenGL简介OpenGL可以运行在当前各种流行操作系统之上,如MacOS、Unix、Windows95/98、WindowsNT/2000、Linux、OPENStep、Python、BeOS等。各种流行的编程语言都可以调用OpenGL中的库函数,如C、C++、Fortran、Ada、Java。目前,Microsoft公司、SGI公司、ATT公司的Unix软件实验室、IBM公司、DEC公司、SUN公司、HP公司等几家在计算机市场占主导地位的大公司都采用了OpenGL图形标准。因此,OpenGL已成为目前的三维图形开发事实上的标准。OpenGL编程基础第三章-7OpenGL的基本特点1.工业标准OARB(OpenGLArchitectureReviewBoard)联合会领导OpenGL技术规范的发展,OpenGL有广泛的支持,它是业界唯一的真正开放的、跨平台的图形标准。2.可靠度高OpenGL应用可以运行在支持OpenGLAPI标准的任何硬件上。3.可扩展性OpenGL是低级的图形API,它具有充分的可扩展性。OpenGL能紧跟最新硬件发展和计算机图形绘制算法的发展。成功的OpenGL扩展会被融入在未来的OpenGL版本之中。OpenGL编程基础第三章-8OpenGL的基本特点4.可伸缩性基于OpenGLAPI的图形应用程序可以运行在许多系统上,包括各种用户电子设备、PC、工作站以及超级计算机。5.容易使用OpenGL的核心图形函数功能强大,带有很多可选参数,这使得源程序显得非常紧凑;OpenGL可以利用已有的其它格式的数据源进行三维物体建模,大大提高了软件开发效率;采用OpenGL技术,开发人员几乎可以不用了解硬件的相关细节,便可以利用OpenGL开发照片质量的图形应用程序。OpenGL编程基础第三章-9OpenGL的基本功能1.模型绘制真实世界里的任何物体都可以在计算机中用简单的点、线、多边形来描述。OpenGL提供了丰富的基本图元绘制命令,从而可以方便地绘制物体。2.模型观察无论多复杂的图形都是由基本图元组成并经过一系列变换来实现的。OpenGL提供了一系列基本的变换,如模型变换、观察变换、投影变换及窗口-视口变换。3.颜色模式OpenGL提供了两种物体着色模式,一种是RGBA颜色模式,另一种是颜色索引模式。OpenGL编程基础第三章-10OpenGL的基本功能4.光照处理OpenGL提供管理4种光(辐射光、环境光、镜面光、漫反射光)的方法;还可以指定模型表面的反射特性;5.图像效果增强提供了点、线、多边形的反走样技术;为了使三维图形更加具有真实感,经常需要处理半透明或透明的物体图像,这就需要用到融合技术。OpenGL提供了“fog”的基本操作来达到对场景进行雾化的效果。6.位图和图像处理OpenGL编程基础第三章-11OpenGL的基本功能7.纹理映射纹理映射可以理解为将纹理粘贴在所绘制的三维模型表面,以使三维图形显得更生动。8.动画OpenGL提供了双缓存区(DoubleBuffer)技术来实现动画绘制。9.交互技术OpenGL提供了方便的三维人机交互接口。OpenGL编程基础第三章-12OpenGL体系结构ApplicationGDIDisplayDeviceOpenGL32.dllHardwareDriver…OpenGL编程基础第三章-13基于OpenGL的二次开发软件OpenPerformer、OpenInventor、WTK、Vega等第三方软件,主要用于虚拟现实、视景仿真等领域。GraphicsHardwareOpenGLPerformerRun-TimeAPISimulatorApplicationOpenGL编程基础第三章-14OpenGL与第三方软件用OpenGL编程开发用第三方软件开发优点实时交互性强功能强大效率高跨平台实现图形学知识要求一般开发过程相对容易场景渲染效果好缺点图形学知识要求高开发过程复杂交互性差效率相对低功能受限OpenGL编程基础第三章-15OpenGL是图形APIOpenGl是应用程序与图形硬件的接口。OpenGL的核心库提供了100多个用于直接访问图形硬件的底端函数(以gl开头)。OpenGL编程基础第三章-16OpenGLAPI层次图OpenGL编程基础第三章-17OpenGL库函数Windows下常用的OpenGL库有两种,MS实现和SGI实现。两者都是由三大部分组成:1.函数的说明文件gl.h、glu.h、glut.h2.静态链接库文件opengl32.lib、glu32.lib、glut32.lib3.动态链接库文件opengl32.dll、glu32.dll、和glut32.dllSGI的版本是纯软件实现,不能利用硬件加速并且SGI已经在1999年宣布停止支持。OpenGL编程基础第三章-18OpenGL库函数MS实现从Win95OSR2开始,微软操作系统已捆绑OpenGL32.DLL;OpenGL32.dll是微软的OpenGL1.1纯软件实现,我们的程序都要动态链接到这个dll。相应的头文件和库文件都包含于Win32PlatformSDK;微软的OpenGL32.DLL自动实现硬件加速驱动HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\OpenGLDriversOpenGL编程基础第三章-19如何实现OpenGL硬件加速?如果安装3D芯片厂商的驱动程序,会将一个不同名字的dll放到Windows系统目录下;比如在Windows2000下安装nVIDIAGeForce2MX的驱动程序(必须安装驱动,因为Windows自带的显卡驱动程序并不会提供OpenGL硬件加速能力),会在系统目录下放一个nvoglnt.dll(这就是nVIDIA的OpenGL驱动),并在注册表中登记nvoglnt.dll,让Windows知道硬件加速OpenGL驱动的名字,以后运行OpenGL程序,OpenGL32.dll就会把OpenGL调用直接转到nvoglnt.dll。OpenGL编程基础第三章-20OpenGL核心库包含有115个函数,函数名的前缀为gl;这部分函数用于常规的、核心的图形处理。由于许多函数可以接收不同数据类型的参数,因此派生出来的函数原形多达300多个。OpenGL编程基础第三章-21OpenGL实用程序库OpenGLUtilityLibrary(GLU)是对OpenGL核心库的扩充,是其中的一部分。主要用于简化一些常用的任务:例如二次曲面的绘制(球体、锥体、圆柱体等),可进一步进行纹理映射、坐标变换、多边形区域剖分。GLU函数名使用前缀glugluLookAt(…);…OpenGL编程基础第三章-22OpenGL系统扩展库OpenGL独立于各种操作系统和窗口系统。每个窗口系统都有自己的函数库,用来扩充本身的功能,以便支持OpenGL图形绘制XWindowSystem-GLXMicrosoftWindows-WGLAppleMacintosh-AGLIBMOS/2-PGLOpenGL编程基础第三章-23OpenGL实用程序工具库TheOpenGLUtilityToolkit(GLUT)GLUT是MarkKilgard在SGI时写的一个免费的独立于窗口系统的实用程序工具库可以在网上下载最新版本的GLUTWin32:~nate/glut.htmlLinux:GLUT库已经作为AUX库(OpenGL的辅助库)的功能更强的替代品了;GLUT库包括了使用弹出菜单、管理窗口、支持鼠标、键盘,甚至是游戏杆的支持;GLUT库函数使用前缀glutglutCreateWindow();…OpenGL编程基础第三章-24OpenGL数据类型OpenGL编程基础第三章-25OpenGL函数命名约定OpenGL常量名使用前缀:GL_或GLUT_OpenGL函数命名约定:根命令库前缀参数个数参数类型有些OpenGL函数最后带一个字母v,表示函数参数数组指针。glColor3f(1.0,0.0,0.0);等价于:floatcolor_array[]={1.0,0.0,0.0};glColor3fv(color_array);OpenGL编程基础第三章-26如何编译(VC6.0)MicrosoftVisualC++6.0使用Win32ConsoleApplication创建新项目;打开ProjectSettings对话框,在该对话框的Link/Objects/librarymodules内加入opengl32.libglu32.libglut32.lib开始写OpenGl程序代码编译程序OpenGL编程基础第三章-27编程环境设置(GLUT)MicrosoftVisualC++6.0将glut.h放在文件夹MSVC/include/GL/将glut.lib放在文件夹MSVC/lib/将glut32.dll放在文件夹window/System32/MicrosoftVisualC++.NET将glut.h放在文件夹MSVC/platformSDK/include/GL/将glut.lib放在文件夹MSVC/platformSDK/lib/将glut32.d