GraphicsLibrary三维图形软件包.doc_第1页
GraphicsLibrary三维图形软件包.doc_第2页
GraphicsLibrary三维图形软件包.doc_第3页
GraphicsLibrary三维图形软件包.doc_第4页
GraphicsLibrary三维图形软件包.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

Graphics Library 三维图形软件包与DirectX的区别OpenGL只是图形函数库。DirectX包含图形,声音,输入,网络等模块。OpenGL稳定,可跨平台使用。DirectX仅能用于Windows系列平台,包括Windows Mobile/CE系列以及XBOX/XBOX360。-1995年至1996年,微软实行了一项新计划,以支持在Windows95上运行游戏,目标是把市场扩展到被任天堂和世嘉控制的游戏领域。然而,微软不想用已经在NT上提供的OpenGL技术。微软收购了Rendermorphics,Ltd.并得到他的被称作RealityLab的3D API。经重新整理,微软发布了新的3D API-Direct3D。微软,推行Direct3D,冻结OpenGL!微软当时拒绝了在Window95上支持OpenGL。不止如此,微软采取异常手段收回对OpenGL的MCD驱动接口的支持,以致硬件厂商不得不放弃已经进入最后测试的OpenGL驱动。微软的市场部门开始向游戏开发商、硬件厂商、新闻出版机构推销Direct3D,同时排斥OpenGL。API之战!Silicon Graphics和很多OpenGL用户都依赖OpenGL创新且高性能的技术。但很明显微软打算用Direct3D代替OpenGL,尽管D3D有很多问题而且不能像OpenGL那样被硬件厂商扩展。Silicon Graphics决定在1996 SIGGRAPH会议上作一项演示。演示证明OpenGL至少和D3D一样快,从而驳倒微软的市场论调。因为OpenGL是业界公认标准,比D3D功能丰富,而且图像质量要高一些,所以演示在计算机图形和游戏开发社区导致了激烈论战。游戏开发者要求OpenGL和D3D站在同等地位!当技术和市场问题暴露,强烈的支持OpenGL行动开始了。Doom的开发者John Carmack声明拒绝D3D,Chris Hecker在游戏开发杂志上发表了两套API的全面分析,以微软应放弃D3D为结论。游戏开发者先后两次向微软递交请愿书。第一次由56名首席游戏开发者要求微软发行OpenGL MCD驱动,但未成功,因为会让OpenGL与D3D竞争。第二次的公开信由254人签名开始,截止时达到1400人。微软的回答仍是重申旧市场立场。尽管请愿者清楚的要求两套API同等竞争以促进发展,微软却以增加D3D的投资、更加减少OpenGL的投资为回应。Fahrenheit-D3D与OpenGL的合并?Silicon Graphics,Microsoft,HP,Intel达成协议联合开发下一代3D API-Fahrenheit。但不了了之,因为微软的打算是把OpenGL的技术用到D3D里并且以此之名驱除OpenGL的威胁。(估计DirectX 8Graphics即是剩下微软独自开发的Fahrenheit,吸收了OpenGL的很多东西。)OpenGL豪气不减当年!OpenGL依然是唯一能与微软单独控制的D3D对立的API,尽管Silicon Graphics不再以任何微软不能接受的方式推行OpenGL。游戏开发这是独立的,并且很多关键人物在用OpenGL,因此,硬件厂商正努力提高对其支持。D3D仍不能支持高端图像和专业应用,而OpenGL主宰着这些土地。在开放原码社区,Mesa项目正提供独立于微软的OpenGL驱动。译者注:表面上好像D3D比OpenGL支持更多的功能,其实由于D3D不支持硬件扩展,如硬件全景阴影,硬件渲染顺序无关半透明材质等新技术根本无法使用,而D3D(特指D3D8)本身提供的功能只有一小部分能在使用HAL且硬件不支持时模拟,你要用大量代码分析硬件能力和采取不同策略OpenGL三维图形标准是由AT&T公司UNIX软件实验室、IBM、DEC、SUN、HP、Microsoft和SGI等多家公司在GL图形库标准的基础上联合推出的开放式图形库,它使在微机上实现三维真实感图形的生成与显示成为可能。由于OpenGL是开放的图形标准,用户原先在UNIX下开发的OpenGL图形软件很容易移植到微机上的WindowsNT/95上。笔者在VisualC+4.1(以下简称VC)集成环境下,开发了基于OpenGL的三维真实感图形应用程序,现介绍如下。微机上的OpenGL开发环境基于OpenGL标准开发的应用程序必须运行于32位Windows平台下,如WindowsNT或Windows95环境;而且运行时还需有动态链接库OpenGL32.DLL、Glu32.DLL,这两个文件在安装WindowsNT时已自动装载到C:WINNTSYSTEM32目录下(这里假定用户将WindowsNT安装在C盘上);而对于使用Windows95平台的用户,则需手工将两个动态库复制到Windows95目录的SYSTEM子目录中。安装了WindowsNT/95和VC4.1后,用户就具备了基于OpenGL开发三维图形软件的基本条件。OpenGL程序设计的基本步骤1.OpenGL在WindowsNT下的运行机制OpenGL工作在客户机/服务器模式下,当客户方(即基于OpenGL标准开发的应用程序)向服务器(OpenGL核心机制)发出命令时,由服务器负责解释这些命令。通常情况下,客户方和服务器是运行在同一台微机上的。由于OpenGL的运行机制是客户机/服务器模式,这使得用户能够十分方便地在网络环境下使用OpenGL,OpenGL在WindowsNT上的这种实现方式通常称为网络透明性。OpenGL的图形库函数封装在动态链接库OpenGL32.DLL中,客户机中的所有OpenGL函数调用,都被传送到服务器上,由WinSrv.DLL实现功能,再将经过处理的指令发送到Win32设备驱动接口(DDI),从而实现在计算机屏幕上产生图像。若使用OpenGL图形加速卡,则上述机制中将添加两个驱动器:OpenGL可装载客户模块(OpenGLICD)将安装在客户端;硬件指定DDI将安装在服务器端,与WinDDI同一级别。2.OpenGL的库函数开发基于OpenGL的应用程序,必须先了解OpenGL的库函数。OpenGL函数命令方式十分有规律,每个库函数均有前缀gl、glu、aux,分别表示该函数属于OpenGL基本库、实用库或辅助库。WindowsNT下的OpenGL包含了100多个核心函数,均以gl作为前缀,同时还支持另外四类函数:OpenGL实用库函数:43个,以glu作为前缀;OpenGL辅助库函数:31个,以aux作为前缀;Windows专用库函数(WGL):6个,以wgl作为前缀;Win32API函数(WGL):5个,无前缀。OpenGL的115个核心函数提供了最基本的功能,可以实现三维建模、建立光照模型、反走样、纹理映射等;OpenGL实用库函数在核心函数的上一层,这类函数提供了简单的调用方法,其实质是调用核心函数,目的是减轻开发者的编程工作量;OpenGL辅助库函数是一些特殊的函数,可以供初学者熟悉OpenGL的编程机制,然而使用辅助库函数的应用程序只能在Win32环境中使用,可移植性较差,所以开发者应尽量避免使用辅助库函数;Windows专用库函数(WGL)主要针对WindowsNT/95环境的OpenGL函数调用;Win32API函数用于处理像素存储格式、双缓存等函数调用。3.VC环境下基于OpenGL的编程步骤下面介绍在VC环境中建立基于Opeetting菜单选项,在Link栏的Lib输入域中添加openg132.lib、glu32.lib,若需使用OpenGL的辅助库函数,则还需添加glaux.lib。(3)选择View/ClassWizard菜单选项,打开MFC对话框,在ClassName栏中选择CMyTestView类,进行以下操作:选择WM_CREATE消息,鼠标单击EditCode,将OpenGL初始化代码添加到OnCreate()函数中:/*定义像素存储格式*/PIXELFORMATDESCRIPTORpfd=sizeof(PIXELFORMATDESCRIPTOR),1,PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL,PFD_TYPE_RGBA,24,0,0,0,0,0,0,0,0,0,0,0,0,0 32,0,0,PFD_MAIN_PLANE,0,0,0,0,CCLientdc(this);intpixelFormat=ChoosePixelFormat(dc.m_hDC,&pfd);BOOLsuccess=SetPixelFormat(dc.m_hDC,pixelFormat,&pfd);m_hRC=wglCreateContext(dc.m_hDC);选择WM_DESTORY消息,在OnDestory()中添加以下代码:wglDeleteContext(m_hRC);在MyTestView.cpp中,将以下代码添加到PreCreateWindows()函数中:cs.style|=WS_CLIPCHILDREN|WS_CLIPSIBLINGS;OpenGL只对WS_CLIPCHILDREN|WS_CLIPSIBLINGS类型窗口有效;在MyTestView.cpp中,将以下代码添加到OnDraw()函数中:wglMakeCurrent(pDC-m_hDC,m_hRC);DrawScene();/用户自定义函数,用于绘制三维场景;wglMakeCurrent(pDC-m_hDC,NULL);在MyTestView.cpp中,添加成员函数DrawScene():voidCMyTestView:DrawScene()/*绘制三维场景*/(4)在MyTestView.h中包含以下头文件并添加类成员说明:#include#include#include在CTestView类中的protected:段中添加成员变量声明:HGLRCm_hRC;同时添加成员函数声明:DrawScene();这样,一个基于OpenGL标准的程序框架已经构造好,用户只需在DrawScene()函数中添加程序代码即可。建立三维实体模型三维实体建模是整个图形学的基础,要生成高逼真度的图像,首先要生成高质量的三维实体模型。OpenGL中提供了十几个生成三维实体模型的辅助库函数,这些函数均以aux作为函数名的前缀。简单的模型,如球体、立方体、圆柱等可以使用这些辅助函数来实现,如auxWireSphere(GLdoubleradius)(绘制一半径为radius的网状球体)。但是这些函数难以满足建立复杂三维实体的需要,所以用户可以通过其它建模工具(如3DS等)来辅助建立三维实体模型数据库。笔者在三维实体的建模过程中采用3DS提供的2D Shape、3DLofter和3DEditor进行模型的编辑,最后通过将模型数据以DXF文件格式输出存储供应用程序使用。真实感图形的绘制1.定义光照模型和材质(1)光源。OpenGL提供了一系列建立光照模型的库函数,使用户可以十分方便地在三维场景中建立所需的光照模型。OpenGL中的光照模型由环境光(AmbientLight)、漫射光(DiffuseLight)、镜面反射光(SpecularLight)等组成,同时还可设置光线衰减因子来模拟真实的光源效果。例如,定义一个黄色光源如下:GlfloatLight_position=1.0,1.0,1.0,0.0,;GlfloatLight_diffuse=1.0,1.0,0.0,1.0,;glLightfv(GL_LIGHT0,GL_POSTTION,light_position);/定义光源位置glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse);/定义光源漫射光光源必须经过启动后才会影响三维场景中的实体,可以通过以下指令使光源有效:glEnable(LIGHTING);/启动光照模型;glEnable(GL_LIGHT0);/使光源GL_LIGHT0有效;OpenGL中一共可以定义GL_LIGHT0GL_LIGHT7八个光源。(2)材质。OpenGL中的材质是指构成三维实体的材料在光照模型中对于红、绿、蓝三原色的反射率。与光源的定义类似,材质的定义分为环境、漫射、镜面反射成分,另外还有镜面高光指数、辐射成分等。通过对三维实体的材质定义可以大大提高应用程序所绘制的三维场景的逼真程度。例如:/*设置材质的反射成分*/GLfloatmat_ambient=0.8,0.8,0.8,1.0;GLfloatmat_diffuse=0.8,0.0,0.8,1.0;/*紫色*/GLfloatmat_specular=1.0,0.0,1.0,1.0;/*镜面高光亮紫色*/GLfloatmat_shiness=100.0;/*高光指数*/glMaterialfv(GL_FRONT,GL_AMBIENT,mat_ambient);/*定义环境光反射率*/glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse);/*定义漫射光反射率*/glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);/*定义镜面光反射率*/glMaterialfv(GL_FRONT,GL_SHINESS,mat_shiness);/*定义高光指数*/(3)材质RGB值与光源RGB值的关系。OpenGL中材质的颜色与光照模型中光源的颜色含义略有不同。对于光源,R、G、B值表示三原色在光源中所占有的比率;而对于材质定义,R、G、B的值表示具有这种材质属性的物体对于三原色的反射比率,场景中物体所呈现的颜色与光照模型、材质定义都相关。例如,若定义的光源颜色是(Lr,Lg,Lb)=(1.0,1.0,1.0)(白光),物体的材质颜色定义为(Mr,Mg,Mb)=(0.0,0.0,0.8),则最终到达人眼的物体颜色应当是(Lr*Mr,Lg*Mg,Lb*Mb)=(0.0,0.0,0.8)(蓝色)。2.读取三维模型数据为了绘制三维实体,我们首先必须将预先生成的三维实体模型从三维实体模型库中读出。下图描述了读取三维实体模型的流程。3.三维实体绘制由于3DS的DXF文件中对于三维实体的描述是采用三角形面片逼近的方法,而在OpenGL函数库中,提供了绘制三角形面片的方法,所以为三维实体的绘制提供了方便。以下提供了绘制三角形面片的方法:glBegin(TRANGLES);/定义三角形绘制开始glVertexf(GLfloat)x1,(GLfloat)y1,(GLfloat)z1);/第一个顶点glVertexf(GLfloat)x2,(GLfloat)y2,(GLfloat)z2);/第二个顶点glVertexf(GLfloat)x3,(GLfloat)y3,(GLfloat)z3);/第三个顶点glEnd();/绘制结束为了提高三维实时动画的显示速度,我们利用了OpenGL库中的显示列表(DisplayList)的功能,将三维场景中的实体分别定义为单独的显示列表,预先生成三维实体。在图形显示时,只需调用所需的显示列表即可显示相应的三维实体,而不需要重新计算实体在场景中的坐标,避免了大量的浮点运算。在调用显示列表前所作的旋转、平移、光照、材质的设定都将影响显示列表中的三维实体的显示效果。具体实现算法如下:for(ObjectNo=0;ObjectNo实体个数;ObjectNo+)glNewList(ObjectNo,GL_COMPILE);/创建第ObjectNo个实体的显示列表for(Fac OpenGL是近几年发展起来的一个性能卓越的三维图形标准,它是在SGI等多家世界闻名的计算机公司的倡导下,以SGI的GL三维图形库为基础制定的一个通用共享的开放式三维图形标准。目前,包括Microsoft、SGI、IBM、DEC、SUN、HP等大公司都采用了OpenGL做为三维图形标准,许多软件厂商也纷纷以OpenGL为基础开发出自己的产品,其中比较著名的产品包括动画制作软件Soft Image和3D Studio MAX、仿真软件Open Inventor、VR软件World Tool Kit、CAM软件ProEngineer、GIS软ARC/INFO等等。值得一提的是,随着Microsoft公司在Windows NT和最新的Windows 95中提供了OpenGL标准及OpenGL三维图形加速卡(如北京黎明电子技术公司的AGC-3D系列三维图形加速卡)的推出,OpenGL将在微机中有广泛地应用,同时也为广大用户提供了在微机上使用以前只能在高性能图形工作站上运行的各种软件的机会。OpenGL实际上是一个开放的三维图形软件包,它独立于窗口系统和操作系统,以它为基础开发的应用程序可以十分方便地在各种平台间移植;OpenGL可以与Visual C+紧密接口,便于实现机械手的有关计算和图形算法,可保证算法的正确性和可靠性;OpenGL使用简便,效率高。它具有七大功能:1)建模OpenGL图形库除了提供基本的点、线、多边形的绘制函数外,还提供了复杂的三维物体(球、锥、多面体、茶壶等)以及复杂曲线和曲面(如Bezier、Nurbs等曲线或曲面)绘制函数。2)变换OpenGL图形库的变换包括基本变换和投影变换。基本变换有平移、旋转、变比镜像四种变换,投影变换有平行投影(又称正射投影)和透视投影两种变换。其变换方法与机器人运动学中的坐标变换方法完全一致,有利于减少算法的运行时间,提高三维图形的显示速度。3)颜色模式设置OpenGL颜色模式有两种,即RGBA模式和颜色索引(Color Index)。4)光照和材质设置OpenGL光有辐射光(Emitted Light)、环境光(Ambient Light)、漫反射光(Diffuse Light)和镜面光(Specular Light)。材质是用光反射率来表示。场景(Scene)中物体最终反映到人眼的颜色是光的红绿蓝分量与材质红绿蓝分量的反射率相乘后形成的颜色。5)纹理映射(Texture Mapping)利用OpenGL纹理映射功能可以十分逼真地表达物体表面细节。6)位图显示和图象增强图象功能除了基本的拷贝和像素读写外,还提供融合(Blending)、反走样(Antialiasing)和雾(fog)的特殊图象效果处理。以上三条可是被仿真物更具真实感,增强图形显示的效果。7)双缓存(Double Buffering)动画双缓存即前台缓存和后台缓存,简而言之,后台缓存计算场景、生成画面,前台缓存显示后台缓存已画好的画面。此外,利用OpenGL还能实现深度暗示(Depth Cue)、运动模糊(Motion Blur)等特殊效果。从而实现了消隐算法。(1)OpenGL简介作者:pioneer OpenGL是近几年发展起来的一个性能卓越的三维图形标准,它是在SGI等多家世界闻名的计算机公司的倡导下,以SGI的GL三维图形库为基础制定的一个通用共享的开放式三维图形标准。目前,包括Microsoft、SGI、IBM、DEC、SUN、HP等大公司都采用了OpenGL做为三维图形标准,许多软件厂商也纷纷以OpenGL为基础开发出自己的产品,其中比较著名的产品包括动画制作软件Soft Image和3D Studio MAX、仿真软件Open Inventor、VR软件World Tool Kit、CAM软件ProEngineer、GIS软ARC/INFO等等。值得一提的是,随着Microsoft公司在Windows NT和最新的Windows 95中提供了OpenGL标准及OpenGL三维图形加速卡(如北京黎明电子技术公司的AGC-3D系列三维图形加速卡)的推出,OpenGL将在微机中有广泛地应用,同时也为广大用户提供了在微机上使用以前只能在高性能图形工作站上运行的各种软件的机会。(2)OpenGL特点及功能OpenGL实

温馨提示

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

评论

0/150

提交评论