跳转到内容

OpenGL 编程/3D/历史

来自维基教科书,开放世界的开放书籍

早期历史

[编辑 | 编辑源代码]

IrisGL 是一种专有的图形 API,是 OpenGL 的前身。由当时计算机图形市场领导者硅谷图形公司 (SGI) 开发的 IrisGL 被用作计算机图形开放标准的起点,该标准通过避免直接硬件访问来节省应用程序移植时间。SGI 清理了 IrisGL 并将其标准开放给其他公司后,OpenGL 诞生了。

1992 年,OpenGL 架构审查委员会 (OpenGL ARB) 成立。OpenGL ARB 是一个公司组成的团体,负责维护和更新 OpenGL 标准。

扩展及其相关性

[编辑 | 编辑源代码]

Android 扩展包[1] 是 Google 标准化的 OpenGL 扩展子集,超出了 OpenGL 3.1 规范中描述的核心集。它激励设备制造商和驱动程序供应商提供这些扩展,随后激励开发人员使用它们。

OpenGL 和 Direct3D

[编辑 | 编辑源代码]

关于哪种实现比另一种更好,一直存在着巨大的争论,没有定论。这两个 API 都用于实现相同的效果,争论哪个更快或产生更好的结果是毫无意义的辩论。另请注意,Direct3D 是 DirectX 的一部分,将 OpenGL 与 DirectX 进行比较没有实际意义。

OpenGL 和 Direct3D 之间的区别

[编辑 | 编辑源代码]

OpenGL 是一个开放标准,这意味着任何希望实现它的人都可以获得其详细信息。如 OpenGL 简介中所述,几个方面参与了 OpenGL 的发展。Direct3D 是专有软件,这意味着其所有者(微软)是唯一拥有其详细信息的人,也是唯一能够改变其发展方向的实体。

OpenGL 是跨平台的。几乎所有计算机设备都实现了此 API。用 OpenGL 编写的图形引擎理论上可以在任何这些硬件(PC、MAC、游戏机、手机……)上运行。DirectX 仅限于微软。用 DirectX 编写的引擎只能在微软的操作系统上运行。

事实与谬误

[编辑 | 编辑源代码]

Direct3D 比 OpenGL 快/慢

[编辑 | 编辑源代码]

在相同条件下,两种实现都将以相同的速度运行,因为它们都由相同的图形驱动程序实现。任何性能差异都是基于有缺陷的图形驱动程序,而不是 API 本身。通常,比较在 Windows 上使用 Direct3D 运行的游戏(如《敌军总部》或《虚幻》系列)和在 Linux 上使用 OpenGL 运行的游戏,会发现其中一个比另一个运行更快,但这并非有效的比较,因为运行测试的环境不同。

OpenGL 已被 Direct3D 超越,没有未来

[编辑 | 编辑源代码]

这就像说除了微软的操作系统之外,不会再有其他操作系统。只要有几个操作系统(不仅仅是计算机),OpenGL 就将存在。

OpenGL 比 Direct3D 更/不强大

[编辑 | 编辑源代码]

同样,两种实现都依赖于图形驱动程序。两种实现都将始终在相同硬件上具有相同的功能。

OpenGL 在这些年里经历了巨大的变化,有很多过时的误导性建议

[编辑 | 编辑源代码]

这个是真的。

以上资源中的一些在今天已经过时了。

在 OpenGL 中通常有几种完成给定任务的方法,它们的速度不同

[编辑 | 编辑源代码]

同样,这个是真的。首选(更快)的方法被称为“快速路径”。

OpenGL 的现代化是企业阴谋,目的是压倒独立游戏开发者

[编辑 | 编辑源代码]
你如何期望任何独立开发者有时间和资源来处理这种复杂情况?OpenGL之所以成功是因为它很简单,但在经过多年的企业干预后,它变成了DirectX。拥抱,扩展和消灭的最佳体现。
—lennyhome

这是一个错误的解释。更实用的解释是,OpenGL 从一个高级的 3D 图形 API 变成了一个用于编程 GPU 的跨平台兼容层。从某种意义上说,现代 OpenGL 只是一个 2D API[2]。如果你是一名需要完整 3D API 的游戏开发者,直接使用 OpenGL 可能不适合你。相反,专注于你制作游戏本身的核心竞争力,并使用现有的游戏引擎(或更高层的图形 API,例如 three.js)来进行图形渲染和其他所有不构成你软件核心部分的方面。

现在和未来

[编辑 | 编辑源代码]

2003 年发布了第一个 OpenGL ES 规范。OpenGL ES 是 OpenGL 的一个子集,专为移动电话、嵌入式设备和视频游戏系统而设计。

2004 年发布了 OpenGL 2.0 规范,包括 GLSL(OpenGL Shading Language)规范。

2008 年 8 月发布了 OpenGL 3.0 规范。

  1. https://android-docs.cn/guide/topics/graphics/opengl.html#aep
  2. http://games.greggman.com/game/webgl-2d-vs-3d-libraries/
华夏公益教科书