C++博客 :: 首页 :: 联系 ::  :: 管理
  163 Posts :: 4 Stories :: 350 Comments :: 0 Trackbacks

常用链接

留言簿(48)

我参与的团队

搜索

  •  

积分与排名

  • 积分 - 397026
  • 排名 - 59

最新评论

阅读排行榜

评论排行榜

即使 Direct3D 和 OpenGL 比他们过去经常更大量相似, 有寂静的区别, 和和总计 API 战争, 各边有它的追随者。 关于辩论最重大的区域的讨论随后而来

易用

在1998 Direct3D 为人所知是相当笨拙的使用- 之前执行状态变动, 例如, 它要求一定数量的复杂操作。 例如, 使能 alpha 混和, 你必须创造所谓 执行缓冲, 锁它, 填装它以正确 opcodes (与结构倒栽跳水告诉一起多少opcodes 缓冲包含了和一特别"出口" opcode), 打开它和最后送它到司机为施行。 相反, OpenGL 节目会做一唯一"glEnable(GL_BLEND);" 电话。 这个模型宁可令人沮丧为许多程序员; 最著名的例子大概来自John Carmack's 。计划文件他敦促的地方 Microsoft 对下落Direct3D 一共倾向于OpenGL 。

但是, 用Direct3D 版本8, 许多变动做了, 并且Direct3D 不能再称笨拙的API 。 Direct3D 和OpenGL 仍然跟随不同的范例, 虽然-- Direct3D 根据微软的 com 技术和因而是在它的心脏 对象被安置 (那么每 texture 是对象, 例如) 。 OpenGL 没有这样一个范例, 但是反而为人所知作为a 系统 获取通过简单 C 作用。 哪个最后是"更好" 取决于程序员的特选。 OpenGL 系统也许被包裹以对象针对的编程的接口作为游戏引擎一部分。 这样努力由SGI 和微软执行了作为 Fahrenheit 图表API, 但项目是失败。

Direct3D 比OpenGL 倾向于是离硬件较近。 例如, 如果节目减到最小和然后被恢复, Direct3D 用户将得到什么为人所知作为a 失去的设备, 意味节目必须re 向上作用的负载所有纹理, 设置所有端点shader 常数等。 OpenGL 透明地做这为程序员, 当然在较少控制的费用, 但不要求应用处理失去的设备。 Direct3D 应用也许, 例如, 必须停留比赛当向上作用的负载发生, 不会必需为OpenGL 赛。

使用OpenGL 一个广泛更喜欢的方式是什么OpenGL 称"直接方式", 允许程序员输入端点(或端点属性譬如纹理协调或颜色) 对当前的端点缓冲一个个(e.g 。 "glVertex3f(1 。0f, 2 。0f, 3 。0f);"), 以速度明显的费用。 这是画简单的事一个非常方便方式, 但它实践上使rendering 著名地更慢。 这是同样方法被采取在Direct3D 5, 和然后被增添在DirectX 8 增加端点和索引缓冲- 能当地被存放在硬件为快速访问由GPU 有效地的被贮藏的缓冲几何, 避免数据的拷贝从用户方式应用对硬件。

以能力提供数据直接时尚通过DrawPrimitiveUP/DrawIndexedPrimitiveUP APIs 和对端点和索引缓冲的缓冲的用途, 接近对用途根据的程序员可能选择哪些必需。

OpenGL 1 。1 介绍了执行浩大地更好比直接方式为巨额几何) 的端点列阵(, 并且一个最新引伸介绍了"端点与Direct3D's 端点缓冲是主要功能上等效的缓冲对象" (VBOs) 。

其它重大区别在APIs 之间是他们处理rendering 对纹理的方式: Direct3D 供应一个相当方便方式为那(SetRenderTarget()) 与OpenGL 相对, 你必须使用P 缓冲或映像点缓冲为了取得同样结果。 这, 然而, 广泛被认为OpenGL 的最锋利的点API: 如果程序员比由司机制造商渴望不同地创造他的codepath, 变动也许是对兼容性费用, 因为代码将下跌回到软件rendering, 如此根本上使应用不能再用。 (根据a Gamasutra 文章 (注册要求), 上述的约翰・Carmack 考虑下降OGL 到D3D 由于对P 缓冲的被策划的用途。) "机架缓冲器对象" 引伸(FBO) 演讲这个缺点, 带来Direct3D 等效功能给OpenGL 。

速度

在Direct3D 和OpenGL 的创立之后作为可实行的图表图书馆, 微软和SGI 参与了什么文学把视为几个片断"API 打仗" 。 这场战争, 虽则经常关于结构, 并且会倾向于为API 提供优越表现的根本论据划分。 这与在这竞争时间期间, 微软的Direct3D 和SGI 的OpenGL 各种各样的实施被贬谪对软件renderer 实施在消费者市场上的事实有关(由于图表硬件的非常高费用当时) 。 因而能力使一个具体图书馆胜过另单一地经常跌倒了图书馆和不第三方情况, 譬如一个恶劣的图形卡。

微软, 创造了Direct3D 和OpenGL 实施为他们的平台, 依照快速地根据销售了Direct3D 被完成了得in-house 二的表现比较APIs 。 那时, 报告被认为了真实(关于微软的二实施) 放置责备对表现缺乏在严谨规格和依照必需OpenGL 。 这观念被改变了在1996 SIGGRAPH (特殊兴趣组在计算机图表) 会议。 那时, SGI 向微软挑战以OpenGL 告诉的CosmoGL 的他们自己的优化窗口软件实施(通过对各种各样的演示的用途) 显示OpenGL 在许多情况下执行了在, 或上述, Direct3D 的能力。 为SGI, 这是一个重要里程碑因为它表示, 缺乏表现在OpenGL 软件rendering 没有归结于OpenGL 结构或设计, 但是相当由于缺乏优化在实施运送了由微软。

从那以后, 辩论漂移越来越从软件rendering 表现和集中于其它问题。 双方试图要求胜利在各种各样的优点, 虽然充足的证明对这个日期未被提供API 真实地陈列最佳的表现。 这与事实有关应用的表现说谎一样在程序员的能力写好代码和坚实硬件和司机出现象它做在API 。

因而, 在现代系统情况下, API 速度的问题变得越来越无意义。 今天自, 图表密集的应用发现自己在CPU 跳起在中等水平的图表硬件, 或由缓慢的IO 通入限制横跨其它系统组分; 因此, 焦点转移了从API 到计算机图表的硬件末端。 结果, APIs 倾向于现在面对的更加巨大的问题落沿实用性、朴素和特点的线代替速度。

结构

OpenGL 的API, 最初被写为然后强有力的SGI 工作站, 包括很少被使用的一定数量的命令(典型地只在"高端" rendering 情况) 。 API 整体上包含大约250 个电话, 但唯一一个子集或许100 是有用的在赌博上下文。 OpenGL 从未定义了一个有用的子集被使用在这些情况, 应该真正地被实施在硬件为最佳的表现的一套命令。 MiniGL, 被3Dfx 发布作为补缺者议案支持glQuake, 也许已经做了一个基本框架起点但另外的特点如钢板蜡纸由比赛很快采取了确认许多表面上高结尾能力包括。 问题后来消失当现代卡片支持越来越API 在硬件里和适合老练和特点富有比OpenGL 版本1 。那个时代的1 台或任何SGI 工作站。

OpenGL 结构地被设计了如同特点富有的API 从外边尽管缺乏硬件支持。 规格在一些方面驾驶了这些特点的实施。 设法加速一个特点在硬件里的随后实施自动地会提供表现增量对更旧的软件应用被写反对API 。 这是含蓄硬件抽象的例子在API, 这的例子在行动是当新GeForce 256 图形卡来了, 比赛象 Quake III 竞技场 自动地受益于 变换& 照明设备 特点, 但是Direct3D 开发商必须等API 的下个版本被发布和重写他们的比赛使用新特点。 清楚OpenGL 方法牌子感觉为会做在软件无论如何的根本事, 例如变革和照明设备, 但其它非根本更加缓慢的特点也许由应用一共更好避免直到硬件支持存在了。

OpenGL 包含方法的不利是, 应用有没什么告诉它什么是快速的并且什么是慢的不同于测量的表现。 如此也许运行优良在一张特殊卡片的一个特点, 象使用钢板蜡纸操作(使用一个老例子), 能减慢应用下来不能接受地在其它卡片。 D3D 另一方面不是包含的和因此开发商会检查能力位看如果特点存在了或不是和不会是有下落回到一个慢道路的危险。 缺点是, 许多特点不存在在能力位或任何API 残余部分, 因此直到硬件支持或钢板蜡纸支持增加了来D3D, 卡片制作商不能暴露它于开发商并且游戏开发商不能获得先进的支持入他们的比赛。

Direct3D 被设计了以一块硬件抽象层在微软开发很多前端缓和司机发展的微软的最初的发行之前。 这能使它更加容易实施在赌博卡片, 并且以更加简单的特点集合是可能的它快速的收养的主要原因在90 年代晚期。 D3D 开始了生活当一个优化3D 软件引擎被购买以公司的接管告诉RenderMorphics 因此它开始了以优化软件rendering 能力虽然这不再是关心。

微软有二个司机模型为要求OpenGL 充分的地面实施由图形卡的制作商的OpenGL 、可安装的客户司机, 并且微软供应很多前端变革和设定哺养图形卡的微型客户司机。 微软摒弃了MCD 司机模型在几个硬件制作商准备好运输MCD 司机之前, 延迟最大OpenGL 支持在微软视窗。

引伸

OpenGL 引伸 机制大概是沉重争执的区别在二之间APIs 。 OpenGL 有任一个司机可能给它自己的引伸做广告对API, 如此介绍新功能譬如混合方式、转移数据新方式到GPU, 或另外纹理包裹的参量的一个机制。 这允许新功能迅速被暴露, 但可能经常导致混乱当不同的贩卖者实施相似的引伸与另外APIs 。 许多这些引伸由OpenGL 阶段性地规范化 建筑学评论委员会 并且可能包括在未来OpenGL 修正。

另一方面, Direct3D 由一位贩卖者指定(Microsoft) 只, 导致更加一致的API, 但有时错过的vendor-specific 特点。 nVidia 的 UltraShadow[ 1 ] 技术, 例如, 不是可利用的在股票Direct3D APIs 在文字之时。 值得注意的是, Direct3D 支持纹理格式引伸(通过所谓 FourCC 代码), 他们少许为人所知和很少被使用了, 但现在被使用为 DXT 纹理压缩。

引伸区别的例子是更新的图形卡增加支持的方式用 映像点shaders (知道在OpenGL 作为"片段编程") 。 在Direct3D 之下有一唯一"映像点shader 1 。1"(PS1.1) 从事两的标准 GeForce 3 和上升, 和 Radeon 8500 和上升。 在OpenGL 之下同样功能被获取通过习惯引伸。

在理论上微软方法意味一个唯一代码道路可能支持两张卡片, 但是在OpenGL 之下程序员会必须写二个不同系统。 实际上事不是那么简单。 shaders 的nVidia 的实施紧紧被栓对他们的卡片一定数量不凡的特点, 和因此实际上程序员可能会必须写二套代码无论如何。 但是, 这个情况短时间只存在了, 第二代映像点阴影卡片是可观地更象, 导致映像点Shader 2 。0. 到时OpenGL 介绍了它自己ARB 批准的引伸为端点和映像点shader 引伸(GL_ARB_vertex_program 和GL_ARB_fragment_program) 。

轻便

很大程度上, Direct3D 被栓对一个具体平台: Microsoft 窗口. Direct3D API (和DirectX 的一个部份口岸总之) 被实施了 , 和微软供应一个修改过的版本为 Xbox 发展。 但就这些例外而论, Direct3D 那么紧紧集成窗口, 端起它对非窗口操作系统是非常困难的。 实际上微软曾经许诺提供一个版本为 PowerPC Apple Macintoshes, 但以后摒弃这个项目, 因此杀害在平台的游戏发展直到苹果计算机公司被规范化在OpenGL 。 但是, 第三方公司开发了一个DirectX 口岸对 Mac OS XMacDX -- 这个口岸的质量客观地仍然未被评估。

OpenGL, 另一方面, 有实施可利用横跨各种各样的平台包括窗口, 基于Unix 的系统, Linux, 上述 Mac OS XNintendo GameCube. 总之, 几乎所有现代 操作系统 有能力在rendering 3-dimensional 图表上将有某一排序一个当地OpenGL 司机, 或访问对OpenGL 服从的软件renderer 譬如 Mesa 3D.

这做出Direct3D 一个限制的选择; 但是, 它是由程序员决定决定如果这"封锁行动" 是问题。 例如, 比赛市场在非窗口计算机平台仍然是相当小在文字之时, 因此为许多比赛出版者这也许不是一个大问题(然而, 这也许归结于缺乏Direct3D 支持在非窗口平台) 。

低结束卡片(譬如英特尔极端图表线) 比OpenGL 倾向于有更好的司机支持对于Direct3D; 两个 ati 技术nVidia, 显然二个最大的球员在分离图表市场上在文字之时, 有范围从可通过对优秀为所有他们的现代卡片的OpenGL 司机(在两个窗口和多数非窗口平台) 并且做对OpenGL 标准的未来支持。

用户

OpenGL 比DirectX 总被用于一个极大地更加了不起的程度在专业图表市场上, 当DirectX 是大量使用为计算机游戏应用。 这是根据微软的正式立场点; 微软承认, 专业图表比DirectX 是更多OpenGL 的领域。 有一定数量的原因为什么OpenGL 和DirectX 被选择在彼此在二个不同市场上, 并且它主要反射这二不同的需要用户。

专业图表应用, 譬如 计算机辅助设计 并且 计算机引起的成像 有整个地另外需要从计算机图表。 经常3D 设计卡通者、设计师、建筑师、科学家和工程师看他们的模型作为wireframes 或简单的Gouraud 被遮蔽的对象。 是专业应用, 他们分析的场面可能需要被回报许多次每秒的由成千上万个的多角形做成。 相反地, gamers 看有实时photorealistic 场面引起以复杂的作用譬如纹理, 爆沸映射的, 容量雾, 微粒作用, 严谨阿尔法混和等等, 真正地不事关对专家。

许多专业图形卡只支持了OpenGL, 然而, 现今所有主要专业卡片制造商(Nvidia, ATI_Technologies3dlabs) 还支持Direct3D 。

但是, 主要原因为什么专家3D 创作应用用途OpenGL 是大多数是出生在Silicon Graphics 工作站在90 年代初期, 和演变从那里其它平台。 许多这些应用, 例如Softimage|3D, 是第一被写在SGI 的虹膜GL, 然后被端起给OpenGL 。 当游戏图形卡表现来临超出工作站图表表现, professionnal 用户和gamers 的需要成为同样。 专业设计卡通者不想要赋予生命在wireframe 或被遮蔽的方式, 而是宁可必须工作在这个方式下由于工作站图表硬件粗劣的纹理表现。 今天, 艺术家和用户和游戏艺术家一样要求高他们的场面质量实时预览和并且使用工具。 终于, 越来越3D renderers 譬如精神光芒利用从被赌博市场驾驶的前进的GPU 援助在离线3D rendering, 和好处在表现。

直到上述研究的链接被显示, 我们能只假设这是观点作为所有Mac 和Linux 比赛, 包括1720 年在Linux 游戏坟茔(http://www 。happypenguin 。org/list?sort=approved_date) 是openGL 根据, 并且 扭矩引擎, 虚幻的引擎 并且其它普遍的3D 游戏引擎。

posted on 2007-12-09 19:20 sdfasdf 阅读(1284) 评论(2)  编辑 收藏 引用

Feedback

# re: D3D VS OPENGL 2007-12-10 11:27 Arbitor TU
KAO,是用金山快译翻的吧,
不如转贴原文了,翻译得太吐了...  回复  更多评论
  

# re: D3D VS OPENGL 2008-05-30 13:30 lvl
简直不是人话  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理