《OpenGL编程基础》PPT课件.ppt_第1页
《OpenGL编程基础》PPT课件.ppt_第2页
《OpenGL编程基础》PPT课件.ppt_第3页
《OpenGL编程基础》PPT课件.ppt_第4页
《OpenGL编程基础》PPT课件.ppt_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

,第三章,OpenGL编程基础,OpenGL编程基础,第三章-2,内容,OpenGL简介OpenGLAPI层次图OpenGL核心库OpenGL实用程序库OpenGL系统扩展库OpenGL实用程序工具库OpenGL图形编程环境设置OpenGL编程示例,OpenGL编程基础,第三章-3,OpenGL简介,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编程基础,第三章-4,OpenGL简介,关于OpenGL1.5的应用,这些公司在一个联合声明中是这样阐述的:“可以实时地以电影画质渲染出轰动今夏的任何一部巨片中的计算机图形场景,而不用花上几个月去制作。汽车设计师可以设计出与照片别无二致的汽车造型;而喷气式战斗机的训练模拟则不但好看,而且精确到无法辨认出模拟场景与实物的区别。”OpenGL被设计成独立于硬件,独立于窗口系统,在运行各种操作系统的各种计算机上都可用,并能在网络环境下以客户/服务器模式工作,是专业图形处理、科学计算等高端应用领域的标准图形库。,OpenGL编程基础,第三章-5,OpenGL简介,OpenGL/DirectX(Direct3D)OpenGL扩展(OpenGLExtensions)显卡的发展速度比OpenGL版本更新速度快得多。硬件厂商开发出一个新功能,可以针对新功能开发OpenGL扩展,软件开发人员通过这个扩展就可以使用新的硬件功能。GL_ARB_multitexture(.);一些常用的OpenGL扩展会在新版的OpenGL中加到OpenGL核心中去,成为OpenGL标准的一部分,可以简化程序开发,程序员使用这些功能时不必做繁琐的扩展初始化工作。Direct3D则没有扩展机制,硬件的新功能要等到微软发布新版DirectX后才可能支持。,OpenGL编程基础,第三章-6,OpenGL简介,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编程基础,第三章-7,OpenGL的基本特点,1.工业标准OARB(OpenGLArchitectureReviewBoard)联合会领导OpenGL技术规范的发展,OpenGL有广泛的支持,它是业界唯一的真正开放的、跨平台的图形标准。2.可靠度高OpenGL应用可以运行在支持OpenGLAPI标准的任何硬件上。3.可扩展性OpenGL是低级的图形API,它具有充分的可扩展性。OpenGL能紧跟最新硬件发展和计算机图形绘制算法的发展。成功的OpenGL扩展会被融入在未来的OpenGL版本之中。,OpenGL编程基础,第三章-8,OpenGL的基本特点,4.可伸缩性基于OpenGLAPI的图形应用程序可以运行在许多系统上,包括各种用户电子设备、PC、工作站以及超级计算机。5.容易使用OpenGL的核心图形函数功能强大,带有很多可选参数,这使得源程序显得非常紧凑;OpenGL可以利用已有的其它格式的数据源进行三维物体建模,大大提高了软件开发效率;采用OpenGL技术,开发人员几乎可以不用了解硬件的相关细节,便可以利用OpenGL开发照片质量的图形应用程序。,OpenGL编程基础,第三章-9,OpenGL的基本功能,1.模型绘制真实世界里的任何物体都可以在计算机中用简单的点、线、多边形来描述。OpenGL提供了丰富的基本图元绘制命令,从而可以方便地绘制物体。2.模型观察无论多复杂的图形都是由基本图元组成并经过一系列变换来实现的。OpenGL提供了一系列基本的变换,如模型变换、观察变换、投影变换及窗口-视口变换。3.颜色模式OpenGL提供了两种物体着色模式,一种是RGBA颜色模式,另一种是颜色索引模式。,OpenGL编程基础,第三章-10,OpenGL的基本功能,4.光照处理OpenGL提供管理4种光(辐射光、环境光、镜面光、漫反射光)的方法;还可以指定模型表面的反射特性;5.图像效果增强提供了点、线、多边形的反走样技术;为了使三维图形更加具有真实感,经常需要处理半透明或透明的物体图像,这就需要用到融合技术。OpenGL提供了“fog”的基本操作来达到对场景进行雾化的效果。6.位图和图像处理,OpenGL编程基础,第三章-11,OpenGL的基本功能,7.纹理映射纹理映射可以理解为将纹理粘贴在所绘制的三维模型表面,以使三维图形显得更生动。8.动画OpenGL提供了双缓存区(DoubleBuffer)技术来实现动画绘制。9.交互技术OpenGL提供了方便的三维人机交互接口。,OpenGL编程基础,第三章-12,OpenGL体系结构,OpenGL编程基础,第三章-13,基于OpenGL的二次开发软件,OpenPerformer、OpenInventor、WTK、Vega等第三方软件,主要用于虚拟现实、视景仿真等领域。,GraphicsHardware,OpenGL,PerformerRun-TimeAPI,SimulatorApplication,OpenGL编程基础,第三章-14,OpenGL与第三方软件,OpenGL编程基础,第三章-15,OpenGL是图形API,OpenGl是应用程序与图形硬件的接口。OpenGL的核心库提供了100多个用于直接访问图形硬件的底端函数(以gl开头)。,OpenGL编程基础,第三章-16,OpenGLAPI层次图,OpenGL编程基础,第三章-17,OpenGL库函数,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编程基础,第三章-18,OpenGL库函数,MS实现从Win95OSR2开始,微软操作系统已捆绑OpenGL32.DLL;OpenGL32.dll是微软的OpenGL1.1纯软件实现,我们的程序都要动态链接到这个dll。相应的头文件和库文件都包含于Win32PlatformSDK;微软的OpenGL32.DLL自动实现硬件加速驱动HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsNTCurrentVersionOpenGLDrivers,OpenGL编程基础,第三章-19,如何实现OpenGL硬件加速?,如果安装3D芯片厂商的驱动程序,会将一个不同名字的dll放到Windows系统目录下;比如在Windows2000下安装nVIDIAGeForce2MX的驱动程序(必须安装驱动,因为Windows自带的显卡驱动程序并不会提供OpenGL硬件加速能力),会在系统目录下放一个nvoglnt.dll(这就是nVIDIA的OpenGL驱动),并在注册表中登记nvoglnt.dll,让Windows知道硬件加速OpenGL驱动的名字,以后运行OpenGL程序,OpenGL32.dll就会把OpenGL调用直接转到nvoglnt.dll。,OpenGL编程基础,第三章-20,OpenGL核心库,包含有115个函数,函数名的前缀为gl;这部分函数用于常规的、核心的图形处理。由于许多函数可以接收不同数据类型的参数,因此派生出来的函数原形多达300多个。,OpenGL编程基础,第三章-21,OpenGL实用程序库,OpenGLUtilityLibrary(GLU)是对OpenGL核心库的扩充,是其中的一部分。主要用于简化一些常用的任务:例如二次曲面的绘制(球体、锥体、圆柱体等),可进一步进行纹理映射、坐标变换、多边形区域剖分。GLU函数名使用前缀glugluLookAt();,OpenGL编程基础,第三章-22,OpenGL系统扩展库,OpenGL独立于各种操作系统和窗口系统。每个窗口系统都有自己的函数库,用来扩充本身的功能,以便支持OpenGL图形绘制XWindowSystem-GLXMicrosoftWindows-WGLAppleMacintosh-AGLIBMOS/2-PGL,OpenGL编程基础,第三章-23,OpenGL实用程序工具库,TheOpenGLUtilityToolkit(GLUT)GLUT是MarkKilgard在SGI时写的一个免费的独立于窗口系统的实用程序工具库可以在网上下载最新版本的GLUTWin32:,OpenGL编程基础,第三章-24,OpenGL数据类型,OpenGL编程基础,第三章-25,OpenGL函数命名约定,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放在文件夹/include/GL/将glut.lib放在文件夹/lib/将glut32.dll放在文件夹/System32/MicrosoftVisualC+.NET将glut.h放在文件夹/platformSDK/include/GL/将glut.lib放在文件夹/platformSDK/lib/将glut32.dll放在文件夹/System32,OpenGL编程基础,第三章-28,OpenGL示例-1,OpenGL编程基础,第三章-29,OpenGL示例-1,#include#include/CalledtodrawscenevoidRenderScene(void)/ClearthewindowwithcurrentclearingcolorglClear(GL_COLOR_BUFFER_BIT);/FlushdrawingcommandsglFlush();/SetuptherenderingstatevoidSetupRC(void)glClearColor(0.0f,0.0f,1.0f,1.0f);,OpenGL编程基础,第三章-30,OpenGL示例-1,/Mainprogramentrypointvoidmain(void)glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutCreateWindow(Simple);glutDisplayFunc(RenderScene);SetupRC();glutMainLoop();,OpenGL编程基础,第三章-31,头文件,#include#includewindows.h:所有Windows应用程序都需要该头文件,它包含大多数的Win32函数原型。注意:由于glut.h中包含了这个头文件,所以可以省略。glut.h中包含gl.h和glu.h头文件,这两个头文件定义了OpenGL核心库和GLU库中函数的原型。,OpenGL编程基础,第三章-32,主体,控制台模式的C和C+程序总是从函数main开始的,所以并没有WinMain。控制台应用程序不涉及到窗口创建和消息循环。但是,用win32可以从控制台应用程序中创建图形化窗口。因为这些细节都被掩盖在GLUT库内了。,OpenGL编程基础,第三章-33,主体,显示模式glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);告诉GLUT库在创建窗口时使用哪种类型的显示模式;GLUT_SINGLE:使用单缓冲区窗口;所有的绘图命令都在显示的窗口中执行;GLUT_DOUBLE:使用双缓冲区窗口;执行绘图代码时能够在一个屏幕之外的缓冲区内进行渲染,然后用交换命令把图形瞬间放到屏幕上。这种方法常用于产生动画效果。在交互式计算机图形学中,为了充分利用硬件性能来加快图形的绘制,很多场合使用双缓冲模式。GLUT_RGB:使用RGB模式;使用红、绿、蓝三种基色合成所需的颜色。,OpenGL编程基础,第三章-34,双缓冲区,(a),(b),OpenGL编程基础,第三章-35,主体,创建OpenGL窗口glutCreateWindow(Simple);创建标题栏为Simple的窗口;显示回调glutDisplayFunc(RenderScene);这将把先前定义的函数Renderscene设为显示回调函数。只要需要绘制窗口,GLUT就会调用这里指定的函数。例如,在第一次显示窗口或改变窗口大小或移上窗口上覆盖的其他窗口时就会发生调用。这个函数也是调用OpenGI渲染函数的地方。,OpenGL编程基础,第三章-36,主体,设置上下文并执行SetupRC();该函数与GLUT和OpenGL都没关系;函数名可以任取;进行OpenGL初始化的地方,初始化必须在渲染之前进行。0penGL的许多状态只需要设置一次,而不必每渲染一帧(全部图形的一个场景)就重新设置一次。主程序结尾glutMainLoop();这个函数让GLUT框架开始运行。在为屏幕显示和其他函数定义了回调之后,这个函数会处理所有特定于操作系统的消息、键击等等,直到用户终止程序。,OpenGL编程基础,第三章-37,OpenGL图形调用,glClearColor(0.0f,0.0f,1.0f,1.0f);设置清除窗口时所用的颜色;该函数的原型是:,在OpenGL中,一种颜色用红、绿、蓝成分的混合束表示。每种成分的值范围是O.0到1.0有效的任意浮点数。因此在理论上可以产生无限种可能的颜色。但实际上可输出的颜色是有限的,在大多数设备上是24位真彩色(一干六百万种颜色)。Alpha成分用于混合的特殊效果,比如半透明。,OpenGL编程基础,第三章-38,OpenGL图形调用,OpenGL编程基础,第三章-39,OpenGL图形调用,实际清除glClear(GL_COLOR_BUFFER_

温馨提示

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

评论

0/150

提交评论