opengl和directx是主要用于游戏开发的两个图形api。它们被开发为在图形硬件和软件之间充当桥梁。它们都提供了标准化的方法来在屏幕上显示2d和3d图形,并且对于游戏开发至关重要。然而,在游戏之外,只有opengl针对专业图形市场。这个opengl vs. directx的比较应该能给你一个关于哪个工具最适合你的想法。
opengl vs. directx:并排比较
下表比较了directx和opengl之间的主要规格和特性:
规格 | opengl | directx |
---|---|---|
开发者 | khronos | microsoft |
操作系统 | windows,linux,macos | windows,dreamcast,xbox |
api范围 | 2d和3d图形 | 图形,音频,网络等 |
支持的文件格式 | .obj,.3ds | .c4d,.max,.3ds,.3dm,.obj,.fbx,.ma等 |
引擎兼容性 | unity,unreal | unity,unreal |
更新 | 每年一次 | 每年一次 |
opengl vs. directx:有何区别
如今的网络和移动游戏玩家期望融合出色内容和响应能力的无缝体验。开发人员对于directx和opengl之间哪个api更流畅和更高效存在很多争议,大多数意见倾向于后者,因为它是跨平台的。然而,找出到底哪个api才是最好的唯一办法就是通过测试每个api的性能、资源管理和易用性。
性能
opengl和directx具有类似的功能,并依靠相同的图形管线来构建复杂的图形基元。这些管线称为顶点,存储坐标和其他重要信息,但是每个api使用这些顶点来开发2d和3d图形的方式是不同的。
它们还使用不同的顶点库,这意味着每个api对开发者的命令的响应也不同。例如,opengl的缓存几何图形由显示列表组成,而directx的缓存几何图形由顶点缓冲区组成。opengl可以生成没有现有硬件的系统仿真,而directx则允许应用程序确定是否需要硬件存在。
这导致性能上的差异。开发人员通常使用unity platformer和unity carting来测试这两个api的性能,因为它们与unity兼容。
unity platformer是一个免费的2d微游戏模板,允许开发人员创建简单的boulder dash风格游戏。在简单的玩家和敌人设置中,directx可以生成大约770帧的平均帧率。与此同时,opengl的平均帧率约为515帧。两个结果都可以玩,但是差异非常明显,有利于directx。
在测试3d性能时,情况似乎也是如此。这可以通过unity carting来实现,它是另一个免费的微游戏模板,允许用户构建简单的赛车游戏。如预期,与2d相比,性能下降了,但是directx仍然可以以大约365帧的帧率胜过opengl,而opengl仅能生成约280帧。
所以,即使有人声称opengl是最好的,directx可能更好 – 尤其适用于为xbox和windows平台创建游戏的开发人员。当然,由于directx不是跨平台api,对于其他所有操作系统来说,opengl是明显的选择。
opengl超级圣经:全面教程和参考
$37.99
在亚马逊上购买
如果您购买,我们将获得佣金,而不会增加额外费用。
硬件管理
opengl和directx之间的另一个主要区别是每个api管理其硬件资源的方式。这是因为directx最初并未设计用于分配硬件资源。微软仅在directx 7及以上版本中包含了这种可能性,主要是为了提供硬件加速支持,并提高对较复杂游戏的响应速度。
然而,此api仍然允许开发人员禁用自动硬件资源管理。通过这种方式,您可以根据需要分配资源,从而在开发简单图形时提高效率。
对于opengl,开发人员不必担心硬件资源管理。该api会自动优化资源,以确保最终的游戏体验。然而,如果需要,资源分配无法进行微观管理。这个自动过程也可能让开发人员初始时更加困难。然而,一旦熟悉了界面,这个过程通常会变得更加顺利。
易用性
api的易用性曾经是决定选择一个api而不是另一个的关键因素。然而,今天,大多数api都在像unreal或unity这样的引擎后面运行。由于这两个引擎都与opengl和directx兼容,只需点击一个按钮即可从一个api切换到另一个。
如果您从头开始开发游戏并且不想使用引擎,情况就会有所变化。在这种情况下,opengl在使用上要简单一些。除了硬件资源管理之外,该api只处理图形,这使其本质上更简单。opengl还允许跨平台功能,这是它的另一个优点。
无论您决定是否使用引擎,directx和opengl都有详细的文档,可以使开发更加轻松。除了定期更新的文档和指南之外,这两个api还有有用的开发人员社区,可以平缓学习曲线。
使用directx 12进行3d游戏编程简介
$59.95
在亚马逊上购买
如果您购买,我们将获得佣金,而不会增加额外费用。
目的
这些api可以实现的实际功能和效果也有所不同。opengl使开发人员能够使用双面光照,定义参数曲线和曲面,添加体纹理和立体渲染等。directx无法通过direct3d执行任何这些功能,但套件中的其他api(如directsound、directplay或directdraw)可以处理它们。
directx实际上是一个api套件,而不是一个独立的程序,这是微软的创意超越了仅仅是一个图形api的第一个线索。实际上,它还支持声音、音乐、网络、多媒体和输入。这是directx和opengl之间的一个重要区别,后者严格是一个图形api。
平台兼容性
另一个主要的区别是directx是专门为windows、dreamcast和xbox等微软产品开发的。然而,opengl是一个跨平台的api,可以在不同的操作系统上工作,并且可以与各种硬件类型配对,如nvidia或amd显卡。
opengl vs. directx:必知事实
- directx是为微软操作系统和游戏机(windows、dreamcast和xbox)开发的api套件。opengl是一个跨平台的api,适用于windows、linux、macos等操作系统和各种游戏机。
- directx和opengl都与unity和unreal等引擎兼容。
- opengl从一开始就具备硬件加速和硬件资源管理的功能。而这个选项只在directx 7及以上版本中可用。
- directx套件直接解决游戏性能问题。opengl首先面向图形专业人员,然后面向游戏开发者。
- 人们常常认为opengl是两者中最快的,但是游戏开发测试表明directx的性能超过了前者。
- opengl只能用于创建2d或3d图形。directx包括提供声音、音乐、来自游戏手柄或键盘的输入等支持功能的功能。
opengl vs. directx:哪个更好?你应该使用哪个?
directx和opengl是游戏开发者用于创建快速响应的应用程序的类似api。它们都使用顶点,但最初是为不同的目的而创建的。因此,directx通常是为开发者创建windows或xbox游戏的最佳选择。
directx套件包括各种api,可用于开发2d和3d图形,然后将这些图形与声音、音乐、游戏手柄、键盘、鼠标移动等链接起来。这个api与unity和unreal兼容,并生成快速响应的游戏。
然而,如果您是一个只关心开发2d或3d图形的图形专业人员,无论平台如何,opengl都是最好的选择。它还是除了windows或xbox之外任何平台上开发游戏的明显选择。opengl与各种操作系统和gpu类型兼容,并且还可以与unity或unreal集成,轻松开发游戏。
此帖子顶部的图片由©tippapatt/shutterstock.com提供。