首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > OpenGL面面观
【标  题】:OpenGL面面观
【关键字】:OpenGL
【来  源】:http://www.cublog.cn/u/16024/showart.php?id=181017

OpenGL面面观

OpenGL总体介绍

今天许多人也许不知道OpenGL是做什么用的。但在上世纪90年代,OpenGL可谓大名鼎鼎。

  虽然早在WinNT3.51 时代M$就已经实现了它的OpenGL 版本,但不肯随其Windows95 时提供,称该API 适合高端应用,而Win95面向一般消费者的用不到,并且在其win3.x下开发的wing 图表库的基础上搞出了GameSDK,即后来的DirectX 库,称这套库是专门为高性能游戏开发设计的,在当时的硬件条件下,这无疑是非常有道理的,并且很快成为Windows环境下游戏开发的标准API 。该库实质上是提供了绕过Windows 直接访问显存的途径,从而很好的解决了GDI 体系性能方面的不足,但由于是以COM接口形式提供的,所以相当复杂,而稳定性也不是很好,所以有人称Direct3D 是为追求速度而不择手段的公司才用的。然而也就在这个时期,三维图形加速卡开始走向商用和家用,也就是在这时期S3公司以其性价比极高的带三维图形加速的显示芯片、板卡向当时Trident 公司的霸主地位发起了挑战。另外这时实时三维游戏开始流行,以Dos 下的第一人称射击游戏——暗杀希特勒(3d worlf) 大获成功、红极一时ID Software 的开始铸辉煌,推出了Doom 、Quake1 ,相信这两个名字在今天(2000.4) 的游戏圈子里应该是无人不知无不晓吧?1996.12.ID Software 的高手John Carmack 在开发下一代三维图形引擎时在其.plan 中写上了以下字句:

  Direct-3D IM is a horribly broken API. It inflicts great pain and suffering on the programmers using it, without returning any significant advantages. I don’t think there is ANY market segment that D3D is apropriate for, OpenGL seems to work just fine for everything from quake to softimage. There is no good technical reason for the existance of D3D.

  I’m sure D3D will suck less with each forthcoming version, but this is an oportunity to just bypass dragging the entire development community through the messy evolution of an ill-birthed API.

  此后以他为代表的一大批游戏开发人员开始多方呼吁MS积极支持OpenGL。M$终于在Win95的OSR2版本里集成了OpenGL,并为以前版本的Win95免费提供单独的OpenGL实现。(或许您还不了解这些人的影响力,不知道您听说过以生产Voodoo系统图形加速卡而著称于世的3dfx公司吗?当年Quake的开发者不肯用Voodoo的glide API对voodoo做优化版本,差点没把3dfx吓蒙,于是赶紧搞了一个针对游戏的OpenGL子集:MiniGL,让ID Software的人只要在制作OpenGL时只使用MiniGL API做过优化就成,这样Quake总算可以用上voodoo的硬件加速能力了。这样也造就了一个新名词:MCD--MiniGL Client Driver,用于Windows的MiniGL驱动程序,而标准的OpenGL则依靠ICD驱动)。

      OpenGL是Open Graphics Library(开放性图形库)的缩写,是一套三维图形处理库,也是该领域的工业标准。计算机三维图形是指将用数据描述的三维空间通过计算转换成二维图像并显示或打印出来的技术。

  OpenGL就是支持这种转换的程序库,它源于SGI公司为其图形工作站开发的IRIS GL,在跨平台移植过程中发展成为OpenGL。SGI在1992年7月发布1.0版,后成为工业标准,由成立于1992年的独立财团OpenGL Architecture Review Board (ARB)控制。SGI等ARB成员以投票方式产生标准,并制成规范文档(Specification)公布,各软硬件厂商据此开发自己系统上的实现。只有通过了ARB规范全部测试的实现才能称为OpenGL。1995年12月ARB批准了1.1版本,最新版规范是1999.5通过的1.2.1。

  OpenGL被设计成独立于硬件,独立于窗口系统的,在运行各种操作系统的各种计算机上都可用,并能在网络环境下以客户/服务器模式工作,是专业图形处理、科学计算等高端应用领域的标准图形库。它低端应用上的主要竞争对手是MS-Direct3D,该图形库是以COM接口形式提供的,所以极为较复杂,稳定性差,另外微软公司拥有该库版权,目前只在Windows平台上可用。D3D的优势在速度上,但现在低价显卡都能提供很好的OpenGL硬件加速,所以做3D使用Direct3D已没有特别的必要,在专业图形处理特别是高端应用方面目前还没有出现以Direct3D技术为基础的例子,而游戏等低端应用也有转向OpenGL的趋势。

  微软在Windows NT对OpenGL的支持始于3.51,在Windows9x中的支持始于Win95 OEM Service Release 2。Windows下常用的OpenGL库有两种,MS实现的和SGI实现的,MS-OpenGL调用会自动检测是否存在显示卡制造商提供的ICD(Installable Client DeviceDriver)驱动程序,有则调用ICD中的例程,否则才用CPU进行计算,所以能利用显示卡的OpenGL加速能力。对开发者来说使用方法并没有区别,只是有ICD驱动时更快些。SGI的版本是纯软件实现不能利用硬件加速并且SGI已经在1999年宣布停止支持,但这套库便于调试程序,仍有不少开发者使用。

  SGI曾经宣布研发OpenGL++,该图形库最大的特点是面象对象,提供了树形场景支持,大大减省了使用OpenGL处理复杂场景的工作量。后来(1999)SGI宣布与M$合作开发Ferihant,即Windows的下一代图形处理体系,包括DirectX与OpenGL的低级图形处理接口和以场景图支持为特点的高级接口,并且就此停止对其在Windows下的OpenGL实现的支持以示决心。此举世瞩目,大家都以为Windows图形处理快要过上幸福生活了,然而,不久,SGI宣布中止合作,并撤回派出的科学家,Ferihant基本上夭折。SGI 称终止合作的原因是M$不肯积极合作,光想把SGI 的技术合并进DirectX,真正内幕不详。不过以SGI在图形处理界的老大地位来说,还是有几分可信度的,因为M$初支持OpenGL就不积极。



      由于专业领域使用的CAD/CAM软件获得了巨大成功,现在OpenGL已经稳稳占据纯三维PC市场。由Silicon Graphics(SGI)公司开发的,有Windows NT和Windows 95版,其API在工作站上具有可移植性。它是图形标准为图形库提供的一条简捷的途径。OpenGL应用程序接口的版权属于SGI公司,其标准由OpenGL结构监察组指定。该监察组的成员有IBM、Intel、Microsoft、DEC、SGI、Intergraph、Evans&Sutherland。

透析显卡的性能与API关系之DirectX篇

我们从下面这篇文章来阐述OpenGL在PC应用中的重要性————

透析显卡的性能与API关系之DirectX篇

  说到API,也许很多人不容易理解。在计算机行业中,所有软件的程序接口,包括3D图形程序接口在内,统称为API(Application Program Interface)—应用程序接口。

  其实,现实世界中,我们经常接触各种“API”,它是沟通我们和其它设备的桥梁。简单地说,API的出台使得软件开发工作者的工作更加轻松、容易。有了它,各种软件的接口功能就有了可比性。

  过去,如果您想让它们发挥最大功效,必须做的一件事,就是记录相关硬件设备的地址。现在,API已成为软、硬件之间一种连接的桥梁,这道工序就可以省略了。

  开发API的相应功能,首先需要详尽的定义的标准,这些标准在硬件开发、完善阶段已经由生产厂商加以制定,按照提供的标准,软件开发人员可以轻而易举地完成一些复杂程序的调试工作。当他们设计某项功能时,也不再需要知道硬件的特定参数,往往只在程序中添加一条或几条命令就足够了。

  所以,在游戏与显卡之间也需要这样的一座桥梁。游戏设计人员在设计时,不可能考虑到全部显卡的特性,他们只需要在一个共同的标准,按照API的规范来设计游戏,而游戏运行时通过API调用显卡的硬件资源。

  同理,显卡芯片厂商根据标准来设计自己的硬件产品,以达到在API调用硬件资源时最优化,获得更好的性能。有了这个桥梁,便可实现不同厂家的硬件、软件最大范围兼容。目前PC游戏与显卡之间的桥梁主要有两个—DirecX和OpenGL。

  今天这里主要讨论一下DirectX对显卡性能的影响

为游戏而生

  说到DirectX,大部分读者都会认为这是一个专门为图形服务的API。实际上,DirectX是用途极为广泛的API,它并不局限于显示领域。目前的DirectX中包含有Direct Graphics(Direct 3D+Direct Draw)、Direct Input、Direct Play、Direct Sound、Direct Show、Direct Setup、Direct Media Objects等多个组件,它提供了一整套的多媒体接口方案。只是由于目前DirectX版本的更新主要在3D图形技术上,因此DirectX才给人一种图形API的感觉。

  不过,当初微软发布DirectX的初衷正是为了弥补Windows系统对图形管理的不利。但第一代DirectX并未成功,因为当时的专业图形API—OpenGL支持者众多,而初出茅庐的DirectX 1显得稚嫩许多,因此并未流行起来。

  DirectX 1版本是第一个可以直接对硬件信息进行读取的程序。它提供了更为直接的读取图形硬件的性能(比如:显示卡上的块移动功能)以及基本的声音和输入设备功能(函数),使开发的游戏能实现对二维(2D)图象进行加速。这时候的DirectX不包括现在所有的3D功能,但如果您打算制作高级游戏的话,那它就是入门的起步点。

D3D雏形形成

  第二代DirectX在2D图形方面做了改进,加入了一些2D动态效果,采用了Direct3D的技术,这种结构使DirectX 2和DirectX 1有了根本不同。在DirectX 2中,3D应用程序接口是采用了“平滑模拟和RGB模拟”两种模拟方式对三维(3D)图象进行加速计算的。DirectX 2.0同时也采用了更加友好的用户设置程序并更正了应用程序接口的许多问题。整个DirectX的设计架构已基本确定,它也是如今的DirectX的雏形。也正是那时,《命令与征服》、《红色警报》等第一批Windows下的游戏开始流行起来。

  1997年,正是3D概念进入游戏界的时候,DirectX 3推出了。DirectX 3版本是DirectX 2的简单升级版,它对DirectX 2.0的改动并不多。包括对DirectSound(针对3D声音功能)和DirectPlay(针对游戏/网络)的一些修改和升级。

  DirectX 3.0a版本是修正了错误的升级版。在这里,主要的是针对DirectX安装程序的修改。在一些图形加速卡(如加拿大Matrox公司的MGA系列图形卡)的安装程序上,用不通知或合适/有效的选择方式改写用户的显示驱动程序,以便图形卡的加速性能更好。DirectX 3集成了最简单的3D效果,同时也一定程度上促进了3D显卡的举起。

  不过那时,最具诱惑力的API不是DirectX,也不是OpenGL,而是Glide。《极品飞车》、《古墓丽影Ⅱ》等游戏在Voodoo卡的衬托下画面效果让人惊叹,因此人们在那时只知道3Dfx、Voodoo和Glide。因此,这一版本的D3D仅是一个雏形。

DirectX技术成熟

  微软没有推出DirectX 4版本,直接推出了DirectX 5。DirectX 5版本在D3D上有很大改善,对D3D的内容做了彻底修改,并且使游戏开发商们移植到他们的应用程序接口中更容易、更方便。除此之外,许多应用程序接口的细节部分也得到了改进。加入了雾化效果、Alpha混合等3D特效,使3D游戏中的空间感和真实感得以增强,还加入了S3的纹理压缩技术。

  同时,DirectX 5在其它各组件方面也有加强,在声卡、游戏控制器方面均做了改进,支持了更多的设备。因此,DirectX发展到DirectX 5才真正走向了成熟。此时,以《古墓丽影Ⅲ》为代表的游戏也开始加入DirectX阵营,DirectX与Glide形成分庭抗礼之势。当时大部分3D游戏均提供了Glide和D3D两种API的支持。

  DirectX 6推出时,Glide由于3Dfx的固步自封已逐渐走向灭亡,而DirectX已被绝大多数厂商认可并成为实际上的主打游戏API。在这一版本的DirectX中,加入了双线性过滤、三线性过滤等优化3D图像质量的技术,游戏中的3D技术逐渐走入成熟阶段。不过,此时OpenGL也被广大玩家所熟知,主要是因为idsoftware发布了经久不衰的Quake Ⅲ,它只能运行于OpenGL模式下。同时,很多基于Quake Ⅱ引擎的游戏也开始流行(如CS),它们在OpenGL模式下的表现要明显好于D3D下的表现。这时,3DMark99等测试软件出台,专门用于测试显卡在D3D下的表现,而OpenGL下的表现自然由Quake Ⅲ来考察。

DirectX霸气初现

  DirectX 7的推出伴随着产生了一个GPU的概念,同时在DirectX 7加入了硬件几何转换与光源处理(T&L)技术。虽然OpenGl中已有相关技术,但此前从未在民用级硬件中出现。GPU实际上是一组图形函数的集合,而这些函数由硬件实现,主要用于处理3D游戏中物体移动时的坐标转换及光源处理。此前,这些工作都是由CPU配合特定的软件来做的。

  因此,硬件T&L的出现一定程度上将CPU解放出来。这一方面提高了整个系统的工作效率,另一方面则让显卡在一定程度上摆脱了CPU的束缚。换句话说,拥有T&L显示卡,使用DirectX7,即使没有高速的CPU,同样能能流畅的跑3D游戏。T&L成为当时人们关注的焦点。第一个支持T&L功能的显示卡是Nvidia的Geforce 256,它第一次把GPU的概念带入我们的PC。

全面赶超OpenGL

  如果说DirectX 7的推出使D3D在技术上赶上了OpenGL,那么DirectX 8的出现则全面赶超OpenGL。在DirectX 8中,人们在DirectX 7中津津乐道的硬件T&L转眼被两个陌生的名词所取代—Vertex Shader和Pixel Shader。同硬件T&L仅仅实现的固定光影转换相比,VS和PS单元的灵活性更大,它使GPU真正成为了可编程的处理器。这意味着程序员可通过它们实现3D场景构建的难度大大降低。

  VS和PS在游戏中带来的最大改变就在于水面的效果,相信经历了DirectX 7到DirectX 8显卡换代的用户一定对3DMark 2001SE中的Nature场景记忆犹新—首次在虚拟场景中看到如此真实的水面效果。

如日中天

  如果说DirectX 8中的Shader单元还是个简单尝试的话,那么DirectX 9中的Shader则成为了标准配置。除了版本升级到2.0外,DirectX 9中PS单元的渲染精度已达到浮点精度,传统的硬件T&L单元也被取消。全新的VertexShader(顶点着色引擎)编程将比以前复杂得多,新的VertexShader标准增加了流程控制,更多的常量,每个程序的着色指令增加到了1024条。

  尽管新的PixelShader(象素着色引擎)还不支持流程控制,但最大指令数增加到了160条。在DirectX9里,顶点着色编程比以前复杂得多,新的VertexShader标准增加了流程控制,更多的常量,每个程序的VertexShader指令增加到了1024条。尽管新的象素着色还不支持流程控制,但最大指令数增加到了160条。

  DirectX9真正关键的特性是64位RGBA色彩(每种颜色信道16位)和128位浮点精度(每种颜色信道32位浮点)。颜色精度的巨大增加将带来让人震惊的视觉效果和图像质量。

  
  从上面的介绍我们可以看到DirectX是为游戏而诞生,而且伴随着不同版本的DirectX推出,就会有相应的显卡产品支持。从DirectX1.0到DirectX3.0,微软让它的DirectX开始在游戏领域树立起3D的标杆,尽管当时的3D很粗糙,但是雏形已初步形成,到DirectX7开始,随着OpenGL和Glide势力日渐衰弱,DirectX的霸气初现。

  到DirectX8发布后,DirectX已经在3D游戏领域树立起它的的权威地位,引人的Ps和Vs的出现令OpenGL和Glide自叹不如,如今新的DirecetX9.0,更是如日中天,权威地位无人能撼动。特别是现在DirectX已成为评价显卡性能的标准,从显卡支持什么版本的DirectX,一般的PC用户就可以分辨出显卡的性能高低,从而选择出适合于自己的显卡产品。

NVIDIA与ATi在DirectX上的分歧

  从DirectX 8开始,硬件厂商便开始处于一种相对滞后的状态。因为首度出现的Shader单元被硬件厂商接受的程度还不高,硬件厂商均处于一种观望态度,因此跟进的厂商并不多。其实,微软提出Shader概念本来也是一种尝试,其间Shader单元也经过了数次修改,而NVIDIA与ATi也正是此时遇到了分歧。

  ATi在RADEON 8500及其后续Direct 8产品中均加入了对Shader单元1.4版的支持(1.4版Shader正是ATi和微软合作开发的产物。而正是从这时开始,NVIDIA同微软的合作开始变得不如以前顺利),而GeForce3/4 Ti系列仅支持到1.1/1.3。而游戏厂商纷纷选择了使用较低版本的Shader单元来设计游戏,这也是DirectX 8游戏中鲜有支持1.4版Shader的原因。

  也正是这一点造成了3DMark03测试成绩的争议,因为在3DMark两个基于DirectX 8的场景中,均采用了1.4版本的Shader渲染模式,而由于NVIDIA的Ti系列显卡不支持1.4版本渲染模式,因此要经过模式的转换才可运行,这其间必定会降低渲染效率,由此导致最后测试得分的降低。而由于大部分基于DirectX 8的游戏均未采用1.4版本Shader渲染模式,因此在实际游戏中Ti系列显卡的性能并未受到影响。这也是众多玩家指责3DMark03不公正的主要原因之一。

  同时在渲染精度上又是引起ATi和NVIDIA争论不休的话题。按照DirectX 9的标准,PS的单色渲染精度最终被定义为24bit,ATi的产品严格按照此标准设计,而NVIDIA的产品则仅提供16bit精度和32bit精度渲染模式。毋庸置疑,在对比测试时,如使用32bit精度会在性能上有所损失,而使用16bit精度,则损失画质。

  由于NVIDIA的默认渲染精度为32bit,因此不甘在测试中落后的NVIDIA推出了降低默认渲染的驱动,以提升测试成绩。对于目前这种状况,基本有两种观点,一种认为32bit精度的渲染是未来的发展方向,NVIDAI如此设计带有一定前瞻性;另一种则认为紧跟标准走,才会达到资源的最佳化,使画质和速度达到最佳平衡,过高的精度只会降低渲染效率。

  以目前显卡的性能来看,在DirectX 9中的表现并不能做到绝对的游刃有余。而牺牲性能换来的高于标准并不易察觉的画质提升并不必要。其实,如果NVIDIA在DirectX 9制定时更多地参与进去,则完全可选择24bit和32bit共存的模式,而非16bit和32bit。目前的情况只能说明NVIDIA在这次的硬件设计上有一个小小的失误,同标准有一定脱节。

 从目前的发展来看,能否来看,能否参与制定最新的DirectX标准将很大程度上决定硬件厂商的产品在最终应用时的性能表现,毕竟新技术的推广需要硬件厂商和软件厂商的共同努力,能参与最新标准的制定,也一定程度上说明了厂商的技术实力。

  最新的ATi消息,如果明年微软把标准提高,要求Pixel Shaders 3.0渲染精度达到32位的话,ATi将会在下一代VPU—R420上采用新的内部Pixel Shader渲染精度。即32位精度的渲染精度。


  好,从上面这篇文章中,我们介绍了什么是API及DirectX,并且探讨了显卡性能与DirectX的关系,并且提到3D图形接口除了DirectX外,还有OpenGL接口。

显示卡的性能与API的关系--OpenGL篇

现在,我们来看看这个话题:

显示卡的性能与API的关系--OpenGL篇

  如上所说,许多人也许并不知道OpenGL,OpenGL是做什么用的。实际上,在上世纪90年代,OpenGL可谓大名鼎鼎,如雷贯耳,那时候微软的DirectX还刚刚出现,功能远不能与OpenGL相比,只不过由于自身原因,OpenGL慢慢走向沉默。今天我们将为你详细讲述OpenGL及OpenGL的发展。

  OpenGL实际上是一种3D程序接口(即我们常说的3D API),它是3D加速卡硬件和3D图形应用程序之间一座非常重要的沟通桥梁。也可以说,OpenGL是一个功能强大,调用方便的底层3D图形库。遗憾的是,由于平台的局限性等原因,D3D应用至今仍主要集中于游戏和多媒体方面,在专业高端绘图应用方面,老牌的3D API—OpenGL仍是主角。

  将OpenGL称之为SGI的OpenGL毫不为过,它源于SGI公司为其图形工作站开发的IRIS GL,在跨平台移植过程中发展成为OpenGL。SGI在1992年7月发布1.0版,后成为工业标准,由成立于1992年的独立财团OpenGL Architecture Review Board (ARB)控制。SGI等ARB成员以投票方式产生标准,并制成规范文档(Specification)公布,各软硬件厂商据此开发自己系统上的实现。只有通过了ARB规范全部测试的实现才能称为OpenGL,现在的ARB投票成员包括SGI、Intel、IBM、nVIDIA、ATi、Microsoft、Apple、3DLabs等业界群英。



OpenGL的发展历程

  OpenGL的前身是SGI公司为其图形工作站开发的IRIS GL。IRIS GL是一个工业标准的3D图形软件接口,功能虽然强大但是移植性不好,于是SGI公司便在IRIS GL的基础上开发了OpenGL。OpenGL的英文全称是“Open Graphics Library”,顾名思义,OpenGL便是“开放的图形程序接口”。

  1992年7月,SGI公司发布了OpenGL的1.0版本,随后又与微软公司共同开发了Windows NT版本的OpenGL,从而使一些原来必须在高档图形工作站上运行的大型3D图形处理软件,如用于制作电影《侏罗纪公园》、《玩具总动员》、《泰坦尼克号》而大名鼎鼎的Softimage 3D也可以在微机上运用。

  1995年OpenGL的1.1版本面市,该版本比1.0的性能有许多提高,并加入了一些新的功能。其中包括改进打印机支持,在增强元文件中包含OpenGL的调用,顶点数组的新特性,提高顶点位置、法线、颜色、色彩指数、纹理坐标、多边形边缘标识的传输速度,引入了新的纹理特性等等。

  1997年,由于在Windows 95下大量3D游戏的涌现,游戏开发公司迫切需要一个功能强大,兼容性好的3D图形接口,而当时微软公司自己的3D图形接口DirectX 3.0的3D图形功能实在是糟糕,因而以制作《雷神之锤》等经典3D射击游戏而著名的id公司同其它一些游戏开发公司一道,与软件霸主微软公司对话,强烈要求微软公司在Windows 95中加入对OpenGL的支持。

   同时,id公司还以OpenGL为3D图形接口开发了《雷神之锤2》的游戏引擎。《雷神之锤2》上市后大受欢迎,以无以伦比的3D图形特效、身临其境的音响效果等特色,摘取了1997 年由电脑游戏界的权威杂志《PC GAMER》评选的“年度最佳游戏”、“最佳动作游戏”和“最佳网络游戏”三项桂冠。

  当时由于硬件限制,《雷神之锤2》只应用了OpenGL的一部分功能。但是《雷神之锤2》获得的巨大成功,使人们第一次在电脑游戏中体会到OpenGL的强大功能,也迫使微软公司最终在Windows 95的OSR2版(俗称Windows 97)和后来的Windows 98中加入了对OpenGL的支持。这样,不但许多支持OpenGL的电脑3D游戏得到广泛应用,而且许多在Windows 95平台上运行的3D图形设计软件如AutoCAD R14、3DS MAX R2等也可以运用支持OpenGL标准的3D加速卡,大大提高其3D图形的处理速度。

  今年的7月28日,SGI和ARB公布了最新的OpenGL规格OpenGL 1.5。OpenGL 1.5中包括OpenGL ARB的正式扩展规格绘制语言“OpenGL Shading Language”。该语言将作为即将发布的“OpenGL 2.0”的底核。

  OpenGL 1.5的新功能如下:

·顶点Buffer Object:进行顶点配列方式可以提高透视性能
·Shadow功能:增加用来比较Shadow映射的函数
·隐蔽查询(QUERY):为提高Curling性能采用非同步隐蔽测试
·非乘方纹理(Texture):提高mipmap等纹理内存的使用效率
·OpenGL Shading Language v.1.0:用于着色(shader)对象、顶点着色以及片断着色技术(fragment shader )的扩展功能

  另外以开发API为宗旨的业内团体Khronos Group于同一天宣布支持嵌入系统用的2D、3D图形规格“OpenGL ES 1.0”。另外Khronos Group还制订了“EGL 1.0”,“EGL 1.0”中制定了在多种操作系统中安装OpenGL ES的标准方法。

  OpenGL为ES定义OpenGL的subset profile的规格。考虑到在嵌入式应用软件中使用,减小了内存使用量。当在软件中安装OpenGL ES 1.0时,只需要50KByte的容量。另外,还可以利用硬件实现固定小数点、浮动小数点以及图形加速器。

  另外,KhronosGroup公布了用来制作动态播放媒体的API规格“OpenML”的开发组件“Software Development Kit(SDK)for OpenML 1.0”的α版。使用该SDK可以制作用来取得、处理、同步以及播放数码媒体内容的程序。α版支持Windows和Linux,通过Khronos Group的网站免费提供。另外SGI已经公开了该SDK的支持IRIX的版本。



OpenGL的特点

1.硬件无关的软件接口

  可以在不同的平台如Windows 95、Windows NT、Unix、Linux、MacOS、OS/2之间进行移植。因此,支持OpenGL的软件具有很好的移植性,可以获得非常广泛的应用。

2.可以在客户机/服务器系统中工作,即具有网络功能

  这一点对于制作大型3D图形、动画非常有用。例如,《玩具总动员》、《泰坦尼克号》等电影的电脑特技画面就是通过应用OpenGL的网络功能,使120多台图形工作站共同工作来完成的。

  由于OpenGL是与硬件无关的3D图形接口,在 Windows、Unix/X-Windows、 MacOS、OS/2等不同版本的窗口相关部分(系统相关)略有差异。由于OpenGL是3D图形的底层图形库,没有提供几何实体图元,不能直接用以描述场景。但是,通过一些转换程序,可以很方便地将AutoCAD、3DS等3D图形设计软件制作的DFX和3DS模型文件转换成OpenGL的顶点数组。

  另外,在OpenGL的基础上还有Open Inventor、Cosmo3D、Optimizer等多种高级图形库,适应不同应用。其中,Open Inventor应用最为广泛。该软件是基于OpenGL面向对象的工具包,提供创建交互式3D图形应用程序的对象和方法,提供了预定义的对象和用于交互的事件处理模块,创建和编辑3D场景的高级应用程序单元,有打印对象和用其它图形格式交换数据的能力。



目前OpenGL的发展状况

  游戏程序员们曾经对OpenGL的技术和画质推崇倍至,以至于微软在Windows系统中引入OpenGL,并且在Windows平台上出现了Quake II、QuakeIII、重返德军总部等一批优秀的基于OpenGL API的游戏,而同时期的D3D游戏没有哪一款能在画质上超越这些OpenGL游戏的,一直到微软发布DirectX 7,这种情况还是没有发生多大的改变,DirectX只是作为一个能用于快速开发游戏的API而存在着。

  但是当微软在2001年发布了DirectX 8以后,局面终于被扭转了,DirectX 8是DirectX发展史上一个里程碑式的产品,它在2D、3D、视频、音频以及交互式输入设备接口方面进行了许多重要的改进,其中,在3D图形处理方面尤其做了划时代的改进,可以说,作为一个游戏API,DirectX 8已经超越了OpenGL。

  出现这样的情况决非偶然:OpenGL是由ARB这一官僚机构管理的,官僚主义带来的自然是OpenGL发展的停滞不前,同时由于要考虑到团队中大多数人的利益,以至于在OpenGL 1.0推出后的相当长的一段时间里,OpenGL唯一做的只是增加了一些扩展指令集,这些扩展指令是一些绘图功能,像是ClearCoat、Multisample、视频及绘图的整合工具(某些是通过OpenML的努力而开发出来的,它本身属于OpenGL ARB扩展指令之一)。

  这正好给也是ARB成员之一的Microsoft找到了借口,他抱怨ARB对市场的反映极为迟钝,因而抛开OpenGL,倾其所有的开发资源,独自全力投入开发DirectX的工作上。更可笑的是在OpenGL 1.4中的一项Vertex编程框架技术还被同为ARB成员之一的微软指控侵犯了DirectX 8的专利;而Direct3D这边却得到了微软倾尽全力支持,技术更新极快,最终完全超越了OpenGL。

  但是OpenGL也并不是完全沉没,而是在默默耕耘,继续走自己的道路。继1.5版后,ARB又为我们展示了具有美好前程的OpenGL 2.0版本。

  OpenGL 2.0标准的主要制订者并非原来的SGI,而是逐渐在ARB中占据主动地位的3Dlabs。2.0版本首先要做的是与旧版本之间的完整兼容性,同时在顶点与像素及内存管理上与DirectX共同合作以维持均势。OpenGL 2.0将由OpenGL 1.3的现有功能加上与之完全兼容的新功能所组成(如图一)。借此可以对在ARB停滞不前时代各家推出的各种纠缠不清的扩展指令集做一次彻底的精简。此外,硬件可编程能力的实现也提供了一个更好的方法以整合现有的扩展指令。

  OpenGL 2.0最重要的更新是加入了可编程能力。合成一个提供给开发者更多精简API的“Pure”OpenGL 2.0。通过将特定的OpenGL功能定义为“旧”功能,并加入更具有弹性的可编程新功能,让开发者们能运用可编程能力快速地获取最急切需求的功能。其中,可编程顶点处理、可编程片段处理、可编程图像格式是OpenGL 2.0的关键功能。

  顶点处理其功能在于照明,材质和几何图形的弹性。可编程顶点程序将取代部分旧有的OpenGL管线如顶点转换、正规转换、照明、色彩强化、材质坐标产生及转换等,并且允许进行随机个别顶点运算。片段处理其功能为材质存取,插值计算和像素运算。

  OpenGL 2.0增加了片段处理器的能力,取代旧有的内插值顶点数据运算、像素缩放、质材存取及应用、雾化等。可编程图像格式将取代固定格式封装和解封装运算,在自OpenGL传送或接收像素数据时,将允许类型与格式进行任意组合。

  此外,OpenGL 2.0提供了更好的数据移动和内存管理功能。加强了应用程序对数据移动的控制能力和更好的顶点处理能力,能消除为增进数据流量而产生的数据备份,大幅提升性能。

  OpenGL 2.0加入可编程能力可谓是开发者企盼已久的功能。开发者借由OpenGL 2.0提供的可编程能力,以丰富且常效性的功能来取代以往的复杂度,减少对现有及未来扩展指令的需求。与此同时,主要的硬件厂商愿意开放IP,一个困扰ARB多时的问题得到了很大程度上的解决。

  而作为ARB准会员的ATi和NVIDIA也致力于彼此技术的整合。OpenGL开放性图形库,其“开放”是重点,ARB承诺所有被OpenGL采用的创意想法都将公开给所有人使用且不需要IP授权。我们期望ARB早日消除障碍,领导业界并为专业性绘图市场带来更多更新的图形技术。



厂商支持情况

  ARB中庞大的厂商阵营本身就是对OpenGL 2.0强力的支持,3Dlabs在最新的专业绘图卡中也肯定会加入对OpenGL 2.0标准的强力支持。在其他厂商方面,ATI是支持OpenGL 2.0规范中比较积极的一个,伴随着RADEON 9500/9700等系列芯片的推出,ATI在专业显卡领域也有大的动作。

  在前面这些家用显示芯片面市3个月后,ATI公布了FireGL专业显卡,该卡搭配128MB显存,是市场上首款支持可编程浮点结构的专业3D加速卡,在它支持的API中就包括了OpenGL 2.0。FireGL有两个版本,其一是FGL 9700 Visual Processing Unit(VPU,即视觉处理器),其二是较慢版本的FGL 9500(对应RADEON 9500芯片,被成为FireGL Z1),二者都有128MB显存。

  FireGL X1-128MB在去年12月已出现在市场,建议售价为795美元;FireGL Z1也于前不久上市,建议售价为595美元,据称一款256MB版的FireGL X1也将很快上市。可见,著名的显卡厂商ATI在支持OpenGL 2.0规范上是不遗余力的,这恐怕与NVIDIA的Cg被排除在规范之外不无关系。

  虽然最终ARB在Shading上采用了3DLabs的设计方案,但NVIDIA渴望在ARB占据一席之地的迫切之心一目了然。不过,一对老冤家ATI和NVIDIA在ARB的撮合下,也开始进行和OpenGL有关的技术整合。

  专业市场的SGI、3Dlabs及家用市场的ATI和NVIDIA都投入到OpenGL 2.0的怀抱中,这样的阵容已足够强大了。剩下的,就看软件开发厂商们如何用好OpenGL 2.0的新特性,为我们创造出更好、更炫目的效果了。



OpenGL的测试软件

1.GL Excess

  GL Excess是一款著名的OpenGL性能测试工具,它的作者是一位来自意大利的小伙子Paolo Martella,它同样有着华丽的界面、丰富的特效表现和动态光影变化,Demo模式下也有动人的音乐和极具震撼力的音效,但是由于没有足够的3D模型(只有一个),该软件还略显单薄,无法像3Dmark那样进行复杂的大型场景测试。

  进入GL Excess,可以看到所有的测试选项集中在左侧的Test Settings一栏中,Project输入测试的名称,CPU/FPU tests测试CPU的整数/浮点运算能力,VRAM tests是显存带宽、特性测试部分,FILL RATE tests为填充率测试,POLYGON COUNT tests测试多边形的生成速度。选择上述测试场景,再设置好分辨率(Screen)后就可以Run Benchmark进行测试了。

  测试过程中,您可以在屏幕左下角看到实时显示的帧数。测试完毕后,GL Excess会自动生成HTML格式的测试结果报告,其中包括各个场景的最高、最低帧速和平均帧速,然后按照各个场景的速度计算显卡在各场景的OpenGL性能,最后再根据这几项成绩统计出总的测试分数,并与其它同分辨率、同色深下显卡的成绩进行比较。


  虽然GL Excess与专业测试程序还有明显的差距,但我们还是可以从中了解到显卡的一些主要OpenGL性能,初步体验OpenGL特效。

2.Vulpine GLMark

  Vulpine GmbH是一家为3DS Max、Maya等专业软件开发插件的公司,他们使用自己开发的Vulpine® Vision®引擎编写了这款OpenGL测试软件。


  这款测试软件的画面十分漂亮,一般的测试分为两个场景。第一个场景是由绿色的草地和蓝色的天空组成的广阔平原,第二个场景则是由一个虚拟的女主角,进行了一个科幻世界的探险,当然这个场景少不了整个画面的旋转等令人眼晕的测试。

  与GL Excess单薄的场景相比,GLMark的巨大测试场景才真正是对你的显卡OpenGL性能的严峻考验,它全面衡量显卡的填充率和三角形生成力,在“High Detail”设置下,第一个“island”测试场景最多要求达到超过15000个多边形/每帧!


  除了完全兼容标准OpenGL 1.2指令集外,软件还加入了OpenGL光照(OpenGL Lighting)、顶点阵列(Vertex Array Range)、材质压缩(Texture Compression)等技术的应用,当然,只有在你的显卡支持的情况下,它们才能被打开。软件要求的最低系统配置为:Intel兼容CPU、128M内存、硬件支持OpenGL 1.2的显示卡。

  测试完成后,自动生成结果,取平均帧数为最终结果。在fps/time页面中,有详细的帧数变化曲线,仔细分析一下,你不难从中找到最考验显卡OpenGL性能的画面。测试结果还可以保存到数据库(database)一栏中并和其它平台进行比较,只可惜不能提交结果到网上进行对比。

3.SPEC

  SPEC,标准性能评估团体(the Standard Performance Evaluation Corporation),是一家注册于美国加州的非盈利性公司,这个组织中立于任何厂商,尽力确保测试软件的公正。并且,据他们所提供的资料表明,他们提供的测试软件因其标准化架构,可以准确评析当前最新,最流行的计算机设备。

  其官方主页http://www.spec.org/上,提供包括独立的SPECviewperf 7.0专业OpenGL性能测试软件和模拟实际工作环境的SPECapc for Pro/ENGINEER 2001、3ds max 4.2、SolidWorks 2001、Solid Edge V11、Unigraphics V17等各种专业绘图软件的测试包免费下载,并且包括Microsoft Windows和
UNIX/Linux等版本。


  由于SPEC测试涉及的各类软件过于专业,一般的读者难以接受,这里我们简单介绍一下SPECviewperf。SPECviewperf是一个由C语言编写的openGL(开放源代码)的可执行程序,它是由IBM开发的,后来SGI、Digital以及其他的SPECopc项目开发人员对此作了升级和显著的贡献。SPECviewperf在benckmaking openGL执行方面提供了巨大的灵活性。

  SPECviewperf是一个采用命令行模式的基于C语言应用程序,最新发布的SPECviewperf 7具有6个子测试项目:DRV-08、DX-07、Light-05、proe-01、ugs-01和3dsmax-01。其中:DRV-08项目对应Intergraph的设计浏览软件DesignReview,测试对象是一个英国石油公司石油平台的场景,带有数量非常繁多的管道、设备以及结构模型。

  模型的数据容量为50多兆字节,多边形数量是36万个;DX-07项目对应IBM的数据可视化软件Data Explorer,测试的对象是3个螺旋状粒子轨迹,模型规模为30万个顶点(对系统的负荷甚至比DRV-08更大);Light-05项目对应Discreet Logic的高级渲染软件Lightscape Visualization System;proe-01项目对应Pro/Engineer;ugs-01项目对应Unigraphics;3dsmax-01项目对应的是3dsMax。

4.CineBench 2003

  Maxon在一般的用户眼中虽然并不是十分的出名,但是历年来它们针对专业图形设计推出了不少的测试方案,CineBench 2003是其最新的显卡测试程序,这款产品针对的是专业的OpenGL设计方案,并且可以支持Intel的HT超线程技术,甚至多达16路的CPU并行设备。在测试的项目上主要针对当前显卡和系统的测试,项目包括有Cinema 4D Shading测试/OpenGL硬件光源测试/OpenGL 软件光源测试等等。



结语:

  从上一篇和本篇的叙述中,我们可以详细地了解到,OpenGL很早就是一个专业的3D图形API,只不过它更多的应用于专业设计领域,如CAD和虚拟现实等。但是,OpenGL的发展之路却颇为不顺。由于和微软分道扬镳,在发展中缺乏微软的支持,同时OpenGL的发展却由几个厂商共同把持,这些厂商为了各自的利益(包括知识产权和竞争的关系)均不愿为OpenGL的发展提供技术,因而OpenGL的发展慢了下来。

  目前,随着DirectX的不断发展和完善,OpenGL的优势逐渐丧失,至今虽然已有3Dlabs提倡开发的2.0版本面世,在其中加入了很多类似于DirectX中可编程单元的设计,但推广却颇为坚难。由于微软已经退出了OpenGL,因此未来微软也不会再将DirectX中的新技术授给OpenGL,因此未来的OpenGL发展前景比较迷茫,如何发展只有待时间来验证。


二叉排序树算法:【上一篇】
用 C 解九连环:【下一篇】
【相关文章】
  • VC下配置openGL
  • 西洋跳棋盘opengl
  • OpenGL程序设计轻松入门
  • “计算机图形学之OpenGL”学习笔记(1)
  • 用Dev c++写OpenGl程式示例[原创]
  • OpenGL一个链接错误的排除
  • 【总结】VC中OpenGL的编程步骤
  • OpenGL 旋转笔记
  • 关于OpenGL光照的问题
  • OpenGL的视图变换
  • 【随机文章】
  • 什么是谍件?
  • 昨天装Vista碰到的问题以及解决方案
  • 深圳市ip 城域网组网方案(14)
  • 设计模式在EJB中的应用(4)
  • 界面_半透明窗口的实现
  • WEBLOGIC 下载地址
  • 深入Sand之--Message分析
  • VB调用C程序动态链接库的方法
  • 一个计算机高手的成长历程
  • .net的Membership,为什么就这么困难呢?
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.