`
tiankefeng0520
  • 浏览: 146772 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

(转)OpenGL与DirectX 比较

 
阅读更多

Linux易用性差的一个重要表现是对游戏的支持性差。当然,linux也有为数众多的游戏,如纸牌,企鹅滑雪,泡泡龙,这些小游戏的可玩性绝对的windows的纸牌,扫雷之类高。
不过,我们所说的游戏是指《魔兽争霸》,《盟军敢死队》这样的大型游戏。Linux环境下缺乏这样的大型游戏,一方面是因为linux的市场占有率低,开 发商认为投入linux下的游戏成本高,难以收回;另一方面,linux不支持对于游戏来说非常重要的驱动——DirectX。
游戏驱动一般来说有两种——OpenGL和DirectX。OpenGL驱动不仅在游戏方面很重要,还在图形处理方面有举足轻重的作用。所以大家在装显卡 驱动后都可以看到OpenGL的设置选项。几乎所有的操作系统(windows,linux,MacOS)都支持OpenGL。DirectX是微软专门 为游戏设计的一套驱动(程序接口),在windows3.x的代就已有了,到现在已发布了Direct9.0。在这期间,各种游戏也呈现出爆炸性增长的势 头,不能说与DirectX没有一点关系。

 

剖析OpenGL 2.0

如果说在3D API方面,OpenGL一直领先于微软的Direct3D,你同意吗?或许你在一定程度上会赞同这一说法,因为 以前许多用OpenGL做出来的游戏(比如大名鼎鼎的QuakeⅢ)画面比Direct3D游戏精美,细节也更丰富;或许你又会说最近的Direct3D 成熟了许多,已能做到相当出色的程度,不过这是最近DirectX 8.0/9.0出现后的事情了,等到新的OpenGL 2.0出现时,情况也许又会有所不同了。

OpenGL 1.X回顾

自从1991年初以来,OpenGL API就一直是专业3D制图技术中的重要组成部分,从专业的电影特效制作到游戏,在很多领域中OpenGL都大显身手,当时用的就是OpenGL 1.X标准。OpenGL是个既开放又严格的标准,它源于著名的SGI公司为其图形工作站开发的IRIS GL,在跨平台移植过程中发展成为OpenGL(Open即开放的意思)。

在计算机3D领域,OpenGL之所以能很快抛开其他竞争对手,流行开来,很大程度上是由于从一开始OpenGL就被设计成独立于硬件和操作系统的3D API。所以OpenGL本身并不拘泥于操作系统的种类,可运行在采用不同操作系统的各种计算机上,并能在网络环境下以客户/服务器模式工作,于是自然而然地OpenGL就成了专业图形处理、科学计算等高端应用领域的标准图形API。

说到OpenGL,不得不提一下管理这个API系统的ARB组织。OpenGL本是SGI开发出来的,但后来却由成立于1992年的独立财团OpenGL ARB(Architecture Review Board) 控制,ARB成员以投票方式产生标准,并制成规范文档公布,各软硬件厂商据此开发自己系统上的应用,只有通过了ARB规范的全部测试才能称为符合 OpenGL标准。由于良好的运作机制,ARB在此后积极发展OpenGL标准,他们在1995年12月批准了1.1版本;1999年5月通过1.2.1 版;目前的最新版本是2001年8月发布的1.3版。

从1.X到2.0

虽然OpenGL并非专为游戏而生,但多数人了解OpenGL却是通过游戏。在2.0版本出现以前,OpenGL在进军桌面游戏市场时遇到了相当多的麻烦,最初的阻力来自Glide。在20世纪90年代中后期,3dfx公司用在Voodoo上的Glide 3D API凭借良好的效果和执行效率,几乎把OpenGL和Direct3D都挡在了家用游戏市场的门外。后来,从DirectX 5.0 开始崛起的Direct3D,让OpenGL很是尴尬了一阵子,因为D3D中的立方体映射、硬件T&L、可编程像素等效果所构造的3D世界,一点 也不比OpenGL差。基本上,OpenGL在Windows这个主流桌面操作系统中只有QuakeⅢ、CS等几个游戏拿得出手。

当然,在OpenGL和Direct3D的发展过程中,SGI和微软这两家分别代表OpenGL和Direct3D鼻祖的厂商,曾一度试图将 OpenGL并入DirectX中,建立一个可运行于Windows之内和之外的通用API,这将让绘图的开发提升至一个共同的架构上,这就是当时“令人 神往”的“Fahrenheit”计划。但事实证明,“Fahrenheit”计划执行起来实在太困难了,微软和SGI都期望自己的API能在计划中占据 主流,两者间的矛盾始终不能调和,计划最终不了了之。之后,微软倾其所有资源,全力投入DirectX的开发,这才有了现在DirectX的辉煌局面。

自然的,与此同时ARB也未曾放松OpenGL的开发,不过前景并不乐观。最令人失望的是,这几年唯一的进展仅是如ClearCoat、Multisample等OpenGL扩展指令的推出,而并没有实质性进展,所以OpenGL 2.0的推出迫在眉睫。

 

OpenGL 2.0草案

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

1.系统和图像构架自1992年来有了重大改变,以Glide和DirectX为主的游戏3D API开始成为家用市场的主流(或者是曾经的主流),但很显然OpenGL没有跟上节奏,至始至终都未能在家用游戏市场获得足够影响力。

2.现在的显卡功能和性能已越来越先进,但OpenGL的函数却无法发挥这些优秀硬件的性能,所以说目前的OpenGL 1.X已落后于今天先进硬件的功能和性能。

3.其实OpenGL下也有好游戏,比如QuakeⅢ,但它实现和应用的复杂性却远远胜过其他3D API,所以易用性是OpenGL当前的一个大问题。

在3Dlabs的构想中,OpenGL 2.0版本的目标是:

1.将OpenGL提升到一个新的高度,像D3D那样由核心提供全部硬件功能,以配合目前的和将来的显示硬件。

2.展示下一代可编程图像硬件的图景,使用高级语言而不是汇编对显卡编程。

3.由定义良好的核心功能取代大部分扩展功能,以可编程性取代复杂性。

4.对已有程序保持相当理想的兼容性,以使老程序不经修改便能正常运行,并保持高效。

5.对不需要兼容性的场合,提供简洁干净的核心,剔除过时的函数。

6.提高动态材质等动态媒体的功能和效率,以满足对动态媒体处理的需要。

ARB接受了3Dlabs的提议,进行OpenGL 2.0架构的开发,他们也描绘出一个清楚的发展路线。OpenGL的主要且近期的目标,就在于启动并开发硬件的可编程能力,这一点恐怕是OpenGL在游戏市场对抗微软D3D的主要武器。当然,不可否认的是,OpenGL在其他地方也需要进行更新。

 

OpenGL 2.0剖析

仅仅有一个构想是不行的,OpenGL需要实实在在地摆在人们面前,才能获得足够的支持。于是借助这个构想,经过不断的改善,现在OpenGL 2.0已有了一个相当清晰的模型。

成形后的OpenGL 2.0最重要的更新是加入了可编程能力。为使其符合大部分应用程序与用户的标准,它将像以前的OpenGL 1.X一样提供一个丰富的功能集,独立于硬件并专门在OpenGL架构下使用。

兼容性

新的OpenGL 2.0标准首先要做的是与OpenGL 1.3之间的兼容性,而且应该是完整的兼容性。为了达到这一步,3Dlabs 设计的OpenGL 2.0将由OpenGL 1.3的现有功能加上与之完全兼容的新功能所组成,这样不但可保持兼容性,还能对在ARB停滞不前的时代,各家推出的各种纠缠不清的扩展指令集进行一次彻底精简。

OpenGL之所以曾经在一段时间止步不前,就是因为有了太多混乱的扩展指令集,其中许多都是为专用应用程序而设计,虽然OpenGL是个开放的世 界,但这些自家开发的指令中却包含了自己的知识产权,自然有可能出现大量纠纷,厂商们也不愿放弃自己的利益而把这些新指令编入OpenGL标准中,让大家 共享。在过去几年中,ARB就因为这样的原因,忙于理顺内部关系,无暇思考OpenGL新技术的开发,导致了OpenGL的止步不前。因此,精简扩展指令 集是必须的。

 

OpenGL 2.0的Shading语言

2002年,NVIDIA在推动交互式3D程序开发方面投入了大量精力,其中最主要的就是Cg图形语言(即“图形技术的C语言”——C for graphics, 这是NVIDIA为超越DirectX和OpenGL而开发的高级光影效果程序语言)。NVIDIA试图把这个语言递交给ARB,希望其成为OpenGL 组织认可的标准。但最终ARB采用的Shading语言却是3Dlabs的Glslang,这套语言会虚拟资源管线,由于OpenGL的内存管理还是黑箱 作业,所有事项都会自动处理。因此对大多数程序设计师来说便不用去考虑资源管理。

 

扩展性

如果只是简单的精简,必然会导致OpenGL指令的功能下降,道理很简单,因为可使用的指令集减少了。所以在精简的同时必须扩展指令的功能,也就是说为留下来的“旧”指令定义新的功能。OpenGL 2.0增加了片段处理器的能力,取代旧有的内插值顶点数据运算、像素缩放、质材存取及应用、雾化等。可编程图像格式将取代固定格式封装和解封装运算,在传送或接收像素数据时,将允许类型与格式进行任意组合。

 

可编程性

在所有这些扩展功能中,可编程性是最吸引人的。开发者们可以借助OpenGL 2.0提供的可编程能力,以丰富且常效性的功能来取代以往的复杂功能,减少对现有及未来扩展指令的需求。

最著名的可编程功能应该是可编程顶点,它允许进行随机个别顶点运算,同时也会取代部分旧有的OpenGL管线,如顶点转换、正规转换、照明、色彩强 化、材质坐标产生及转换等。与之相关的还有可编程片断处理和可编程图像格式,其中前者主要负责材质存取、插值运算与像素运算弹性,它将取代内插值顶点数据 运算。

可编程性应该算是OpenGL2.0最吸引人的地方,至少所有的扩展应用都有了一个最起码的标准,在可编程性语言下,所有的开发都变得十分简单,而不会出现以前那样因为可能出现产权纠纷,而在研发中产生混乱。

增强数据管理性能

在OpenGL中的数据类型主要有顶点数据(色彩、正规、位置、用户定义等)以及图像数据(材质、图像、像素缓冲区)。OpenGL 2.0提供了更好的数据移动和内存管理功能,加强了应用程序对数据移动的控制能力和更好的顶点处理能力,能消除为增进数据流量而产生的数据备份,大幅提升性能。

 

厂商支持情况

ARB中庞大的厂商阵营本身就是对OpenGL 2.0强力的支持,3Dlabs在最新的专业绘图卡中也肯定会加入对OpenGL 2.0标准的强力支持。

在其他厂商方面,ATI是支持OpenGL 2.0规范中比较积极的一个,伴随着RADEON 9500/9700等系列芯片的推出,ATI在专业显卡领域也有大的动作。在前面这些家用显示芯片面市3个月后,ATI公布了FireGL专业显卡,该卡搭配128MB显存,是市场上首款支持可编程浮点结构的专业3D加速卡,在它支持的API中就包括了OpenGL 2.0。FireGL有两个版本,其一是FGL 9700 Visual Processing Unit(VPU,即视觉处理器),其二是较慢版本的FGL 9500(对应RADEON 9500芯片,被成为FireGL Z1),二者都有128MB显存。

FireGL X1-128MB在去年12月已出现在市场,建议售价为795美元;FireGL Z1也于前不久上市,建议售价为595美元,据称一款256MB版的FireGL X1也将很快上市。可见,著名的显卡厂商ATI在支持OpenGL 2.0规范上是不遗余力的,这恐怕与NVIDIA的Cg被排除在规范之外不无关系。

虽然最终ARB在Shading上采用了3DLabs的设计方案,但NVIDIA渴望在ARB占据一席之地的迫切之心一目了然。不过,一对老冤家 ATI和NVIDIA在ARB的撮合下,也开始进行和OpenGL有关的技术整合。专业市场的SGI、3Dlabs及家用市场的ATI和NVIDIA都投 入到OpenGL 2.0的怀抱中,这样的阵容已足够强大了。剩下的,就看软件开发厂商们如何用好OpenGL 2.0的新特性,为我们创造出更好、更炫目的效果了。

 

DirectX和Glide API

DirectX是微软公司专门为游戏开发的API,其最大优点就是编程方便,很容易控制程序,其中包含的函数也很容易调用,但在专业性上不如 OpenGL强。DirectX从5.0版本开始逐渐成熟起来,目前已发展到9.0版,现在大部分常见的3D游戏都支持DirectX中的 Direct3D。

Glide是曾经的3D显卡霸主——3dfx为发挥自己的Voodoo芯片的强大性能而专门设计的3D API,由于专为Voodoo系列3D加速卡设计,不用考虑太多兼容性问题,因此Glide的的执行效率远比当时的OpenGL和Direct3D高,但其缺点在于只支持Voodoo系列产品。

分享到:
评论

相关推荐

    OPENGL-DirectX详解

    介绍有关OPENGL、DirectX方面的内容

    openGL或directX环境下3D游戏开发经验谈

    ### 3D游戏开发经验分享:OpenGL与DirectX下的实践心得 #### 一、引言 随着游戏行业的不断发展,3D游戏已经成为了主流。而在3D游戏开发领域中,OpenGL和DirectX是最常用的两种图形API。本文将从作者的一线经验出发...

    Visual C++ OpenGL DirectX 三维动画编程宝典]\[Visual C++ OpenGL DirectX 三维动画编程宝典

    同时,也会讨论DirectX与其他组件如DirectInput(用于获取用户输入)和DirectSound(处理声音效果)的集成。 在实际编程中,读者会学习如何实现交互式3D场景,例如通过键盘和鼠标控制摄像机视角,以及动态加载和...

    visual.c_opengl_directx三维动画编程宝典.rar

    《视觉C++ OpenGL与DirectX三维动画编程宝典》是一份综合性的编程资源,涵盖了使用C++语言在OpenGL和DirectX这两个图形库下进行三维动画编程的重要知识点。这份资料不仅适用于初学者,也对有一定经验的程序员有很高...

    visual.c_opengl_directx三维动画编程宝典

    《Visual C++ OpenGL DirectX三维动画编程宝典》是一本深入探讨使用这三种技术进行三维动画编程的专业书籍。这本书全面覆盖了使用Visual C++作为开发环境,结合OpenGL和DirectX库来构建高性能、交互式三维图形应用...

    Visual C++OpenGL DirectX三维动画

    DirectX作为微软的图形API,可能会在此部分与OpenGL并用,以展示两者在3D场景构建上的异同和互补性。 通过这个课程,学员不仅能掌握Visual C++的编程基础,还能深入了解OpenGL和DirectX在3D图形渲染中的应用,为...

    Visual C++OpenGL DirectX 三维动画编程宝典

    与OpenGL相比,DirectX更侧重于硬件加速,尤其是在微软的操作系统上表现更佳。 ### 三维动画编程 三维动画编程是指利用计算机图形学原理和技术来创建动态的三维模型和场景的过程。在这一过程中,开发者需要掌握三维...

    Visual+C+++OpenGL+DirectX+三维动画编程宝典

    这本书主要关注于OpenGL和DirectX这两个在游戏开发中至关重要的图形库。OpenGL是一个跨语言、跨平台的编程接口,用于渲染2D、3D图形,而DirectX则是微软为Windows平台开发的一套多媒体编程接口,特别适用于高性能的...

    三维地图编辑加载3DSLoader(OpengL,Directx)

    其中的Direct3D部分与OpenGL类似,负责处理图形渲染。开发者可以根据需求选择OpenGL或DirectX,或者两者结合使用,以达到最佳的性能和兼容性。 描述中提到的3DSLoader,可能是一个实现了读取3DS文件并将其转化为...

    opengl或directX环境下3D游戏开发经验谈

    接下来,学习和实现DirectX或OpenGL的API,理解它们如何与硬件交互,完成图形绘制。 第二阶段是专注于算法和特效,包括各种图形特效如阴影、反射、折射、粒子系统等,以及场景管理和动画算法。这一阶段需要不断实践...

    Visual C++OpenGL DirectX三维动画编程宝典Visual C++OpenGL DirectX三维动画编程宝典

    《Visual C++ OpenGL DirectX三维动画编程宝典》是一本深入探讨使用C++、OpenGL和DirectX进行三维动画编程的专业书籍。对于想要在Windows平台上构建高效、动态的3D图形应用程序的开发者来说,这本书无疑是一份宝贵的...

    Visual C++ OpenGL DirectX 三维动画编程宝典

    Visual C++ OpenGL DirectX 三维动画编程宝典

    基于VC_Opengl和Directx的三维景观浏览

    基于VC_Opengl和Directx的三维景观浏基于VC_Opengl和Directx的三维景观浏览览基于VC_Opengl和Directx的三维景观浏览

    Visual+C%2B%2B+OpenGL+DirectX

    在IT领域,Visual C++、OpenGL和DirectX是三个至关重要的技术,它们分别代表了不同的图形编程方向。本文将深入探讨这些技术,并结合压缩包中的"Lesson5",推测这可能是一个关于DirectX的教程或者示例代码。 首先,...

    Visual C++ OpenGL DirectX 三维动画编程宝典源代码

    《Visual C++ OpenGL DirectX 三维动画编程宝典源代码》是一部深入探讨三维动画编程的教程,结合了OpenGL、DirectX两大图形库,并提供了丰富的源代码示例。此资源旨在帮助开发者掌握在Windows环境下使用Visual C++...

    Visual C++平台下OpenGL DirectX三维动画编程(PDF)

    总之,“Visual C++平台下OpenGL DirectX三维动画编程”这个资源将引导你进入这个充满挑战和创新的领域,通过理论学习与实践操作相结合,你可以创建出令人惊叹的3D世界。无论是希望成为游戏开发者、视觉艺术家还是...

    3D游戏引擎 directx opengl

    在3D游戏开发领域,DirectX和OpenGL是两个至关重要的图形库,它们为开发者提供了高效地绘制三维图像的工具和接口。本文将深入探讨这两个3D游戏引擎的关键知识点。 DirectX是由微软公司开发的一组应用程序接口(API...

Global site tag (gtag.js) - Google Analytics