3

是什么让 OpenGL 与众不同?我听说人们从 OpenGL 3.x 开始就不喜欢 OpenGL,但是发生了什么?我想学习OpenGL,但不知道是哪一个。我想要新版本的出色图形,但有什么不好?

4

4 回答 4

4

一般来说,OpenGL的每个主要版本都大致相当于一个硬件一代。这意味着通常如果您可以运行 OpenGL 3.0 卡,您也可以运行 OpenGL 3.3(如果您有足够新的驱动程序)。

OpenGL 2.x 是支持 DX9 的一代硬件,OpenGL 3.x 是 DX10,而 OpenGL 4.x 是 DX11 一代硬件。没有 100% 精确的重叠,但这是一般情况。

OpenGL 1.x 围绕着即时模式(从概念上讲非常易于使用)和严格固定的功能管道。入门门槛非常低,因为几乎没有什么需要学习的,也几乎没有什么可以做错的。
缺点是您有更多的库调用,并且 CPU-GPU 并行性在此模型中不是最佳的。这在旧硬件上并不重要,但对于从新硬件中获得最佳性能变得越来越重要。

从 OpenGL 1.5 开始,在 2.x 中越来越多,从立即模式保留模式有轻微的范式转变,即使用缓冲区对象和一些可编程的管道。顶点和片段着色器可用,具有不同的功能集和可编程性。
这些版本中的大部分功能是通过(通常是特定于供应商的)扩展来实现的,有时只是中途或几个不同的步骤,并且不少功能对临时程序员(例如寄存器组合器,缺乏分支、指令和依赖纹理提取的限制、支持提取的 vtf 支持)。

在 OpenGL 3.0 中,已弃用固定功能,但仍支持作为向后兼容功能。几乎所有的“现代 OpenGL”都是作为 OpenGL 3.x 的核心功能实现的,具有明确的要求和保证,并且具有(几乎)完全可编程的管道。编程模型完全基于使用保留模式和着色器。除了顶点和片段着色器之外,还提供几何着色器。
版本 3 收到了很多负面批评,但在我看来这并不完全公平。出生过程无疑是一场公关惨败,但结果并不全是坏事。与以前的版本相比,OpenGL 3.x 是幸福的。

OpenGL 4.x 有一个额外的曲面细分着色器阶段,它需要 OpenGL 3.x 兼容硬件中不存在的硬件功能(尽管我敢说这是一个营销原因,而不是技术原因)。支持旧硬件也无法处理的新纹理压缩格式。
最后,OpenGL 4.x 引入了一些与底层硬件无关的 API 改进。这些也可以在 OpenGL 3.x 下作为 100% 相同的核心扩展使用。

总而言之,我对开始学习 OpenGL 的每个人的建议是立即从3.3版本开始(如果您使用 Apple,则从 3.2 版本开始)。

如今,兼容 OpenGL 3.x 的硬件几乎无处不在。没有理智的理由去假设任何更旧的东西,而且你会为自己省去很多痛苦。从经济的角度来看,支持任何旧的东西是没有意义的。入门级 GL4 卡目前的价格约为 30 美元。因此,买不起 GL3 卡的人也将无法为您的软件付费(不过,维护 2 个代码路径的工作量是两倍)。
此外,您最终将别无选择,只能使用现代 OpenGL,因此如果您从 1.x/2.x 开始,您将不得不忘记并在以后重新学习。

另一方面,直接进入 4.x 版本是可能的,但我建议暂时不要这样做。API 中不依赖于硬件的任何东西在 3.x 中也可用,并且曲面细分(或计算着色器)通常不是一次性绝对必要的,您可以随时添加。

于 2012-12-14T09:50:16.637 回答
1

对于更改的确切列表,我建议您下载每个 OpenGL 主要版本的最新规范文档。在每一个的末尾都有几个附录,详细记录了版本之间的变化。

于 2012-12-14T08:57:29.270 回答
1

大约一年前设计的许多配备英特尔集成显卡的笔记本电脑不支持 OpenGL 3。

这包括一些昂贵的商用机器,例如 1600 美元的 Thinkpad x201,截至今天(2013 年 4 月 3 日)仍在亚马逊上出售(尽管联想已经停止生产),

于 2013-04-02T20:14:31.833 回答
0

OpenGL 3.1 移除了“固定功能管道”。这意味着编写顶点和片段着色器不再是可选的:如果你想显示任何东西,你必须编写它们。这使得初学者更难在 OpenGL 中编写“hello world”。

OpenGL Superbible Rev 5很好地教您使用现代 OpenGL,而无需依赖于固定功能管道。如果我从头开始学习 OpenGL,我会从那里开始。

如果您想从更“历史”的方法开始,他们的第 4 版仍然涵盖固定功能管道。

于 2012-12-14T02:18:02.127 回答