搜索 社区服务 统计排行 帮助
  • 876阅读
  • 7回复

[转贴]DirectX 與 OpenGL

楼层直达
级别: 版主
注册时间:
2002-12-02
在线时间:
0小时
发帖:
3002
近來 DirectX 9 有更新因此趁勢轉貼 "DirectX發展回顧" 相關介紹
P.S. 因為繁體字在popgo有一些支援問題,特此轉成簡體

====================================

在DirectX诞生之初,业界已经有众多标准,其中有两个重要的标准:OpenGL和Glide,特别是非常成熟的OpenGL,它被用于图形、影像伺服器,制作电影、科教片等等,随着技术逐渐成熟,越来越普及,如当时大名鼎鼎的QuakeIII游戏就是关于这个标准的,而DirectX,很多硬体、主流游戏都不支持它,没有游戏、没有硬体,即使有再好的标准也是没有意义的,DirectX的魅力一直没有的到表现,但是它有微软的支持推广,它就有希望。

DirectX 1.0:为游戏而生

  DirectX出现是在Windows发怖后,Windows3.1的声音处理一次只能播放一个音,图形处理的能力也很弱,加之整个Windows3.1的操作系统还很脆弱,这个时候它更用不上,加上DirectX标准刚刚推出,很多硬体不支持,很多主流游戏也不支持,没有游戏、没有硬体,即使有再好的标准也是没有意义的,DirectX的魅力一直没有得到表现。但是随着Windows 95的发怖,稳定的视窗操作系统,出现了划时代的变化,DirectX的命运也由此改变。

Direct X 2.0:2D崛起3D雏形

  终于DirectX升级到了2.0,这个时候标志性的产物诞生了,2.0最大的改善是在Direct Draw,而且这个时代的传统游戏也出现了,很有代表意义的《红色警戒(RedAlert)》和《Diable(恐惧)》,红警的Windows版本和Diable都是在DirectX的标准上开发的。可惜的是,当时很多老显示卡由于不能完全支持DirectX2.0,而不能玩Diable。除了2D以外,DirectX2.0的D3D部分的雏形基本完成,由于当时3D游戏较少,很多都是关于DOS开发的。世嘉公司的VR战士的PC版本就是关于DirectX2.0开发完成的,虽然效果粗糙了一些,但Direct 3D魅力还是可以感受到的。

Direct X3.0:D3D发展壮大

  1997年微软发怖了最后一个版本的Windows95,同年发怖了DirectX 3.0,这时候DirectX的魅力被众多软硬体厂商看好,让D3D有了与OpenGL与Glide格斗的勇气。从这个版本开始,很多玩家知道了DirectX存在,也是这个时候开始出现了3D加速卡,如3DFX的Voodoo,Nvidia的Riva128,Intel的I740。

  这个时候3D游戏越来越多,但是当时的应用程式接头标准却有几个,主要的三个分别是专业的OpenGL接头,微软的D3D接头和3DFX的Glide接头。其中影响力最大的是3DFX的Glide,3DFX如日中天,Glide当然是大树底下好乘凉,游戏程序员使用它可以轻松容易的编出复杂、生动的3D效果,看好3DFX当然看好Glide。可是3DFX的自我封闭,不开放政策,导致它后来的破产被Nvidia收购,没有了3DFX支持Glide的影响力也从此走向衰弱,这是后话了。

DirectX 5.0:D3D日益强大

  微软似乎没有发怖4.0版本的DirectX,DirectX3.0发怖后没多久发怖了DirectX5.0。尽管5.0与3.0时间间隔不长,但它的意义可不简单。DirectX5.0的D3D效果可以与当时的OpenGL平分秋色。首次引入了雾化的支持,让3D游戏更有空间真实感,更能让玩家体验到真实的三维游戏环境;除此以外在游戏系统的相容性方面作了很大改善。

DirectX 6:D3D权威出现

  在DirectX5.0发怖不久第二代3D加速卡问世了,这一代3D加速卡借助DirectX6.0的技术争得不可开交。主要代表显示卡是Nvidia的Riva TNT,并连的VooDoo2,VooDoo3。到了这个时代,市场格局已经很清晰,是NVidia与3DFX的斗争。

  DirectX 6的3D效果更多了,而且借助硬体的强大效能,可以绘图出高解析度下的32位色的3D效果,这一点采用PCI总线技术的VOODOO系列败下阵来,它只能支持800x600下的16位色绘图,而Nvidia一开始就使用先进的AGP总线结构,高规格,新技术,每次发怖新品都给用户更高效能的享受,每次成功都为他奠定显示卡老大的基础。

DirectX 7:D3D权威确立

  DirectX7的发怖又一次把显示卡市场进行重新整合,DirectX7最大的特色就是支持T&L,中文名称是“坐标转换和光源”。3D游戏中的任何一个物体都有一个坐标,当此物体运动时,它的坐标发生变化,这指的就是坐标转换;3D游戏中除了场景+物体还需要灯光,没有灯光就没有3D物体的表现,无论是既时3D游戏还是3D影像绘图,加上灯光的3D绘图是最消耗资源的。

  在T&L问世之前,位置转换和灯光都需要CPU来计算,CPU速度越快,游戏表现越流畅。使用了T&L功能后,这两种效果的计算用显示卡的GPU(可以理解为显示卡的CPU)来计算,这样就可以把CPU从繁忙的劳动中解脱出来,让CPU做他该作的事情,比如逻辑运算、资料计算等等。换句话说,拥有T&L显示卡,使用DirectX7,即使没有高速的CPU,同样能能流畅的跑3D游戏。

  T&L成为当时人们关注的焦点。这时候第一块个支持T&L功能的显示卡是Nvidia的Geforce 256, 随后发怖的Geforce 2基本上可以说是Geforce 256的一个提速版本,除了速度快了很多以外,其他没有技术上的提升,同时ATI发怖的Radeon7500,一度成为支持T&L功能的效果最好的显示卡。DirectX7的发怖却成了VOODOO系列显示卡的噩耗,这时候3DFX也走到了尽头,被Nvidia收购,成为了显示卡中的历史,带给后人的是遗憾和叹息。

DirectX 8.0:D3D的疯狂

  2001年微软发怖了DirectX8,一场显示卡革命开始,它首次引入了“像素绘图”概念,同时具备像素绘图引擎(Pixel Shader)与顶点绘图引擎(Vertex Shader),反映在特效上就是动态光影效果。它发怖没多久,Madonion(就是今天的Futuremark)发怖了关于DirectX8的3Dmark2001显示卡测试软体,它支持DirectX8的全部特效。

  可是当时华丽的场景,只有极少数显示卡才能体验到,绝大部分显示卡都不能完成此软体的全部测试,其中的4个场景跑不出来。原因是,DirectX8整合了两大特技-VS (Vertex Shader)和PS(Pixel Shader)。通过vs和ps的绘图,可以很容易的营造出真实的水面动态波纹光影效果。主要代表显示卡是NVIDIA的Geforce 3,后期ATI的Radeon8500。DirectX8的发怖成了真正的第4代3D加速卡时代来临的标志。

DirectX 9.0 :让人耳目一新

  2002年底,微软发怖DirectX9.0,如果从参数上看,DirectX9相比DirectX8仅是提高了PS和VS的版本,目前版本都是2.0版本,似乎没有质的变化,其实不然,下面分别对Pixel Shader和Vertex Shader比较。

  首先,PS 2.0具备完全可编程的架构,能对纹理效果即时演算、动态纹理贴图,还不占用显示记忆体,理论上对材质贴图的解析度的精度提高无限多;另外PS1.4只能支持28个硬体指令,同时操作6个材质,而PS2.0却可以支持160个硬体指令,同时操作16个材质数量,新的高精度浮点资料规格可以使用多重纹理贴图,可操作的指令数可以任意长,电影层次的显示效果轻而易举的实现。

  其次,VS 2.0通过增加Vertex程序的灵活性,显著的提高了老版本(DirectX8)的VS效能,新的控制指令,可以用通用的程序替代以前专用的单独着色程序,效率提高许多倍;增加循环操作指令,减少工作时间,提高处理效率;增强着色指令个数,从128个提升到256个。

  另外,增加对浮点资料的处理功能,以前只能对整数进行处理,这样提高绘图精度,使最终处理的色彩格式达到电影等级。突破了以前限制PC图形图像品质在数学上的精度障碍,它的每条绘图流水线都升级为128位浮点颜色,让游戏程序设计师们更容易更轻松的创造出更漂亮的效果,让程序员编程更容易。

DirectX10:微软一统3D规格的王牌

DirectX10将完全放弃GPU当中的固定绘图模式,并且支持GPU行为的完全自由化,即GPU不在明确划分像素着色和顶点着色单元,并且支持多种工作,如2D/3D/视濒加速等等工作的自由分配。DirectX10将加入Shader4.0技术,并首度实现RayTracing光线追踪,将位移贴图Displacement作为标准之一。预计将在2005年推出。

====================================

個人讀後感想:
winamp 也沒 ver 4
看來4 這個數字東西方都不大愛用 ^^||

级别: 版主
注册时间:
2002-12-02
在线时间:
0小时
发帖:
3002
只看该作者 1楼 发表于: 2005-04-04
OpenGL简介......


OpenGL是个专业的3D程序接头,是一个功能强大,使用方便的底层3D图形库。OpenGL的前身是SGI公司为其图形工作站开发的IRIS GL。


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


虽然DirectX在家用市场全面领先,但在专业高端绘图领域,OpenGL是不能被取代的主角。

OpenGL是个与.硬体无关的软体接头,可以在不同的平台如Windows 95、Windows NT、Unix、Linux、MacOS、OS/2之间进行移植。

因此,支持OpenGL的软体具有很好的移植性,可以获得非常广泛的套用。由于OpenGL是3D图形的底层图形库,没有提供几何实体图元,不能直接用以描述场景。但是,通过一些转换程序,可以很方便地将AutoCAD、3DS等3D图形设计软体制作的DFX和3DS模型文件转换成OpenGL的顶点阵列。

在OpenGL的基础上还有Open Inventor、Cosmo3D、Optimizer等多种进阶图形库,适应不同套用。其中,Open Inventor套用最为广泛。


该软体是关于OpenGL面向对象的工具包,提供新增交互式3D图形应用程式的对象和方法,提供了预定义的对象和用于交互的事件处理模组,新增和编辑3D场景的进阶应用程式单元,有列印对像和用其它图形格式交换资料的能力。

OpenGL的发展一直处于一种较为迟缓的态势,每次版本的提高新增的技术很少,大多只是对其中部分做出修改和完善。1992年7月,SGI公司发怖了OpenGL的1.0版本,随后又与微软公司共同开发了Windows NT版本的OpenGL,从而使一些原来必须在高阶图形工作站上执行的大型3D图形处理软体也可以在微机上运用。

1995年OpenGL的1.1版本上市,该版本比1.0的效能有许多提高,并加入了一些新的功能。其中包括改进列印机支持,在增强元文件中包含OpenGL的使用,顶点阵列的新特性,提高顶点位置、法线、颜色、色彩指数、纹理坐标、多边形边缘标帜的传输速度,引入了新的纹理特性等等。OpenGL 1.5又新增了“OpenGL Shading Language”,该语言是“OpenGL 2.0”的底核,用于着色对像、顶点着色以及片断着色技术的增强功能。

OpenGL 2.0标准的主要制订者并非原来的SGI,而是逐渐在ARB中占据主动地位的3Dlabs。


2.0版本首先要做的是与旧版本之间的完整相容性,同时在顶点与像素及记忆体管理上与DirectX共同合作以维持均势。


OpenGL 2.0将由OpenGL 1.3的现有功能加上与之完全相容的新功能所组成(如图一)。借此可以对在ARB停滞不前时代各家推出的各种纠缠不清的增强指令集做一次彻底的精简。此外,硬体可编程能力的实现也提供了一个更好的方法以整合现有的增强指令。

目前,随着DirectX的不断发展和完善,OpenGL的优势逐渐丧失,至今虽然已有3Dlabs提倡开发的2.0版本面世,在其中加入了很多类似于DirectX中可编程单元的设计,但厂商的用户的认知程度并不高,未来的OpenGL发展前景迷茫。

级别: 版主
注册时间:
2002-12-02
在线时间:
0小时
发帖:
3002
只看该作者 2楼 发表于: 2005-04-04
图形API两强之争DirectX vs. Open GL


不论是哪一种档案类型的图形晶片,总会支持某个版本的DirectX或OpenGL API,而支持哪一个API版本几乎成为图形产品分代的标志。我们有必要先明确API的概念,API的全称是“Application Programming Interface”,意为应用程式接头,它是连接应用程式、操作系统和底层硬体的纽带。通俗点说,API就是软体函数的集合,这些预先编写好的函数可以对硬体进行直接控制,它最大的优点就是通用性。


3D显示卡刚刚诞生时,并不存在支持何种API的概念,如果某款游戏要执行在不同的显示卡平台上,开发商就必须为每个类别的显示卡编写一套程序,显然这意味着巨大的精力损耗,同时也无法获得令人满意的效果。


因此早期显示卡通常都有“游戏相容性”的说法,游戏产品同样也有“显示卡相容性”的概念,这有点类似于上世纪80年代之前的专用电脑时代:每个硬体平台都必须使用专用的软体、不同厂商之间软硬体不具通用性。

人们很早就意识到这个问题,对应的解决方案也被提出:制定一套操控硬体的图形函数库,图形晶片制造商和游戏开发商都严格遵循这套标准,这样,图形晶片制造商无需考虑什么游戏相容的问题,它只要根据函数库提供的功能来开发产品就可以了;而游戏开发商也不必为每款显示卡都编程、只要直接使用这些标准化的函数库即可实现广泛的相容性。这套函数库也就是所谓的图形API。

目前,我们可接触到的图形API可分为OpenGL和DirectX两大体系,前者是一项开放性的标准、主攻专业图形套用和3D游戏,由“OpenGL架构委员会”掌控,其成员包括业内各大厂商,目前主要推动标准发展的实际上司者是3Dlabs。



DirectX则是微软制定的API标准,除了图形API功能外,它还包含音濒API等功能,只不过其图形部分升级最快、也最为人所知。DirectX针对的主要是娱乐套用,目前最新的DirectX 9 API功能极为强劲,大部分新3D游戏都关于DirectX 9,而图形晶片制造商更是将它作为标准、竞相提供对DirectX 9的支持,是否支持DirectX 9也成为两代显示卡的分水岭。

对显示卡来说,API的重要性毋庸置疑,而未来每一次图形技术的重大进步都将与API紧密相关,关注OpenGL和DirectX这两种API无疑是非常必要的,从中我们可以了解它们的历史、现状和未来的发展,藉机了解整个图形技术的发展状况。

定位专业套用的OpenGL

OpenGL的英文全称是“Open Graphics Library”,意为“开放的图形程序接头”。OpenGL的历史可以追溯到上个世纪90年代初,标准诞生之后它一直占据主导地位。


而微软的DirectX出现的时间比OpenGL晚得多、功能也不及OpenGL,只不过最近几年OpenGL因发展迟缓才被DirectX追上而已。尽管如此,OpenGL仍然是高端图形API的代名词,制定中的OpenGL 2.0以强劲的功能特性为业界瞩目,而显示卡制造商对OpenGL API的重视程度并未缩减,在可预见的将来,OpenGL还将引领专业图形和3D游戏的风潮。

OpenGL发展历程

上个世纪90年代初,SGI公司出于制造图形工作站产品的需要、开发出名为“IRISGL”的图形API并成为工业标准。在当时,IRISGL的功能可谓十分强大,但它的可移植性却相当之差。有鉴于此,SGI决定在IRISGL基础上开发出一种功能类似、但可移植性更好的图形API-这就是OpenGL。OpenGL被打造为开放性标准,任何软硬体厂商均可自由使用,这让它受到广泛的欢迎。

1992年7月,SGI正式发怖OpenGL 1.0标准。OpenGL 1.0完全实现了SGI的预期设计目标:功能强大、移植性良好并能自由使用。随后,SGI发起成立了“OpenGL架构委员会”(OpenGL Architecture Review Board,简称ARB)来共同管理和推广这项先进的标准,OpenGL后继标准的制定权也逐渐转移给ARB组织。




在ARB内部,产生新标准的程序非常民主化:各成员以投票的方式来决定新版OpenGL标准应具有的功能特性,并据投票结果制作正式标准我的文件,各软硬体厂商再根据这份标准我的文件的内容在自己的系统上实现;而所有的OpenGL版本都必须通过我的文件规定的全部测试项目方能生效。ARB组织的成员都非泛泛之辈,目前其核心成员包括SGI、3Dlabs、Intel、IBM、nVIDIA、ATi、Microsoft、Apple等业界领袖。

OpenGL 1.0获得意料之中的巨大成功,专业图形领域唯它马首是瞻。看到这一点,微软甚为心动,当时它正在开发的Windows NT系统如果获得OpenGL的支持无疑会如虎添翼;而SGI也希望能够让OpenGL广为流传。


于是SGI和微软进行首次合作、联手将OpenGL 1.0移植到Windows NT平台。这项工作自然没有什么悬念,适用于NT的OpenGL 1.0顺利推出,这使得Windows NT系统成为图形工作站的又一个可选操作平台,很多执行于UNIX之下的专业图形软体也逐渐被移植,微软和SGI都如愿以偿。

1995年,SGI推出了更为完善的OpenGL 1.1版本。OpenGL 1.1的效能比1.0版提高甚多,同时还加入了诸如顶点阵列、顶点位置、新纹理等新特性,并增强了元文件对OpenGL的使用等等。OpenGL 1.1同样获得了成功,而它也有对应的Windows NT版本。

1997年,受3D显示卡的刺激,Windows 95平台下开始涌现出大量的3D游戏,可微软自己的Direct 3D 3.0图形接头极为糟糕,idSoftware公司的顶尖程序员John Carmack(Quake之父)嘲讽它简直就是“支离破碎的API”。


很自然,强大的OpenGL成为取代DirectX的最佳选项。


但问题是微软虽然在NT系统中引入了OpenGL,但其同时代的Windows 95却无法支持OpenGL,面对这种局面,idSoftware公司联合其它游戏开发商强烈要求微软在Windows 95中也引入OpenGL API,微软也很了解自己的“Direct 3D 3.0”是什么货色、它很快就接受了这项建议。


而后,id公司开发出关于OpenGL的Quake2,想必有过3年以上游戏玩龄的读者都会记得Quake2那无以伦比的3D场景和激烈刺激的竞技画面。

而OpenGL API因此立下大功,几乎所有游戏开发商都转向OpenGL,微软后来也不得不顺应潮流、在Windows95 OSR2版及Windows 98中正式支持OpenGL,相关游戏开始大量涌现,而AutoCAD、3DS MAX、Maya等许多专业3D设计软体也被移植到普通PC平台。



今天,预算有限的设计者可以在PC中执行这些软体,莫不拜OpenGL所赐。

1999年,OpenGL再度发生变革,但这次它遇到的是发展史上的重大危机:SGI决定与微软联手开发下一代图形接头--Ferihant。Ferihant套用于Windows系统中,作为OpenGL和DirectX的取代者。为此,Ferihant将包含DirectX与OpenGL各自的优点,并加入场景贴图之类的进阶功能。



由于有了Ferihant,SGI停止了原先的Windows版OpenGL开发计划,外界对此表示赞赏。然而Ferihant计划没进行多久,双方的合作就出现裂痕,微软不积极合作,光想把SGI的图形技术并入DirectX的做法令SGI非常不满,SGI随后宣布中止合作并撤回所有的开发人员,Ferihant遂告夭折。在这之后,OpenGL和DirectX似乎互不相干,继续在PC平台上发展,但状况对比鲜明:DirectX从此突飞猛进,而OpenGL却长期原地徘徊。

2001年8月,ARB发怖OpenGL 1.3规范,它增加了立方纹理贴图、纹理环境、多重采样、纹理框架压缩等增强指令,但是改工作度非常有限;2002年7月,ARB正式发怖OpenGL 1.4,它也只加入了深度纹理/阴影纹理、顶点设计框架、自动纹理贴图等简单的功能,越来越落后于图形硬体技术的飞速发展。而此期间DirectX突飞猛进,DirectX 8 API更是正式成为娱乐显示卡的标准,id公司所形容的“支离破碎的DirectX”早已非吴下阿蒙,大量的3D游戏转向了DirectX体系。

OpenGL落后于时代并非ARB组织技术不佳,根本症结在于确定OpenGL标准的民主机制:各成员通过投票表决。在实际操作中,这些成员往往关于自身利益而产生意见分歧,为了照顾多数人的利益OpenGL不得不变得复杂臃肿、开发进度缓慢。我们可以看到,在OpenGL 1.0之后的各个版本只是进行一些增强指令集的升级,而它对显示卡硬体中不断涌现出的先进特性熟视无睹,同为ARB成员之一的微软对此抱怨不已,后来它干脆彻底抛开OpenGL、将全部精力投到自家的DirectX。大获成功的DirectX 7、DirectX 8就是在此种背景下出现的。

2003年的7月,ARB公布OpenGL 1.5规范--这也是迄今为止最新的OpenGL版本。OpenGL 1.5内包含ARB制定的“正式增强规格绘制语言”(OpenGL Shading Language v1.0),该语言用于着色对像、顶点着色、片断着色等增强功能,同时也将作为下一代OpenGL 2.0版本的内核。OpenGL 1.5的变化还增加了顶点缓冲对像(可提高透视效能)、非乘方纹理(可提高纹理记忆体的使用效率)以及阴影功能、隐蔽查询功能等等。

OpenGL 2.0:超强API现身

从ARB的惯例来看,划时代的OpenGL 2.0很有可能在今年7到8月份现身。需要提及一点,OpenGL 2.0的主导者不再是SGI(SGI忙于公司内部调整无暇他顾)、而是著名的专业显示卡提供商的3Dlabs。为了一举改变OpenGL落后的状况,3Dlabs协同其他ARB成员制定了雄心勃勃的OpenGL 2.0开发计划。



据悉,OpenGL 2.0将在OpenGL 1.3基础上进行修改扩充、但它将有下面五个方面的重大改进:

1复杂的核心被彻底精简;

2完全的硬体可编程能力;

3改进的记忆体管理机制、支持进阶像素处理;

4增强至数位媒体领域,使之跨越高端图形和多媒体范畴;


5支持嵌入式图形套用。

为了在获得强大功能的同时保持理想的相容性,OpenGL 2.0将经历以下两个发展阶段:第一个阶段注重相容能力和平滑过渡,为此,OpenGL 2.0核心将在精简后的OpenGL 1.3功能模组的基础上加上可完全相容的新功能共同组成(图1),这种做法在满足相容性的同时,还可将原有OpenGL中数量众多、且相互纠缠不清的增强指令进行彻底精简。

第一阶段的工作只是为了过渡,而第二阶段才是OpenGL 2.0的真正成熟期。此时,ARB将合成出一个“纯OpenGL 2.0”内核,纯内核将包含更多新增加的“精简型API函数”,这些函数具有完全的可编程特性、结构简单高效、功能强大且套用灵活。除了完成这项工作外,ARB组织还得指导开发商抛弃繁琐的OpenGL 1.X、转用更具弹性的“纯OpenGL 2.0”。

到这里,非常有必要介绍所谓的“纯OpenGL 2.0”有何不同之处,简单点说,这个“纯OpenGL 2.0”主要由新加入的功能和OpenGL 1.3的部分功能共同构成,它主要包含了完全可编程能力、改进的记忆体管理机制和OpenML数位媒体功能等至关重要的新特性。

DirectX 9 API中具有完备的可编程能力,这项特性最大的好处就是灵活性,游戏开发商可根据自身需要灵活地制作出自己想要的图形效果:
更高精度、更快速度还是在两者间进行折衷。显示卡厂商对DirectX 9的积极支持很大程度上就是因为这项可编程特性。现在,OpenGL 2.0也将具有完整的可编程能力,而它提供的功能超过了DirectX 9。OpenGL 2.0的可编程功能包括可编程顶点处理、可编程片段处理和可编程图像格式三种:

● 可编程顶点处理:取代坐标转换、材质应用程式及光照运算,允许对个别顶点作随机运算;

● 可编程片段处理:取代材质存取、材质套用及雾化功能,允许个别片段的随机运算;


● 可编程图像格式:取代固定格式封装和解封装运算,并允许OpenGL在传送或接收像素资料时、将档案类型与格式进行任意组合。

OpenGL 2.0对OpenGL 1.X僵化的记忆体管理机制进行了改进:OpenGL 1.X的记忆体管理方式相当于黑箱作业,记忆体中的资料可被自动处理,应用程式无需了解运算结果和运算要花的时间,也无需控制储存于空间分配及对象的存放,这种设计在当初是非常成功的,它将程序员从繁琐的记忆体控制工作中解放出来。


但它的确无法有效控制对象的复制、搬移、移除或封装程序,记忆体的利用效率变得颇为低下,成为显示卡效能的一大制约瓶颈。


而OpenGL 2.0直接为这些资料对像建立了定位和连接的接头,同时充分利用顶点阵列、图像、材质、着色、显示清单及像素缓冲区来对其作精确控制,此外OpenGL 2.0还采用了压缩技术来减少资料的移动量。这些措施使OpenGL 2.0获得了高效管理记忆体的能力,同时也保留了简单易用的优点。

OpenML是一个针对数位视濒、音濒、动画等多媒体功能的应用程式接头,它原本由名为“Khronos Group”的机构掌管--有趣的是,这个机构的核心成员包含SGI、3Dlabs、Sun、Intel、Discreet、Evans、Sutherland、Pinnacle和RealViz。两相对比,不难发现Khronos Group组织和ARB组织的成员有许多重合,将OpenML整合入OpenGL 2.0自然是顺理成章。


而这也使得OpenGL 2.0成为集高端图形、数位媒体于一身的超级应用程式接头。这还不是全部,嵌入式设备对图形套用的需求逐渐越来越为人关注,未来的掌上电脑、PDA甚至是手机都有可能使用3D图形,而这些领域尚是一片空白,显然极具发展潜力。



OpenGL 2.0将增加嵌入式图形功能,而ATI近日推出的面向下一代手机、PDA和掌上电脑的“IMAGEON 2300”图像处理器就是采用该项API技术,相信OpenGL 2.0很有机会成为该领域的主宰。

专注娱乐套用的DirectX

DirectX是微软独自开发的API,很多人认为它只是一个专门针对显示卡的图形API,其实不然。DirectX的服务范围涵盖图形、输入/输出、音濒、显示、多媒体等等许多领域,元件包括Direct Graphics(Direct 3D+Direct Draw)、Direct Input、Direct Play、Direct Sound、Direct Show、Direct Setup、Direct Media Objects等等,只是因图形方面的套用最为重要而为人熟知,微软近些年对DirectX作版本升级也主要着眼于图形领域。

DirectX的发展之路并不顺利,在相当长的时间内都为软硬体厂商所排斥,但在DirectX 7.0之后,它在人们心目中的形象逐渐被扭转,而DirectX 8.0的优异表现令它具备了超越OpenGL的实力,目前的DirectX 9更一举成为PC领域3D图形API的主宰者。在介绍DirectX 9之前,我们有必要回顾一下DirectX的发展历史。

DirectX发展历程

1995年,微软的第一个API--DirectX 1发怖。这个API极其简单,它仅提供了对2D图形和基本音濒功能的支持,主要是为了弥补Windows 95对图形管理的不足。




这完全可以理解,当时的在PC中还不存在3D游戏,也没有什么3D显示卡,对于面向商业用户和家庭的PC而言3D功能也不是必要的。可想而知,DirectX 1几乎毫无声息,采不采用根本无关紧要。

1996年,DirectX的第二个版本DirectX 2推出。它引入了Direct3D技术、需要执行缓冲区,看起来与DirectX 1有了巨大的变化。DirectX 2采用平滑模拟和RGB模拟两种方式来加速3D图像产生;同时,原有的2D部分得到了有效增强、加入了2D动态效果,并更正了原有的一些bug。此外,DirectX 2的用户设定程序也变得更加友好。



整个DirectX的设计架构基本确定,它也是如今的DirectX的雏形。Trident、S3公司开始支持DirectX 2,代表游戏是《红色警报》和《指令与征服》。

同年,DirectX 3发怖,不过它只是DirectX 2的简单改进而已,对DirectSound和DirectPlay等功能作了些变动,总体来说还属于功能简单的DirectX 2技术体系。


微软还发怖过DirectX 3.0a版本,它则是继续修正错误的升级版。DirectX 3还是有一定的拥戴者,nVIDIA Riva128和Intel的i740都支持它,代表游戏包括《摩托英豪》和《极品飞车3》。

1997年,微软发怖DirectX 5--DirectX 4被直接跳过。DirectX 5在技术上有了明显提高,微软对Direct 3D作了彻底修改:加入雾化效果、Alpha混合等特效,大大增强3D游戏的真实感;加入S3的纹理压缩技术,有效提高了显示记忆体带宽的利用率。



此外,DirectX 5在音濒、游戏控制方面均做了大量的改进,游戏开放商的移植工作也变得更简单,DirectX 5可以说是DirectX API技术成熟的标志。nVIDIA RivaTNT支持DirectX 5,虽然nVIDIA当时尚未成为图形业的霸主,但RivaTNT已展现出强劲的实力,DirectX 5规格应该说立下了一定功劳,而它的代表游戏就是《古墓丽影3》。

这个时候,OpenGL已经在《Quake2》之类的3D游戏中发挥威力,许多3D游戏都选项了Quake2引擎,至少在纯3D领域,OpenGL的影响力远甚于DirectX 5。

1998年,DirectX 6推出。这个时候,DirectX已被许多厂商认可并成为2D游戏和部分3D游戏的标准API。DirectX 6的进步同样显而易见:可最佳化3D图像品质的双线性过滤、三线性过滤技术被引入,实现了多纹理、顶点缓冲和凸凹映射等功能。

nVIDIA的TNT2继续对它提供支持,代表游戏则是《极品飞车5》和《CS》。


但OpenGL的影响力仍大过DirectX 6,这很大程度上是受idSoftware的Quake Ⅲ游戏影响,该款游戏只能执行于OpenGL模式下。此外,关于Quake Ⅱ引擎的Counter Strike游戏火爆一时并延续至今,这些游戏在OpenGL模式下具有更理想的效能表现。这个时候,OpenGL还被广泛认为优于DirectX 。

1999年,DirectX 7发怖--它也是DirectX API发展史上的转折点。这个时候,nVIDIA已经取代3dfx成为图形领域新霸主,它开创的GPU概念更是将对手远远抛到了后头。GPU意即“图形处理器”,专门负责3D游戏中物体的几何转换和光源处理,此前这类工作是由CPU来完成的,GPU的概念堪称图形技术的里程碑:一方面,显示卡摆脱了CPU的限制、可以自主决定系统的图形效能;另一方面,CPU也从繁重的劳动中获得解放、可将更多的运算力用于其他工作的处理。


第一枚GPU图形晶片是nVIDIA的GeForce,微软及时在DirectX 7中对其提供了支持:加入硬体几何转换与光源处理技术(即所谓的“硬体T&L”)以及贴图的矩阵混合,自然,它获得更广的支持度。包括后来ATI的Radeon显示卡也支持DirectX 7。

真正的质变发生在DirectX 8身上。DirectX 8于2000年推出,同DirectX 7相比,DirectX 8没有硬体T&L的概念,取而代之的是具有可编程能力的Vertex Shader(顶点着色引擎)和Pixel Shader(像素着色引擎)。相比机械式的硬体T&L,Vertex Shader和Pixel Shader可提供更优异的效能,例如新增出水波纹的动态效果、衣物的褶皱及光线变化效果,这在以往根本不可能实现。


此外,DirectX 8在视濒、音濒等方面也有许多重要的改进,综合实力全盘超越OpenGL,nVIDIA和ATI都将它作为标准的图形API加以支持,OpenGL则退缩为它们的第二选项,对游戏开发商而言也是如此。

2001年,微软发怖DirectX 8的升级版:DirectX 8.1,它将Pixel Shader的版本提高到1.4,同样支持者趋之若鹜,直到今天DirectX 8.1还是中低端游戏显示卡的标准API,当前大量的3D游戏和几乎所有的2D游戏都对它提供支持,当然,今后它的地位会慢慢被DirectX 9所接替。

DirectX 9介绍

DirectX 9是当前无可争议的新一代图形API标准,nVIDIA、ATI、XGI等图形厂商都以它作为产品开发的指导方向,新一代游戏也积极提供支持。


DirectX 9构建于DirectX 8.0/8.1,但它并不是功能上的小修小补,而是带来了许多革命性的新特性。


这些新特性主要包括以下几个方面:将顶点着色引擎、像素着色引擎升级至2.0版本;浮点色彩处理的精度提高到128位(DirectX 8.0/8.1为32位);引入硬体位移贴图的概念;支持40位真彩色;增加Z伽玛修正和提供对剪裁平面技术的支持等等,下面我们将详细向大家介绍这些新特性。

可编程的顶点着色引擎(Vertex Shader)和像素着色引擎(Pixel Shader)是DirectX 8引入的特性,它给游戏开发商提供了更高的自由度和更容易实现的编程机制。对显示卡而言,这是一个极富意义的重大进步。


不过,作为一项新功能,初期版本的顶点着色引擎和像素着色引擎都显得不够成熟,所以微软在1.0版之后迅速推出1.1、1.3、1.4等多个版本,后续版本在功能上有所增强并修正了一些bug。



而DirectX 9将二者同时提升至2.0版本,顶点着色引擎2.0的主要改进是引入流程控制、增加条件跳转、 循环和子程序等执行规则,最大指令数提高到1024条(DirectX 8.0/8.1为128条指令);而像素着色引擎2.0虽未能支持流程控制功能,但它的最大指令数也提升至160条。这些措施都使得显示卡的可编程功能变得更加强壮。

128位浮点色彩处理也是DirectX 9最重要的改进之一,该项特效能有效减小3D画面产生程序中难以避免的误差,使得最终产生的3D画面保持极高的色彩逼真度。


那么,DirectX 9如何实现这一点呢?要回答这个问题,我们就应该从PC的色彩精度谈起。

众所周知,目前PC的色彩精度为32位,其中有8位Alpha值用于控制透明效果,而剩下的24位才真正用于物理色彩的显示。因PC关于RGB(红绿蓝)三原色体系,24位由红、绿、蓝三个色彩通道分享、每通道8位色,因此PC实际上可以显示出16.7 M种物理色彩。

如果单单用于静态画面显示,这个数位应该是足够用的,但在3D画面产生的动态环境中就不同了。

每个色彩通道为8位精度、色彩的强度只有256种变化;而3D画面产生往往需要几十个光照计算和纹理计算,期间涉及到大量色彩值的转换处理,如果这些中间值只能使用256种色彩状态来储存,误差将不可避免;经过几十步计算之后,原本可忽略的色彩误差会被明显放大,导致荧幕上产生的3D画面出现严重的色彩失真。

DirectX 9引入的128位浮点色彩处理机制可以很好地解决这个问题:
每个色彩通道可获得32位精度,颜色总数达到232种(超过4亿种),误差值可被降低到很低的水准。

从这个意义上说,所有符合DirectX 9规格的显示卡在配合支持DirectX 9的3D游戏时可获得更真实的色彩表现,而DirectX 8.0/8.1平台就无法实现这一点。


不过,128位色彩精度意味着要处理的资料量剧增,这就对图形晶片的能力提出了更高的要求,幸亏显示卡硬体的超快发展速度提供了足够的保障。

DirectX 9的静态色彩显示机制同样发生了改变:32位色、每色彩通道8位精度是业界基准,对普通办公娱乐而言足够应付,但在专业图形处理场合,每通道区区8位精度是绝对不够的,微软一直期望DirectX向专业套用进军,提高色彩精度势在必行。

根据这一要求,DirectX 9引入40位真彩色机制:每个色彩通道和Alpha通道的精度都提高到10位,可显示的物理色彩总数达到30位、也就是超过10亿种色彩!

我们可以从图中清楚看到40位色与32位色的区别:40位色显示的灰度过渡非常平滑、近乎是无缝进行的;而32位色的灰度过渡存在明显的间隔。

要真正在实用中实现40位色显示,除了需要支持DirectX 9 的显示卡外,还需要操作系统和显示器的支持。操作系统方面估计得等到微软的Longhorn发怖;至于显示器就更成问题:CRT对色彩数没有限制,但它目前已逐步被淘汰,现有的LCD显示器只能显示出18位色。


幸好,微软和夏普联合进行新一代LCD显示器的研发,估计2005年我们就可看到支持40位色的高品质LCD显示器出现。

环境凹凸贴图是Matrox当年在G400引入的技术,它通过单纯的模型贴图使3D场景变得更加真实。现在DirectX 9引入了更先进的位移贴图(Displacement Mapping)功能,它的开发者仍然是Matrox,在Parhelia-512(幻日)显示卡中得以实现。和凹凸贴图相比,位移贴图实现起来更复杂:它使用一张基本纹理、一张光照纹理以及一张最为重要的高程纹理来完成模型外观的修饰。


即便所使用的模型只是普通的平面,在经过位移贴图的精细处理之后,这个模型就可以演变产生一个逼真复杂的地貌环境,对需要绘图复杂场景的3D游戏而言,这项功能无疑是如虎添翼。微软为DirectX 9设定了两个版本的位移贴图功能:


一个是为多数厂商选用、名为“预计算/预描绘”的标准版本,其特点是处理速度快、但无法进行自适应纹理镶嵌和细节处理技术(Levels-of-Detail,LoD),在苛求精美画面的场合难以发挥效用;另一个则是供Matrox显示卡独家使用的采样位移贴图(这估计是微软对Matrox在位移贴图中所作贡献的一点回馈),它可支持自适应纹理镶嵌和细节处理技术,在地形产生中表现最为出色,而且使用的方法比较简单,但其缺陷是速度比较慢。


因Matrox的Parhelia显示卡基本上在娱乐市场完全失败,采样位移贴图也形同虚设,或许微软会将它取代精度不佳的标准版本也说不定。

在3D物体的表面处理方面,硬体位移贴图的效果要比环境凹凸贴图更为精美,我们不妨用下面这个例子来说明它与凹凸贴图的差别:

在图的三个球体中,第一个是没有经过处理的原始图像;

第二个是经过凹凸贴图处理的球体,它的表面能表现出一定的立体感,不过还不是太明显;而第三幅则是经过DirectX 9的硬体位移贴图产生的图形,其表面贴图的立体感相当强烈、极具真实感。

DirectX 9引入的伽马修正功能着眼于2D/3D场景的色彩调节,以获得良好的视觉感受。


虽然我们在Photoshop等专业作图软体中就可获得伽马修正功能,但这只涉及对2D图像的色彩调节,只有那些昂贵的专业级图形工作站才可能拥有针对3D程序的“Z伽马修正”功能。而DirectX 9改变了这一切:未来的2D/3D程序均可支持伽马修正,从而提供更完美的视觉效果。

DirectX 9的平面剪裁技术则是通过切除不必要的图形运算来提高效能,其实这一点都不新鲜,在STM Kyro显示卡家族中我们就可以看到类似的隐面去除(HSR)技术,二者都是将荧幕不可见的部分“剪掉”,让显示卡不用处理这部分的内容,以此减轻显示卡计算量并提高效能。



不过,与隐面去除有所差别:DirectX 9的平面剪裁不仅可用于3D处理,还适用于多视窗开启或视濒内容剪辑,不过这看起来没什么太大作用,毕竟2D环境基本不耗费多少硬体资源。

未来:OpenGL、DirectX并行发展

作为两大图形API阵营,OpenGL和DirectX在各自的发展中形成鲜明的特点:即便处于目前的低潮状态,OpenGL仍然牢牢把持着专业绘图领域,而DirectX在此毫无竞争力,功能更强大的OpenGL 2.0无疑将继续保持垄断性地位。但在3D游戏领域,OpenGL的确是处于弱势地位,但它也没有丢光所有的市场,若OpenGL 2.0表现理想,重新赢得广泛支持也并不困难。




而DirectX 9已经牢牢在游戏中站稳了脚跟,凭借领先的功能特性和微软在操作系统方面的先天优势,DirectX 9及未来的DirectX 10理所当然会成为多数游戏开发商的首选,它的套用范围除了3D游戏还涵盖2D游戏领域,这正是OpenGL所欠缺的。

其实,OpenGL和DirectX并不是完全对立的,二者存在一定的竞争又需要进行相互协作, ARB公布OpenGL 2.0的改进和开发计划后,微软表现出异乎寻常的兴趣,而ARB的各个成员也在3Dlabs的带领下抛开分歧进行紧密的合作;各成员表示未来将专注于实现OpenGL 2.0的开发目标,而不再会为了自身利益让OpenGL变得一团糟,就连一向针锋相对的nVIDIA与ATI也致力于彼此技术的整合。ARB集体宣誓:“所有送至OpenGL的创意想法,一经采用,便免费公开给所有人使用。”相信这种开放性的做法有助于OpenGL在技术上继续保持领先。至于DirectX体系,微软一直没有放弃进入高端的想法,但它注重的还是PC娱乐平台,在下一代DirectX版本中,我们可以看到更多更先进的功能特性,相信这也将继续成为图形业发展的指导方向--当然这只是针对PC而言。



API规格与显示卡的效能

支持何种API是显示卡分代的标志,这在DirectX规格上体现得极为明显。许多用户往往认为支持DirectX高版本的显示卡可以提供更理想的效能,其实这是一个误区。


我们知道,API只是函数的集合,它自身不决定任何东西,只是充当游戏和显示卡硬体之间的媒介、让游戏和显示卡都不需要为相容性问题而烦恼。


而不同版本API的区别在于函数库的差异,高版本的API总是提供数量更多、功能更强的函数,游戏开发商利用这些函数可以创造出各种各样的特效。


如果图形晶片可对此API提供支持,那也就意味着关于该图形晶片的显示卡可以将这些游戏特效完美展现出来,无法支持该API的图形晶片将无法识别游戏特效使用的函数库,自然就无法正常执行。

但API自身与图形晶片的硬体效能没有任何关系,图形晶片的效能取决于其核心设计和执行频率,API只是提供功能方面的支持而已,所以认为具备高版本API支持的显示卡一定比采纳低版本API的显示卡速度快是没有道理的,举个例子,支持DirectX 8的GeForce4 Ti4600肯定比支持DirectX 9 API的GeForce FX5200速度更快,当然,我们可以说高版本API支持总是比较“好”的,因为它可以支持更多的新游戏。


3dfx Glide的崛起与衰落

3dfx是电脑3D时代的开创者,1995年11月,3dfx推出Voodoo加速卡。凭借令人惊叹的3D效果,Voodoo得以风靡市场、最终成为不朽的神话。


3dfx迅速发展壮大并在1997年达到最巅峰。为了配合自己的硬体技术,3dfx推出专门针对Voodoo系列的API:Glide。Glide提供了完整的三维图形开发环境,开发者可以使用其最高层的API新增和操作各种复杂的三维对象。


Glide支持立即模式和驻停留模式,前者与OpenGL类似、需要向图形晶片提供画图指令,优点是可提供精细的控制;后者则采纳面向对象的编程结构,场景几何资料被储存于到一个对像资料库中,程序员无需掌握三维对像内部结构的知识就可以通过对像使用来进行各种各样复杂的操作、具有优良的易用性。



此外,Glide支持Voodoo提供的一系列先进硬体特性,例如镜面高光、阿尔法透明处理、动画贴图、反锯齿等等。由于功能强大、稳定性和易用性都相当出众,Glide被认为是当时最理想的3D图形API,加上3dfx在图形行业的霸主地位,各游戏开发商顺利成章地选项Glide来开发产品,所以在当时,几乎所有的3D游戏都是以Glide作为基准,而它也确实不负众望。

不过,Glide有一个致命的缺陷:它是3dfx专内容的图形接头,其他图形晶片制造商无法对其提供支持,导致nVIDIA、Matrox、S3等竞争对手选项了微软的DirectX API。虽然一开始DirectX功能简单、设计糟糕,但在3.0版之后,DirectX逐渐变得成熟,越来越多游戏开始对其提供支持。


由于人所共知的原因,3dfx在1997年之后迅速没落,专用的Glide API已经对游戏开发商毫无吸引力,这个时候,Glide逐渐被抛弃、慢慢消失在人们的视野中。1999年12月,困境中的3dfx终于决定将Glide完全公开,但这个时候已经没有多少人对它感兴趣了,强大的OpenGL和成熟中的DirectX成为游戏开发商的新宠。

级别: 工作组
注册时间:
2003-11-07
在线时间:
1小时
发帖:
7032
只看该作者 3楼 发表于: 2005-04-04
Re: [转贴]DirectX 與 OpenGL
引用
最初由 weilai 发布

個人讀後感想:
winamp 也沒 ver 4
看來4 這個數字東西方都不大愛用 ^^||


莫非这些东西的开发团队里大多是亚洲人?

青空が眩しい 君がいる風景は
幸せのオーラ 溢れ出すの とまらないよ
駅前の噴水 虹を作っているよ
君を待つ時間さえも かけがえない プレシャスな時

=========================

FANSUB的历史,又翻过了新的一页
级别: 版主
注册时间:
2002-12-02
在线时间:
0小时
发帖:
3002
只看该作者 4楼 发表于: 2005-04-04
Re: Re: [转贴]DirectX 與 OpenGL
引用
最初由 wolfsoft 发布


莫非这些东西的开发团队里大多是亚洲人?


讓我又想到
windows的版本編號
也是沒有 "4"

级别: 新手上路
注册时间:
2005-03-16
在线时间:
0小时
发帖:
84
只看该作者 5楼 发表于: 2005-04-04
windows NT4.......
级别: 骑士
注册时间:
2004-08-24
在线时间:
0小时
发帖:
852
只看该作者 6楼 发表于: 2005-04-04
今天还是4月4号哩,难道不宜发贴?

默默地抖着潜了

[Hammer]azsd

弱字节3千,唔取1k
级别: 版主
注册时间:
2001-11-21
在线时间:
583小时
发帖:
54112
只看该作者 7楼 发表于: 2005-04-04
文章有些资料不够新...有些也没更新...
DirectX 9部分说得不全...DirectX 10应该不会出现了
根据MS官方的资料,今年应该没有新的DX出现(去年那个DX蓝图好像都不是真的...)
longhorn开始支持WGF 1.0 (Windows Graphics Foundation)(视窗图形基础)
这是DirectX9的后续产品,通常被称为DirectX Next或是DirectX 9.L
WGF将成为Windows Longhorn操作系统的标准
而传说中的R520号称支持WGF,不知道是不是真的^_^