为什么你应该使用OpenGL而不是DirectX?
这是一篇很意思的博文,原文链接为:http://blog.wolfire.com/2010/01/Why-you-should-use-OpenGL-and-not-DirectX
大家可以思考一下:why we choose a closed source API when the open source is equally good or better?
当我们遇到其他游戏程序员并谈论我们使用OpenGL开发Overgrowth时总是会遇到怀疑的眼神。为什么要用OpenGL? DirectX才是未来。当我们使用OpenGL去告诉显卡如何工作时,房间的温度下降了10度(啥意思?我一直以为A卡和N卡的区别,没想到作者认为是API的问题?Holy。。。)。
OpenGL 是什么?
在1982年,Silicon公司开发售卖使用称为Iris GL的API的高性能图形显示终端。随后的几年,Iris GL变得臃肿和难以维护,直到silicon决定彻底走向新的一步:完全的重构Iris GL并开源。他们的竞争者可以使用这种新的开放图形库(OpenGL)但是作为回报,他们必须帮助维护更新该库。
如今,OpenGL 由Khronos Group管理。一个由很多公司参与组成的非营利组织,重点是维护高质量多媒体API。在底层,由 OpenGL Architecture Review Board (ARB)来管理。各种游戏平台都支持OpenGL,包括:Mac,Windows,Linux,PS3,Wii,IPhone,PSP和DS,除了XBox,下面我们就要介绍它:
DirectX 是什么?
自从MS-DOS时代,微软就明白游戏是一个用户选择操作系统的重要依据。基于这个原因,在1995年,微软创建了一套专用库以鼓励大家开发winodw95平台独占的游戏。这些库包括Direct3D,DirectInput和DirectSound,整个集合就是大家知晓的DirectX。当微软2001年进军游戏市场时,XBOX意图统治次世代游戏市场。
看看现在的状况,微软的战略无疑是成功的。大多数的PC游戏都是用DirectX,大多都运行在windows或者Xbox360上。但有些例外,它们无法再竞争对手的平台上,比如Playstation, Mac OS和Wii。于是,它给我们带来一个新的问题:
为什么大家都是用 DirectX?
使用DirectX是因为API的选择是基于游戏开发的积极反馈,这一切都发生在2005年:
如果一个API越流行,那就有越多人用,然后它就会更流行,如此循环。。。这种网络效应带来的结果就是:更流行的API获得更好的硬件厂商支持,图形程序员随后更意于选择他们已经熟知的API。
DirectX的胜出得益于微软的两次十分尖锐的战役,围绕XBox360和windows vista,也包括着关于OpenGL这种开源项目都面临着的FUD(恐惧,不确定,怀疑),以及DirectX夸大宣传的优势。从此,这种网络效应将会一步步增强直到OpenGL从地球消失。(作者好悲观。。。)
1. 网络效应与恶性循环
Win平台上,DirectX的图形驱动显然比OpenGL的驱动得到更好的维护。这是由于厂商支持引起的恶性循环。游戏开发者选择是用OpenGL还是DirectX由很多因素决定,显卡厂商得到的OpenGL驱动BUG比较少,因为用DirectX的比较多,所以不能很好的支持OpenGL的驱动。
简单来讲,越多程序员懂得DirectX甚于OpenGL,那么更多游戏使用前者开发。这会引起又一个恶性循环,更多地项目使用DX开发,更多地程序员需要学习如何使用它。。。。
2. 关于 OpenGL的FUD效应 和 Vista
微软在vista发布时对OpenGL使用了FUD战术。在2003年,微软推出了前面介绍维护底层的OARB组织--预示着微软不再会对OPGL的未来感兴趣。在2005年,微软在SIGGRAPH和WinHEC上给大家的假象就是他们从vista开始将不会支持OPGL除了对XP程序的向后兼容。这种版本的OPGL将会建立在DirectX之上,这当然引起严重的性能问题。这场战役导致很多优秀程序员转战DX。
当vista发布后,他又允许厂商创建快速可安装客户端驱动(ICDs)以保留对原生OpenGL的支持。OpenGL发布消息称OpenGL依旧是第一阵营,但是OPGL在vista上的效果始终不如Direct3D。不幸的是,这种破坏已经给OPGL带来了巨大的打击。
3. 误导市场的战役
win7发售时的市场策略与vista如出一辙,微软展示了before和after效果。很多玩家认为从dx9转到dx10就能神奇般的把图形变得更亮,或者说从Halo1变成Crysis。游戏评论证实Crysis的DX9版与DX10无区别,而画面的改变事实上由于调整了某些config文件。
在拥有大量游戏的微软市场策略下,一些有见解的程序员与卡马克大神拒绝追赶他。他说:“个人来讲,我不会立即跳进DX10.我会尝试做些改变直到我真的需要它。”
(我觉得作者是个悲剧,传言说下一代的ID引擎是基于DX的,卡马克也没说不用dx呀。。。)
为什么我们要用 OpenGL?
得到更少的厂商支持,游戏不再大量使用,被微软紧追猛打,市场生存空间狭小,为什么我们还要用它?大家用dx不更省事么?不,因为实际上,OpenGL比DX更强大,支持更多的平台,这是未来游戏的基础。
1. OpenGL 比 DirectX 更强大
OPGL有比DX更快的draw调用(如果你不信请看这里this one),并且它能通过厂商扩展第一时间使用GPU的新特性。OPGL让你能在多平台上直接访问显卡硬件,而DirectX只能在他们最新的操作系统上提供一些最新技术的展示。DX11鼓吹的Tesselation其实三年前就可以用OPGL使用了。我不知道以后还会有什么新技术,但我知道OPGL一定最先可用(这个“卖点”也灰常吸引译者本人)。
2. OpenGL 是跨平台的
暴雪总是同时发布游戏的mac版本,这是他们成功的一项法宝。
就像卡马克被问Rage是不是DX游戏时谈到:“它事实上用的是OpenGL,尽管我们使用了D3D-ish API在Xbox360平台和PS3的CG。你使用的技术很微小一部分,写的上百万行代码只有少数部分才会用API,但是数百万行的代码却依赖那些不可知的目标平台。”就像卡马克说的,为什么不会跨平台做好准备而让自己被DX限制?
3. OpenGL 是未来游戏更好的选择
非盈利的开源OpenGL用于创造一个允许用户在各种平台都能高效能发挥的图形库。他被垄断企业不断攻击,这其实也在伤害您自己的利益。我们需要自由和竞争来提升质量和降低价格。一个微软垄断的局面对游戏开发者和玩家来说都是非常杯具的。
OpenGL 能否力挽狂澜?
回到1997年,那时的情况和现在如此相似。微软为DX发动了疯狂的市场战役,随后大家都“知道”它比OpenGL更快。随着Chirs Hecker发表的open letter denouncing DirectX。情况有所改变。随后,卡马克发布了著名的OpenGL rant,并掏出大把钱用OpenGL开发Id工作室的项目,一度证明了DX不可能达到的3D性能。
这一课已经被渐渐遗忘。很多开发者陷入了dx的市场诱惑。
如果你使用OpenGL,你可以比DX11更早使用更快更强大的显卡特性,并且用于所有版本的windows,mac和linux,同样也可用于PS3,Wii,PSP,DS和iPhone。你也可以在 rapidly-developing WebGL standard使用这些特性(用于次世代网页游戏)。
如果你是一个游戏开发者,你只需搜索资料并思考,然后想想OpenGL是否是更好的选择。
为什么你应该使用OpenGL而不是DirectX?的更多相关文章
- openGL学习进程(1)OpenGL的简介
通过本节,我们来简要了解一下openGL. (1)OpenGL概述: openGL(Open Graphics Library)是个专业的图形程序接口,定义了一个跨编程语言.跨平台的编 ...
- opengl微发展理解
1.什么是OpenGL? 一种程序,可以与界面和图形硬件交互作用.一个开放的标准 2.软件管道 请看上图 - Apllication层 表示你的程序(调用渲染命令.如opengl API) - ...
- OPENGL架构
第2章 OpenGL 简介 每台计算机都有专门处理图形的硬件,它们控制着屏幕上显示的内容.OpenGL向这种硬件发出命令,告诉它们执行什么操作.计算机游戏或者其他任意软件借助制造商提供的设备驱动程序, ...
- A brief preview of the new features introduced by OpenGL 3.3 and 4.0
A brief preview of the new features introduced by OpenGL 3.3 and 4.0 The Khronos Group continues t ...
- Esfog_UnityShader教程_前言
很多人在学习Unity的时候对Shader都是一知半解,作为刚入职半年的新人接触Shader的时间也并不长,正因为是新人才能体会到学习Shader时候所遇到的困难和迷茫,无奈于资料不好找,网上难得的几 ...
- 最简单的视音频播放示例2:GDI播放YUV, RGB
前一篇文章对“Simplest Media Play”工程作了概括性介绍.后续几篇文章打算详细介绍每个子工程中的几种技术.在记录Direct3D,OpenGL这两种相对复杂的技术之前,打算先记录一种和 ...
- 关于Unity中Shader的基础认识
Shader也叫着色器,是Unity里面比较难的一个点,网上有很多别人写好的shader,我们可以下载下来用或者修改学习. Shader可以做出很多非常不错的效果,因为它是插在渲染管道里面的程序,一来 ...
- GPU-directX的发展历史
GPU发展历史: GPU之前的基础: 1962 麻省理工学院的博士伊凡•苏泽兰发表的论文以及他的画板程序奠定了计算机图形学的基础. 1962-1984 没有专门图形处理硬件,由CPU完成 1984 专 ...
- [译]Vulkan教程(03)开发环境
[译]Vulkan教程(03)开发环境 这是我翻译(https://vulkan-tutorial.com)上的Vulkan教程的第3篇. In this chapter we'll set up y ...
随机推荐
- boxFilter in opencv
, -),bool normalize=true,int borderType=BORDER_DEFAULT) Smoothes image using box filter Parameters: ...
- Django之数据库连接与建模
Django数据库链接(这里以Mysql为例) 需要准备 Django1.10 pip install django==1.10 -i https://pypi.tuna.tsinghua.edu.c ...
- JMETER远程运行_多机联合负载
JMETER远程运行_多机联合负载 远程运行是用一台JMeter控制机控制远程的多台机器来产生负载.控制机与负载机之间通过RMI方式来完成通信.在负载机上运行Agent程序(启动命令是%JMETER_ ...
- oracle数据导入/导出(2)
Oracle数据导入导出imp/exp 功能:Oracle数据导入导出imp/exp就相当与oracle数据还原与备份. 大多情况都可以用Oracle数据导入导出完成数据的备份和还原(不会造成数据的丢 ...
- springmvc:自定义类型转换器代码编写
字符串转换日期: 1.自定义一个类 /** * 字符串转换日期 */ public class StringToDateConverter implements Converter<String ...
- Vertex Covers(高维前缀和)
Vertex Covers 时间限制: 5 Sec 内存限制: 128 MB提交: 5 解决: 3 题目描述 In graph theory, a vertex cover of a graph ...
- CSP-S 2019 Day 2 T3 树的重心
CSP-S 2019 Day 2 T3 树的重心 题 给出了一个大小为\(n\)的树,树中结点从 1∼n 编号.小简单的课后作业是求出这棵树单独删去每条边后,分裂出的两个子树的重心编号和之和. \(n ...
- Ubuntu修改mysql编码格式
今天在Ubuntu系统上部署了第一个net core的web网站,遇到了mysql入库数据乱码的情况.无奈,ubuntu系统不熟悉,mysql命令不熟悉,只得在网上查找各种资料.还是老规矩,主要参考的 ...
- 洛谷P3299 保护出题人
注意每一关的时候,前一关的植物会消失.保留整数指四舍五入. 解:冷静分析一波,列一个式子出来,发现每一关的植物攻击力要是(ai + ... + aj) / (xi + d * (i - j))的最大值 ...
- hibernate 注解使用
实体类声明,需要引用 import javax.persistence.Entity; import javax.persistence.Table; @Entity @Table(name=&quo ...