比较DirectX和OpenGL的区别(比较详细)
⽐较DirectX和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发展前景迷茫。
Open GL现状
Open GL仍然是唯⼀能够取代微软对3D图形技术的完全控制的API。它仍然具有⼀定的⽣命⼒,但是Silicon Graphics已经不再以任何让微软不悦的⽅式推⼴Open GL,因⽽它存在较⾼的风险。游戏开发⼈员是⼀个有着独⽴思想的体,很多重要的开发⼈员⽬前仍然在使⽤Open GL。因此,硬件开发商正在设法加强对它的⽀持。Direct3D⽬前还不能⽀持⾼端的图形设备和专业应⽤; Open GL在这些领域占据着统治地位。最后,开放源码社区(尤其是Mesa项⽬)⼀直致⼒于为任何类型的计算机(⽆论它们是否使⽤微软的操作系统)提供Open GL⽀持。
⾼级功能
OpenGL被设计为只有输出的,所以它只提供渲染功能。核⼼API没有窗⼝系统、⾳频、打印、键盘/⿏标或其它输⼊设备的概念。虽然这⼀开始看起来像是⼀种限制,但它允许进⾏渲染的代码完全独⽴于他运⾏的操作系统,允许跨平台开发。然⽽,有些整合于原⽣窗⼝系统的东西需要允许和宿主系统交互。这通过下列附加API实现:
经历 作文* GLX - X11(包括透明的⽹络)
* WGL - Microsoft Windows
另外,GLUT库能够以可移植的⽅式提供基本的窗⼝功能。
DirectX
DirectX是⼀种应⽤程序接⼝(API),它可让以windows为平台的游戏或多媒体程序获得更⾼的执⾏效率,加强3d图形和声⾳效果,并提供设计⼈员⼀个共同的硬件驱动标准,让游戏开发者不必为每⼀品牌的硬件来写不同的驱动程序,也降低⽤户安装及设置硬件的复杂度。这样说是不是有点不太明⽩,其实从字⾯意义上说,Direct就是直接的意思,⽽后边的X则代表了很多的意思,从这⼀点上我们就可以看出DirectX的出现就是为了为众多软件提供直接服务的。
举个例⼦吧,⾻灰级玩家(玩游戏⽐较长的)以前在DOS下玩游戏时,可不像我们现在,安装上就可以玩了,他们往往⾸先要先设置声卡的品牌和型号,然后还要设置IRQ(中断)、I/O(输⼊于输出)、DMA(存取模式),如果哪项设置的不对,那么游戏声⾳就发不出来。这部分的设置不仅让玩家伤透脑筋,⽽且对游戏开发者来说就更头痛了,因为为了让游戏能够在众多电脑中正确运⾏,开发者必须在游戏制作之初,便需要把市⾯上所有声卡硬件数据都收集过来,然后根据不同的 API(应⽤编程接⼝)来写不同的驱动程序,这对于游戏制作公司来说,是很难完成的,所以说在当时多媒体游戏很少。微软正是看到了这个问题,为众⼚家推出了⼀个共同的应⽤程序接⼝——DirectX,只要这个游戏是依照Directx来开发的,不管你是什么显卡、声卡、统统都能玩,⽽且还能发挥更佳的效果。当然,前提是你的显卡、声卡的驱动程序也必须⽀持DirectX才⾏。
DirectX是由很多API组成的,按照性质分类,可以分为四⼤部分,显⽰部分、声⾳部分、输⼊部分和⽹络部分。
显⽰部分担任图形处理的关键,分为DirectDraw(DDraw)和Direct3D(D3D),前者主要负责2D图像加速。它包括很多⽅⾯:我们播放mpg、DVD电影、看图、玩⼩游戏等等都是⽤的DDraw,你可以把它理解成所有划线的部分都是⽤的DDraw。后者则主要负责3D效果的显⽰,⽐如 CS中的场景和⼈物、FIFA中的⼈物等等,都是使⽤了DirectX的Direct3D。
声⾳部分中最主要的API是DirectSound,除了播放声⾳和处理混⾳之外,还加强了3d⾳效,并提供了录⾳功能。我们前⾯所举的声卡兼容的例⼦,就是利⽤了DirectSound来解决的。
输⼊部分DirectInput可以⽀持很多的游戏输⼊设备,它能够让这些设备充分发挥最佳状态和全部功能。除了键盘和⿏标之外还可以连接⼿柄、摇杆、模拟器等。
⽹络部分DirectPlay主要就是为了具有⽹络功能游戏⽽开发的,提供了多种连接⽅式,TPC/IP,IPX,Modem,串⼝等等,让玩家可以⽤各种连⽹⽅式来进⾏对战,此外也提供⽹络对话功能及保密措施。
DirectX并不是⼀个单纯的图形API,它是由微软公司开发的⽤途⼴泛的API,它包含有Direct Graphics(Direct 3D+Direct Draw)、Direct Input、Direct Play、Direct Sound、Direct Show、Direct S
购房契税
etup、Direct Media Objects等多个组件,它提供了⼀整套的多媒体接⼝⽅案。只是其在3D图形⽅⾯的优秀表现,让它的其它⽅⾯显得暗淡⽆光。DirectX开发之初是为了弥补Windows 3.1系统对图形、声⾳处理能⼒的不⾜,⽽今已发展成为对整个多媒体系统的各个⽅⾯都有决定性影响的接⼝。
DirectX 是⼀组低级“应⽤程序编程接⼝ (API)”,可为 Windows 程序提供⾼性能的硬件加速多媒体⽀持。Windows ⽀持 DirectX 8.0,它能增强计算机的多媒体功能。使⽤ DirectX 可访问显卡与声卡的功能,从⽽使程序可提供逼真的三维 (3D) 图形与令⼈如醉如痴的⾳乐与声⾳效果。
DirectX 使程序能够轻松确定计算机的硬件性能,然后设置与之匹配的程序参数。该程序使得多媒体软件程序能够在基于 Windows 的具有DirectX 兼容硬件与驱动程序的计算机上运⾏,同时可确保多媒体程序能够充分利⽤⾼性能硬件。
DirectX 包含⼀组 API,通过它能访问⾼性能硬件的⾼级功能,如三维图形加速芯⽚和声卡。这些 API 控制低级功能(其中包括⼆维 (2D)图形加速)、⽀持输⼊设备(如游戏杆、键盘和⿏标)并控制着混⾳及声⾳输出。构成 DirectX 的下列组件⽀持低级功能:
Microsoft DirectDraw
Microsoft DirectDraw API ⽀持快速访问计算机视频适配器的加速硬件功能。它⽀持在所有视频适配器
上显⽰图形的标准⽅法,并且使⽤加速驱动程序时可以更快更直接地访问。 DirectDraw 为程序(如游戏和⼆维图形程序包)以及 Windows 系统组件(如数字视频编解码器)提供了⼀种独⽴于设备之外的⽅法来访问特定显⽰设备的功能,⽽不要求⽤户提供设备功能的其它信息。
--------------------------------------------------------------------------------
Microsoft Direct3D
Microsoft Direct3D API (Direct3D) 为⼤多数新视频适配器内置的 3-D 调⾊功能提供界⾯。Direct3D 是⼀种低级的 3-D API,它为软件程序提供⼀种独⽴于设备之外的⽅法以便与加速器硬件进⾏有效⽽强⼤的通信。Direct3D 包含专⽤ CPU 指令集⽀持,从⽽可为新型计算机提供进⼀步加速⽀持。
--------------------------------------------------------------------------------
Microsoft DirectSound
Microsoft DirectSound API 为程序和⾳频适配器的混⾳、声⾳播放和声⾳捕获功能之间提供了链接。DirectSound 为多媒体软件程序提供低延迟混合、硬件加速以及直接访问声⾳设备等功能。维护与现有设备驱动程序的兼容性时提供该功能。
--------------------------------------------------------------------------------
Microsoft DirectMusic
Microsoft DirectMusic API 是 DirectX 的交互式⾳频组件。与捕获和播放数字声⾳样本的 DirectSound API 不同,DirectMusic 处理数字⾳频以及基于消息的⾳乐数据,这些数据是通过声卡或其内置的软件合成器转换成数字⾳频的。DirectMusic API ⽀持以“乐器数字界⾯ (MIDI)”格式进⾏输⼊,也⽀持压缩与未压缩的数字⾳频格式。DirectMusic 为软件开发⼈员提供了创建令⼈陶醉的动态⾳轨的能⼒,以响应软件环境中的各种更改,⽽不只是⽤户直接输⼊更改。
--------------------------------------------------------------------------------
Microsoft DirectInput
Microsoft DirectInput API 为游戏提供⾼级输⼊功能并能处理游戏杆以及包括⿏标、键盘和强⼒反馈游戏控制器在内的其它相关设备的输⼊。--------------------------------------------------------------------------------
Microsoft DirectPlay
Microsoft DirectPlay API ⽀持通过调制解调器、Internet 或局域⽹连接游戏。DirectPlay 简化了对通信服务的访问,并提供了⼀种能够使游戏彼此通信的⽅法⽽不受协议或联机服务的限制。DirectPlay 提供了多种游说服务,可简化多媒体播放器游戏的初始化,同时还⽀持可靠的通信协议以确保重要游戏
数据在⽹络上不会丢失。DirectPlay 8.0 的新功能即⽀持通过⽹络进⾏语⾳通信,从⽽可⼤⼤提⾼基于多媒体播放器⼩组的游戏的娱乐性,同时该组件还通过提供与玩游戏的其他⼈对话的功能⽽使团体游戏更具魅⼒。
--------------------------------------------------------------------------------
Microsoft DirectShow
Microsoft DirectShow API 提供了可在您的计算机与 Internet 服务器上进⾏⾼品质捕获与回放多媒体⽂件的功能。DirectShow ⽀持各种⾳频与视频格式,包括“⾼级流式格式 (ASF)”、“⾳频-视频交错 (AVI)”、“数字视频 (DV)”、“动画专家组 (MPEG)”、“MPEG ⾳频层 3 (MP3)”、“Windows 媒体⾳频/视频 (WMA/WMV)”以及 WAV ⽂件。DirectShow 还具有视频捕获、DVD 回放、视频编辑与混合、硬件加速视频解码以及调谐⼴播模拟与数字电视信号等功能。
------------------------------------------------------------------------------------------------------------------------------------------------------
DirectX 的历史
DirectX 1.0
第⼀代的DirectX很不成功,推出时众多的硬件均不⽀持,当时基本都采⽤专业图形API-OpenGL,缺乏硬件的⽀持成了其流⾏的最⼤障碍。
DirectX 1.0版本是第⼀个可以直接对硬件信息进⾏读取的程序。它提供了更为直接的读取图形硬件的性能(⽐如:显⽰卡上的块移动功能)以及基本的声⾳和输⼊设备功能(函数),使开发的游戏能实现对⼆维(2D)图像进⾏加速。这时候的DirectX不包括现在所有的3D功能,还处于⼀个初级阶段。
DirectX 2.0
DirectX 2.0在⼆维图形⽅⾯做了些改进,增加了⼀些动态效果,采⽤了Direct 3D的技术。这样DirectX 2.0与DirectX 1.0有了相当⼤的不同。在DirectX 2.0中,采⽤了“平滑模拟和RGB模拟”两种模拟⽅式对三维(3D)图像进⾏加速计算的。DirectX 2.0同时也采⽤了更加友好的⽤户设置程序并更正了应⽤程序接⼝的许多问题。从DirectX 2.0开始,整个DirectX的设计架构雏形就已基本完成。
DirectX 3.0
DirectX 3.0的推出是在1997年最后⼀个版本的Windows95发布后不久,此时3D游戏开始深⼊⼈⼼,DirectX也逐渐得到软硬件⼚商的认可。
97年时应⽤程序接⼝标准共有三个,分别是专业的OpenGL接⼝,微软的DirectX D接⼝和3DFX公司
的Glide接⼝。⽽那时的3DFX公司是最为强⼤的显卡制造商,它的Glide接⼝⾃然也受到最⼴泛的应⽤,但随着3DFX公司的没落,Voodoo显卡的衰败,Glide接⼝才逐渐消失了。DirectX 3.0是DirectX 2.0的简单升级版,它对DirectX 2.0的改动并不多。包括对DirectSound(针对3D声⾳功能)和DirectPlay(针对游戏/⽹络)的⼀些修改和升级。DirectX 3.0集成了较简单的3D效果,还不是很成熟。
DirectX 5.0
微软公司并没有推出DirectX 4.0,⽽是直接推出了DirectX 5.0。此版本对Direct3D做出了很⼤的改动,加⼊了雾化效果、Alpha混合等3D特效,使3D游戏中的空间感和真实感得以增强,还加⼊了S3的纹理压缩技术。
同时,DirectX 5.0在其它各组件⽅⾯也有加强,在声卡、游戏控制器⽅⾯均做了改进,⽀持了更多的设备。因此,DirectX发展到DirectX 5.0才真正⾛向了成熟。此时的DirectX性能完全不逊⾊于其它3D API,⽽且⼤有后来居上之势。
DirectX 6.0
企业域名备案DirectX 6.0推出时,其最⼤的竞争对⼿之⼀Glide,已逐步⾛向了没落,⽽DirectX则得到了⼤多数⼚商
的认可。DirectX 6.0中加⼊了双线性过滤、三线性过滤等优化3D图像质量的技术,游戏中的3D技术逐渐⾛⼊成熟阶段。
DirectX 7.0
最新油价92号汽油DirectX 7.0最⼤的特⾊就是⽀持T&L,中⽂名称是“坐标转换和光源”。3D游戏中的任何⼀个物体都有⼀个坐标,当此物体运动时,它的坐标发⽣变化,这指的就是坐标转换;3D游戏中除了场景+物体还需要灯光,没有灯光就没有3D物体的表现,⽆论是实时3D游戏还是3D影像渲染,加上灯光的3D渲染是最消耗资源的。虽然OpenGL中已有相关技术,但此前从未在民⽤级硬件中出现。
在T&L问世之前,位置转换和灯光都需要CPU来计算,CPU速度越快,游戏表现越流畅。使⽤了T&L功能后,这两种效果的计算⽤显⽰卡的GPU来计算,这样就可以把CPU从繁忙的劳动中解脱出来。换句话说,拥有T&L显⽰卡,使⽤DirectX 7.0,即使没有⾼速的CPU,同样能流畅的跑3D游戏。
DirectX 8.0
DirectX 8.0的推出引发了⼀场显卡⾰命,它⾸次引⼊了“像素渲染”概念,同时具备像素渲染引擎(Pixel Shader)与顶点渲染引擎(Vertex Shader),反映在特效上就是动态光影效果。同硬件T&L仅仅实现的固定光影转换相⽐,VS和PS单元的灵活性更⼤,它使GPU真正成为了可编程的处理器。这意味着程序
员可通过它们实现3D场景构建的难度⼤⼤降低。通过VS和PS的渲染,可以很容易的宁造出真实的⽔⾯动态波纹光影效果。此时 DirectX的权威地位终于建成。
DirectX 9.0
2002年底,微软发布DirectX9.0。DirectX 9中PS单元的渲染精度已达到浮点精度,传统的硬件T&L单元也被取消。全新的VertexShader(顶点着⾊引擎)编程将⽐以前复杂得多,新的VertexShader标准增加了流程控制,更多的常量,每个程序的着⾊指令增加到了1024条。
PS 2.0具备完全可编程的架构,能对纹理效果即时演算、动态纹理贴图,还不占⽤显存,理论上对材质贴图的分辨率的精度提⾼⽆限多;另外PS1.4只能⽀持 28个硬件指令,同时操作6个材质,⽽PS2.0却可以⽀持160个硬件指令,同时操作16个材质数量,新的⾼精度浮点数据规格可以使⽤多重纹理贴图,可操作的指令数可以任意长,电影级别的显⽰效果轻⽽易举的实现。
VS 2.0通过增加Vertex程序的灵活性,显著的提⾼了⽼版本(DirectX8)的VS性能,新的控制指令,可以⽤通⽤的程序代替以前专⽤的单独着⾊程序,效率提⾼许多倍;增加循环操作指令,减少⼯作时间,提⾼处理效率;扩展着⾊指令个数,从128个提升到256个。
增加对浮点数据的处理功能,以前只能对整数进⾏处理,这样提⾼渲染精度,使最终处理的⾊彩格式
达到电影级别。突破了以前限制PC图形图象质量在数学上的精度障碍,它的每条渲染流⽔线都升级为128位浮点颜⾊,让游戏程序设计师们更容易更轻松的创造出更漂亮的效果,让程序员编程更容易。
DirectX 9.0c
与过去的DirectX 9.0b和Shader Model 2.0相⽐较,DirectX 9.0c最⼤的改进,便是引⼊了对Shader Model 3.0(包括Pixel Shader 3.0 和Vertex Shader 3.0两个着⾊语⾔规范)的全⾯⽀持。举例来说,DirectX 9.0b的Shader Model 2.0所⽀持的Vertex Shader最⼤指令数仅为256个,Pixel Shader最⼤指令数更是只有96个。⽽在最新的Shader Model 3.0中,Vertex Shader和Pixel Shader的最⼤指令数都⼤幅上升⾄65535个,全新的动态程序流控制、位移贴图、多渲染⽬标(MRT)、次表⾯散射 Subsurface scattering、柔和阴影 Soft shadows、环境和地⾯阴影 Environmental and ground shadows、全局照明(Global illumination)等新技术特性,使得GeForce 6、GeForce7系

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。