OpenGL发展历史.docx

上传人:b****2 文档编号:23128765 上传时间:2023-05-08 格式:DOCX 页数:13 大小:26.19KB
下载 相关 举报
OpenGL发展历史.docx_第1页
第1页 / 共13页
OpenGL发展历史.docx_第2页
第2页 / 共13页
OpenGL发展历史.docx_第3页
第3页 / 共13页
OpenGL发展历史.docx_第4页
第4页 / 共13页
OpenGL发展历史.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

OpenGL发展历史.docx

《OpenGL发展历史.docx》由会员分享,可在线阅读,更多相关《OpenGL发展历史.docx(13页珍藏版)》请在冰豆网上搜索。

OpenGL发展历史.docx

OpenGL发展历史

OpenGL发展历史

自己使用OpenGL已经有一段时间了,当时发现了一些小问题,由于不太重要,同时也没有使用,所以就没有深究。

但是最近看到一篇写的不错的文章,把我当时发现的小问题都给解决了。

下面转过来,同时把一些重点给画出,方便大家解决问题。

在计算机发展初期,人们就开始从事计算机图形的开发,但直到20世纪80年代末、90年代初,三维图形才开始迅速发展。

于是各种三维图形工具软件包相继推出,如GL,RenderMan等。

随着计算机技术的迅速发展,GL已经进一步发展成为OpenGL,现在OpenGL被认为是高性能图形和交互式视景处理的标准。

这些三维图形工具软件包有些侧重于使用方便,有些侧重于绘制效果或与应用软件的连接,但没有一种软件包能在交互式三维图形建模能力和编程方便程度上与OpenGL相比拟。

OpenGL(即开放性图形库OpenGraphicsLibrary),是一个三维的计算机图形和模型库,最初是美国SGI公司为图形工作站开发的一种功能强大的三维图形机制(或者说是一种图形标准)。

它源于SGI公司为其图形工作站开发的IRISGL,在跨平台移植过程中发展成为OpenGL。

SGI在1992年7月发布1.0版,后成为工业标准,由成立于1992年的独立财团OpenGLArchitectureReviewBoard(ARB)控制。

SGI等ARB成员以投票方式产生标准,并制成规范文档(Specification)公布,各软硬件厂商据此开发自己系统上的实现。

只有通过了ARB规范全部测试的实现才能称为OpenGL。

1995年12月ARB批准了1.1版本,最新版规范是2006年8月2日通过的opengl2.1,是自1.0版本后的第七次版本。

新版本适应以往早期的版本,也就是2.0,1.5,1.4,1.3,1.2,1.1,or1.0GL不要任何改变就能在新版本下运行。

OpenGL被设计成独立于硬件,独立于窗口系统,在运行各种操作系统的各种计算机上都可用,并能在网络环境下以客户/服务器模式工作,是专业图形处理、科学计算等高端应用领域的标准图形库。

它低端应用上的主要竞争对手是MS-Direct3D,该图形库是以COM接口形式提供的,所以极为复杂,稳定性差,另外微软公司拥有该库版权,目前只在Windows平台上可用。

Direct3D的优势在速度上,但现在低价显卡都能提供很好的OpenGL硬件加速,所以做3D图形开发使用Direct3D已没有特别的必要,在专业图形处理特别是高端应用方面目前还没有出现以Direct3D技术为基础的例子,而游戏等低端应用也有转向OpenGL的趋势。

微软在WindowsNT对OpenGL的支持始于3.51,在Windows9x中的支持始于Win95OEMServiceRelease2。

Windows下常用的OpenGL库有两种,MS实现的和SGI实现的,MS-OpenGL调用会自动检测是否存在显示卡制造商提供的ICD(InstallableClientDeviceDriver)驱动程序,有则调用ICD中的例程,否则使用CPU进行计算,所以能利用显示卡的OpenGL加速能力。

对开发者来说使用方法并没有区别,只是有ICD驱动时更快些。

SGI的版本是纯软件实现,不能利用硬件加速并且SGI已经在1999年宣布停止支持,但这套图形库便于调试程序,仍有不少开发者使用。

1999年SGI宣布与MS合作开发Ferihant,即Windows的下一代图形处理体系,包括DirectX与OpenGL的低级图形处理接口和以场景图支持为特点的高级接口,并且就此停止对其在Windows下的OpenGL实现的支持以示决心。

此举令世人瞩目,大家都以为Windows图形处理快要过上幸福生活了,然而,不久,SGI宣布中止合作,并撤回派出的科学家,Ferihant基本上夭折。

SGI称终止合作的原因是MS不肯积极合作,光想把SGI的技术合并进DirectX,但是真正内幕不详。

不过以SGI在图形处理界的老大地位来说,还是有几分可信度的,因为MS最初支持OpenGL就不积极。

OpenGL可以运行在当前各种流行操作系统之上,如MacOS、Unix、Windows95/98、WindowsNT/2000、Linux、OPENStep、Python、BeOS等。

各种流行的编程语言都可以调用OpenGL中的库函数,如C、C++、Fortran、Ada、Java。

OpenGL完全独立于各种网络协议和网络拓扑结构。

目前,Microsoft公司、SGI公司、ATT公司的Unix软件实验室、IBM公司、DEC公司、SUN公司、HP公司等几家在计算机市场占主导地位的大公司都采用了OpenGL图形标准。

值得一提的是,由于Microsoft公司在WindowsNT和Windows95/98中提供OpenGL标准,使得OpenGL在微机中得到了广泛应用。

尤其是在OpenGL三维图形加速卡和微机图形工作站推出后,人们可以在微机上实现CAD设计、仿真模拟、三维游戏等,从而使得应用OpenGL及其应用软件来创建三维图形变得更有机会、更为方便。

OpenGL作为一个性能优越的图形应用程序设计界面(API),适用于广泛的计算机环境。

从个人计算机到工作站和超级计算机,OpenGL都能实现高性能的三维图形功能。

由于许多在计算机界具有领导地位的计算机公司纷纷采用OpenGL作为三维图形应用程序设计界面,所以OpenGL应用程序具有广泛的移植性。

因此,OpenGL已成为目前的三维图形开发标准,是从事三维图形开发工作的技术人员所必须掌握的开发工具。

OpenGL应用领域十分宽广,如军事、电视广播、CAD/CAM/CAE、娱乐、艺术造型、医疗影像、虚拟世界等。

1.1opengl1.1

1995年,SGI推出了更为完善的OpenGL1.1版本。

OpenGL1.1的性能比1.0版提高甚多。

其中包括改进打印机支持,在增强元文件中包含OpenGL的调用,顶点数组的新特性,提高顶点位置、法线、颜色、色彩指数、纹理坐标、多边形边缘标识的传输速度,引入了新的纹理特性等等。

1.2opengl1.3

2001年8月,ARB发布OpenGL1.3规范,它增加了立方纹理贴图、纹理环境、多重采样、纹理框架压缩等扩展指令,但是改进程度非常有限。

1.3opengl1.4

2002年7月,ARB正式发布OpenGL1.4,它也只加入了深度纹理/阴影纹理、顶点设计框架、自动纹理贴图等简单的功能。

1.3opengl1.5

2003年的7月,ARB公布OpenGL1.5规范。

OpenGL1.5内包含ARB制定的“正式扩展规格绘制语言”(OpenGLShadingLanguagev1.0),该语言用于着色对象、顶点着色、片断着色等扩展功能,同时也将作为下一代OpenGL2.0版本的内核。

OpenGL1.5的变化还增加了顶点缓冲对象(可提高透视性能)、非乘方纹理(可提高纹理内存的使用效率)以及阴影功能、隐蔽查询功能等等。

其主要内容包括

l顶点BufferObject:

进行顶点配列方式可以提高透视性能

lShadow功能:

增加用来比较Shadow映射的函数

l隐蔽查询(QUERY):

为提高Curling性能采用非同步隐蔽测试

l非乘方纹理(Texture):

提高mipmap等纹理内存的使用效率

lOpenGLShadingLanguagev.1.0:

用于着色(shader)对象、顶点着色以及片断着色技术(fragmentshader)的扩展功能

1.4opengl2.0

OpenGL1.0推出后的相当长的一段时间里,OpenGL唯一做的只是增加了一些扩展指令集,这些扩展指令是一些绘图功能,像是ClearCoat、Multisample、视频及绘图的整合工具(某些是通过OpenML的努力而开发出来的,它本身属于OpenGLARB扩展指令之一。

OpenGL2.0将在OpenGL1.3基础上进行修改扩充、但它将有下面五个方面的重大改进:

①复杂的核心被彻底精简;②完全的硬件可编程能力;③改进的内存管理机制、支持高级像素处理;④扩展至数字媒体领域,使之跨越高端图形和多媒体范畴;⑤支持嵌入式图形应用。

为了在获得强大功能的同时保持理想的兼容性,OpenGL2.0经历以下两个发展阶段:

第一个阶段注重兼容能力和平滑过渡,为此,OpenGL2.0核心将在精简后的OpenGL1.3功能模块的基础上加上可完全兼容的新功能共同组成,这种做法在满足兼容性的同时,还可将原有OpenGL中数量众多、且相互纠缠不清的扩展指令进行彻底精简。

第一阶段的任务只是为了过渡,而第二阶段才是OpenGL2.0的真正成熟期。

此时,ARB将合成出一个“纯OpenGL2.0”内核,纯内核将包含更多新增加的“精简型API函数”,这些函数具有完全的可编程特性、结构简单高效、功能强大且应用灵活。

除了完成这项任务外,ARB组织还得指导开发商抛弃繁琐的OpenGL1.X、转用更具弹性的“纯OpenGL2.0”。

1.5opengl2.1

OpenGLversion2.1在2006年8月2日发布,是最初版本1.0后的第七个版本。

尽管增加了版本的层析,支持高层析的编程shaders,但版本能够适于早期的版本,意味着运行2.0,1.5,1.4,1.3,1.2,1.1,or1.0GL的程序不用任何改变就可运行。

OpenGL2.1与当前的2.0版本相比,虽然版本号变更不如DX9到DX10那么巨大,但它却增加了多项实用的技术和功能,例如向后兼容增强型OpenGL的先进管道规划,其中包括:

优化GPU和显存之间并行工作时间,提高象素缓冲和对象的象素和质感快速缓冲利用率;增加标准彩色图像质感sRGB色彩空间应用促进管理的灵活性;并增加了许多新的shader弹性调配,包括非平方矩阵支持,支持阵列流对象和碎块点位置时,干扰和shaders属性不变的变量shader代码提高可靠性。

1.GLSL升级至1.2版;2.支持非正方形的矩阵.UniformMatrix{2x3,3x2,2x4,4x2,3x4,4x3}fv;3.象素缓冲对象(PixelBufferObject).它扩充了缓冲对象的接口.现在缓冲区对象可以支持顶点数组和象素数据了.象素缓冲对象能加速在GPU内存中进行的缓冲区之间的数据拷贝及其他象素操作.;4.sRGB纹理.遵循IEC61966-2-1.标准的sRGB颜色空间的纹理格式(包括压缩和非压缩格式).(OpenGL2.1addsbackwardscompatibleenhancementstoOpenGL'sadvancedprogrammablepipelineincluding:

PixelBufferObjectsforfasttextureandpixelcopiesbetweenframebufferandbufferobjectsinGPUmemory;textureimagesspecifiedinstandardsRGBcolorspaceforenhancedapplicationcolormanagementflexibility;andnumerousadditionstoincreasetheflexibilityofshaderprogrammingincludingnon-squarematrixsupport,supportforarraysasfirst-classobjects,afragmentpositionqueryinshadersusingPointSpritesandaninvariantattributeforvariablestoenhanceshadercodereliability.)

OpenGL2.1的效果2OpenGL扩展(OpenGLExtensions)

OpenGL和Direct3D比较起来,最大的一个长处就是其扩展机制。

硬件厂商开发出一个新功能,可以针对新功能开发OpenGL扩展,软件开发人员通过这个扩展就可以使用新的硬件功能。

所以虽然显卡的发展速度比OpenGL版本更新速度快得多,但程序员仍然可以通过OpenGL使用最新的硬件功能。

而Direct3D则没有扩展机制,硬件的新功能要等到微软发布新版DirectX后才可能支持。

OpenGL扩展也不是没有缺点,正因为各个硬件厂商都可以开发自己的扩展,所以扩展的数目比较大,而且有点混乱,有些扩展实现的相同的功能,可因为是不同厂商开发的,接口却不一样,所以程序中为了实现这个功能,往往要为不同的显卡写不同的程序。

这个问题在OpenGL2.0出来后可能会得到解决,OpenGL2.0的一个目标就是统一扩展,减少扩展数目。

2.1扩展名

每个扩展都有一个扩展名,扩展名类似如下形式:

GL_ARB_multitexture第一段GL,用来表示针对OpenGL哪部分开发的扩展,有以下几个值:

GL–针对OpenGL核心的扩展

WGL–针对Windows平台的扩展

GLX–针对Unix/Linux平台的扩展

GLU–针对OpenGLUtilityLibrary的扩展第二段ARB,用来表示是谁开发的这个扩展,常见以下几个值:

ARB–经OpenGLArchitectureReviewBoard(OpenGL管理机构)正式核准的扩展,往往由厂商开发的扩展发展而来,如果同时存在厂商开发的扩展和ARB扩展,应该优先使用ARB扩展EXT–被多个硬件厂商支持的扩展

NV–nVIDIA公司开发的扩展

ATI–ATI公司开发的扩展

ATIX–ATI公司开发的实验性扩展

SGI–SiliconGraphics(SGI)公司开发的扩展

SGIX–SiliconGraphics(SGI)公司开发的实验性扩展第三段multitexture就是真正的扩展名了,如multitexture就是多重纹理扩展。

2.2使用OpenGL扩展要使用一个OpenGL扩展,首先必须检查显卡是否支持这个扩展,以下代码可以获取一个显卡支持的的OpenGL扩展:

constchar*str=glGetString(GL_EXTENSIONS);

函数返回一个字符串指针,这个字符串就是显卡所支持的所有扩展的扩展名,不同的扩展名之间用空格隔开,形如:

"GL_ARB_imagingGL_ARB_multitextureGL_ARB_point_parameters……"OpenGL扩展往往都会新增一些函数,在Windows平台上,这些函数不是通过.lib库连接到程序里的,而要在运行时动态获得函数的指针。

我们以GL_ARB_point_parameters扩展为例看看怎么获得函数指针。

首先要定义函数指针类型,typedefvoid(APIENTRY*PFNGLPOINTPARAMETERFARBPROC)(GLenumpname,

GLfloatparam);

typedefvoid(APIENTRY*PFNGLPOINTPARAMETERFVARBPROC)(GLenumpname,

constGLfloat*params);这个工作SGI已经为我们做好,它提供了一个头文件glext.h,里面有目前绝大多数扩展的常量和函数指针定义,下载下来放到编译器的include/GL文件夹下面,然后在程序里面加上:

#include<GL/glext.h>就可以在程序中使用常量和函数指针类型了。

然后要定义函数指针:

PFNGLPOINTPARAMETERFARBPROCglPointParameterfARB;

PFNGLPOINTPARAMETERFVARBPROCglPointParameterfvARB;再检查显卡是否支持GL_ARB_point_parameters扩展,其中isExtensionSupported是自定义的一个函数,就是在glGetString(GL_EXTENSIONS)返回的字符串里查找是否存在指定的扩展名:

inthasPointParams=isExtensionSupported("GL_ARB_point_parameters");如果支持,就可以用wglGetProcAddress函数获取扩展函数的指针:

if(hasPointParams)

{

glPointParameterfARB=(PFNGLPOINTPARAMETERFARBPROC)/

wglGetProcAddress("glPointParameterfEXT");

glPointParameterfvARB=(PFNGLPOINTPARAMETERFVARBPROC)/

wglGetProcAddress("glPointParameterfvEXT");

}最后就可以在程序里使用扩展函数:

if(hasPointParams)

{

staticGLfloatquadratic[3]={0.25,0.0,1/60.0};

glPointParameterfvARB(GL_DISTANCE_ATTENUATION_ARB,quadratic);

glPointParameterfARB(GL_POINT_FADE_THRESHOLD_SIZE_ARB,1.0);

}另外,下面代码说明如何访问扩展函数:

(资料来源于csdn知识库)调用wglGetProcAddress函数访问一个不在标准OpenGL库中的扩展函数。

如果该扩展函数存在当前的执行(implementation)中,那么wglGetProcAddress返回一个用来访问该函数的函数指针。

否则,wglGetProcAddress返回NULL.例如,要访问glAddSwapHintRectWIN扩展函数,如下调用wglGetProcAddress:

//Getapointertotheextensionfunction.

typedefvoid(WINAPI*FNSWAPHINT)(GLint,GLint,GLsizei,GLsizei);

fnSwapHint=(FNSWAPHINT)wglGetProcAddress("glAddSwapHintRectWIN");//ActualcalltoglAddSwapHintRectWIN.

if(fnSwapHint!

=NULL)

(*fnSwapHint)(0,0,100,100);2.3WGL扩展glGetString(GL_EXTENSIONS)取得的扩展字符串中并不包括针对Windows平台的WGL扩展,WGL扩展串要通过WGL_ARB_extensions_string扩展来获得,以下代码演示了如何获得WGL扩展串:

定义WGL_ARB_extensions_string扩展新增函数wglGetExtensionsStringARB的函数指针类型,同样这个工作SGI已经为我们做好,只不过不在glext.h中,而在它提供的另外一个头文件wglext.h中:

typedefconstchar*(APIENTRY*PFNWGLGETEXTENSIONSSTRINGARBPROC)(

HDChdc);定义函数指针:

PFNWGLGETEXTENSIONSSTRINGARBPROCwglGetExtensionsStringARB;检查是否支持WGL_ARB_extensions_string扩展,如果不支持,表示这个显卡不支持WGL扩展,如果支持,则得到wglGetExtensionsStringARB函数的指针,并调用它得到WGL扩展串:

inthasWGLext=isExtensionSupported("WGL_ARB_extensions_string");

if(hasWGLext)

{

wglGetExtensionsStringARB=(PFNWGLGETEXTENSIONSSTRINGARBPROC)/

wglGetProcAddress("wglGetExtensionsStringARB");

constchar*wglExt=wglGetExtensionsStringARB(hdc);

……

}2.4OpenGL版本一些常用的OpenGL扩展会在新版的OpenGL中加到OpenGL核心中去,成为OpenGL标准的一部分,可以简化程序开发,程序员使用这些功能时不必做繁琐的扩展初始化工作。

比如多重纹理功能,在OpenGL1.2.1加入到OpenGL核心中,以前要使用多重纹理,要先检查是否支持GL_ARB_multitexture扩展,然后初始化glActiveTextureARB等函数,很麻烦,而OpenGL1.2后,则可以直接使用glActiveTexture函数。

不过,这种简化只有Mac/Unix/Linux程序员才能享受到,在Windows平台上没有这么简单。

微软为了维护Direct3D,对OpenGL的支持很消极,其OpenGL实现仍然是1.1。

由于Windows上的OpenGL程序最终都会动态链接到微软的OpenGL32.dll,可OpenGL32.dll只支持OpenGL1.1,使我们不能直接使用新版OpenGL,仍然要用扩展访问OpenGL1.1以来新增的功能。

2.5OpenGL扩展资料AllAboutOpenGLExtensions:

必读。

讨论OpenGL扩展机制,讲述了如何阅读扩展官方说明书,并举了一些扩展的例子。

OpenGLExtensionRegistry:

由SGI维护,列出了目前公开的所有扩展及其官方说明书。

OpenGLHardwareRegistry:

由Delphi3D.net维护,列出了目前几乎所有3D加速卡的OpenGL硬件信息,包括其支持的扩展。

当然,这里面列的扩展不能作为程序的依据,程序中要使用某个扩展,还是要先检查显卡是否支持。

因为同样的显卡,如果驱动程序不同,支持的扩展也不相同,往往新的驱动程序会加入新的扩展,丢掉一些废弃的扩展。

2.6OpenGL硬件加速在Windows平台上,OpenGL驱动可能有三种模式:

纯软件、MCD和ICD:

纯软件模式:

微软提供一个OpenGL的软件实现,所有渲染操作均由CPU完成,速度很慢。

如果安装系统时使用Windows自带的显卡驱动程序,那么OpenGL程序就会运行在软件模式下。

而且由于微软有自己的Direct3D,所以对OpenGL的支持很消极,它的OpenGL纯软件实现只支持OpenGL1.1,而目前OpenGL的最新版本为1.4MCD(MiniClientDriver):

MCD是早期微软在WindowsNT上支持OpenGL时,为了简化驱动开发时使用的一个模型。

在这个模型中,OpenGL渲染管线的变换、光照部分仍然由软件实现,而光栅化部分则由硬件厂商实现,因此只要硬件支持,MCD可以硬件加速光栅化部分。

MCD虽然可以简化驱动开发,但是功能限制太大,现在市面上的3D加速卡均支持硬件变换和光照,MCD却不能利用这一特性,看上去MCD已经没有存在的价值ICD(InstallableClientD

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1