游戏开发论坛

 找回密码
 立即注册
搜索
查看: 6519|回复: 18

为什么使用 Direct3D? 而非OpenGL?

[复制链接]

14

主题

38

帖子

44

积分

注册会员

Rank: 2

积分
44
发表于 2008-10-6 21:47:00 | 显示全部楼层 |阅读模式
这是我自己翻译的以国外达人的书中的见解。觉得有点道理,当然这绝对没有任何技术含量。下面有原文。翻译不当之处望指正。

如果你们从未使用过它的话,OpenGL是另外一种的API。Silicon Graphics 的设计早在90年前为适用于他们的高端图形工作站被。它继承于数不清的平台和操作系统。在这些区域内已超出于游戏产业之外就像 simulation (模拟)和学术研究一样。OpenGL事实上是作为计算机绘图方面的标准。它是一个简单的、优雅的、快速的API。关于更多信息请查询 http://www.opengl.org

但它不是完美的。首先,OpenGL在这方面是大量的函数性的。制作接口这样简单的需求使编译器要照顾一些难以忍受的细节以确切的弄明白每一件工作。由于驱动方式是需要实施的,为了有一个完全的OpenGL驱动,每个公司制作的3D卡都要支持所有的OpenGL特征设定。这些驱动将是极其困难的被正确的实现。而且表现方面等同于在驱动的质量基础上硬件能胡乱的改变,另外,DirectX增加的优势能迅速的转换以适应新的硬件特征,DX由微软所约束(那一个好或者坏,依赖于你对它的理解)。当OpenGL需要扩张的时候需要委员会的评定。

我初步希望有源代码的两个版本——一个是关于Windows和Direct3D的,另一个是Linux和OpenGL的,最终是不可能的,所以我选择了一个或另一个,我选择Direct3D。

Why use Direct3D? Why not use OpenGL?
For those of you who have never used it, OpenGL is another graphics API. Silicon Graphics designed it in the early '90s for use on their high-end graphics workstations. It has been ported to countless platforms and operating systems. Outside of the games industry in areas like simulation and academic research, OpenGL is the de facto standard for doing computer graphics. It is a simple, elegant, and fast API. Check out http://www.opengl.org for more information.

But it isn't perfect. First of all, OpenGL has a large amount of functionality in it. Making the interface so simple requires that the implementation take care of a lot of ugly details to make sure everything works correctly. Because of the way drivers are implemented, each company that makes a 3D card has to support the entire OpenGL feature set in order to have a fully compliant OpenGL driver. These drivers are extremely difficult to implement correctly, and the performance on equal hardware can vary wildly based on driver quality. In addition, DirectX has the added advantage of being able to move quickly to accommodate new hardware features. DirectX is controlled by Microsoft (which can be a good or bad thing, depending on your view of it), while OpenGL extensions need to be deliberated by committees.

My initial hope was to have two versions of the source code—one for Windows and Direct3D and the other for Linux and OpenGL. This ended up not being possible, so I had to choose one or the other; I chose Direct3D.

54

主题

2916

帖子

3765

积分

论坛元老

Rank: 8Rank: 8

积分
3765
QQ
发表于 2008-10-7 08:58:00 | 显示全部楼层

Re:为什么使用 Direct3D? 而非OpenGL?

知道OpenGL不错,可是在Windows系统下你觉得微软会让OpenGL支持的比Direct3D还要好吗?

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2008-10-7 12:14:00 | 显示全部楼层

Re:为什么使用 Direct3D? 而非OpenGL?

http://blog.csdn.net/Nightmare/archive/2007/03/16/1531259.aspx
为什么游戏偏爱D3D

如今游戏领域已经是D3D的天下,但还是有人不断搬出10年前John Carmack的话批驳D3D,尽管Carmack后来多次声明D3D已经有了很大改观,以前的批评已经不再适用。如今公认的评价是D3D和OpenGL 在功能、速度和易用性上基本等价。但这无法解释为什么游戏开发商倒向D3D。不少人说是因为游戏开发以前是用DirectDraw的,转到同一风格的 D3D比较容易。但两者的相似处也太少了,无论如何从2D转到3D都是要从新学习一套新的体系。而且D3D的每个版本都不同,怎么说也比转到OpenGL 的代价大。难道开发商都被微软Mind Control了?

这里我们必须先跳出技术的圈圈。对商业游戏开发来讲,利润是必须的,饿着肚子是没法谈技术和创新的。从众多偶像级开发商的倒闭就知道这个产业的竞争有多激烈。一个游戏最主要的两个卖点就是图像和娱乐性,而新的图像特效比较容易使游戏很快的脱颖而出,而娱乐性更多地影响游戏的寿命。众所周知,OpenGL在推出新特性上总是比D3D慢半拍,但这半拍足以导致游戏落后一年。熟悉 OpenGL的人会说OpenGL是允许显卡厂商添加扩展的,同等功能的OpenGL扩展很快就会出现。但是,微软专制的D3D一更新,各种支持其标准的显卡就很快大量涌现;而最早面世的OpenGL扩展都是各个显卡芯片厂商自己定义的,不同的厂商的支持都不一样,然后厂商间协调,为专利问题讨价还价,最后达成多数厂商都能共同支持的EXT或ARB扩展,已经旷费很多时日了。

第二,与CAD等软件不同,游戏是面向大众消费者的。开发商需要游戏尽可能没有麻烦地在用户机器上运行,而普通消费者不知道也不关心D3D、OpenGL是什么东西。对游戏而言,没有3D硬件加速是不能接受的。D3D 的游戏一般会带DirectX的安装包,对于不同版本的显卡驱动,D3D都能提供硬件加速的接口。而对OpenGL,相当比例的普通用户的系统上是没装 OpenGL ICD Driver(即OpenGL的硬件加速驱动)的,其结果就是幻灯片式的逐帧显示。而且因为不少功能是后来显卡厂商更新驱动后加进去的,就是说,即使用户系统上装了OpenGL ICD Driver,也可能只是1.2、1.3等旧版的,需要下载安装最新版驱动才能使用新特性。估计有人会提GLSetup这个自动检测安装ICD的工具,但似乎这个项目几年前就停止了。从功能上,D3D是忠实的反映硬件能力,可以查询各项硬件指标,超出硬件能力的都是不支持的(但顶点处理可以选择使用软件模式);而OpenGL在硬件不能支持时会自动由软件模拟,这对CAD应用是很理想的,事实上我也很喜欢它这点,但这对游戏是致命的。由于OpenGL各版本的核心功能集合是强制支持的,而硬件未必支持,所以硬件不支持的部分或支持但超出硬件处理范围的部分是由软件模拟的。所以支持OpenGL 2.0的ICD并不意味者全部功能都是硬件加速的。想知道硬件能支持到什么程度,还是要用DXCapsViewer看一下。

第三,商业项目必须考虑成本和时效性。软件项目中,人力成本往往是最大的部分,而按时交工又是开发组最大的压力。很多项目都会购买一个现成的引擎来降低成本和提高时效。而独立开发引擎时,就要选择效率最高的开发平台。对CAD应用来说,它们并不需要显卡的各种新特性,因为它们只是用OpenGL来画线框图,而华丽的渲染效果是离线的高级软件渲染引擎完成的,所以OpenGL 1.1时代的东西在多数情况下是足足够用的。而游戏要用到大量新特性,如Effect Framework、Bump Mapping、HDR、Texture Atlas等,很多是需要将数据进行预处理的。而OpenGL只是图形输出接口,其他的工作都必须自己来做,当然也可以找现成的,不过会有许可协议、不同风格代码集成、以及可能的授权费等问题,毕竟这是商业应用。而D3D提供了D3DX库,包含了从基础数学库(支持MMX、SSE、3DNow)到模型显示的各种辅助例程,极大地节省了开发时间。在D3D和OpenGL的征战中,D3DX为D3D赢得不少支持者。

所以,技术因素在两者的选择上并没有多大影响,似乎也可以证明为什么商业开发多用D3D,业余开发多用OpenGL。

20

主题

222

帖子

276

积分

中级会员

Rank: 3Rank: 3

积分
276
发表于 2008-10-7 19:55:00 | 显示全部楼层

Re:为什么使用 Direct3D? 而非OpenGL?

为啥使用windows而非unix?

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2008-10-8 10:55:00 | 显示全部楼层

Re: Re:为什么使用 Direct3D? 而非OpenGL?

ZombieMKII: Re:为什么使用 Direct3D? 而非OpenGL?

为啥使用windows而非unix?


因为游戏玩家绝大多数不会用unix

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
发表于 2008-10-8 13:33:00 | 显示全部楼层

Re:为什么使用 Direct3D? 而非OpenGL?

在某些机器上还是会用OPENGL

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2008-10-8 16:14:00 | 显示全部楼层

Re:为什么使用 Direct3D? 而非OpenGL?

因为微软很好很强大.....

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2008-10-8 16:42:00 | 显示全部楼层

Re:为什么使用 Direct3D? 而非OpenGL?

我曾经遇到过一个网友,他说d3d不好是因为d3d提供了太多的d3dx扩展功能,这些功能封装了太多的操作,让初学者(比如当年的他)完全蒙在鼓里,导致写了半天的d3d还是啥也学不会,而ogl啥都没有,全都得自己写,等写一遍下来水平就近似等于大师级了...另外d3d更新太快了,也会误导消费者,同时让开发者头脑发昏无所适从....我顿时无语,即使我不喜欢dx,微软这种做法还是可以算得上认真负责的,如果这也算是一种错,那我真的怀疑这个世界的是非观了

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2008-10-8 19:50:00 | 显示全部楼层

Re: Re:为什么使用 Direct3D? 而非OpenGL?

jk20012001: Re:为什么使用 Direct3D? 而非OpenGL?

我曾经遇到过一个网友,他说d3d不好是因为d3d提供了太多的d3dx扩展功能,这些功能封装了太多的操作,让初学者(...


这种观念的人不少,反对高级语言和组件化的人不是常说“都封装了会导致开发人员什么都不会么”,他们认为所有的东西都应该自己重写一遍。

不过从另一方面想,有这种人在,大大减轻了我们面对的竞争 [em20]

0

主题

40

帖子

40

积分

注册会员

Rank: 2

积分
40
发表于 2008-10-8 21:29:00 | 显示全部楼层

Re:为什么使用 Direct3D? 而非OpenGL?

我也说不清楚!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-21 02:04

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表