为什么 OpenGL 3+ 会放弃观察矩阵操作?

Why does OpenGL 3+ throws viewing matrices manipulation away?

GL 版本 1 和 2 包含操作模型、视图和投影矩阵的函数,例如 "glLoadIdentity()" 等。并且 glu 通常一起使用来设置相机和观察视角。

但是,GL 版本 3+ 不再支持这些,这意味着您必须改为实现它们。但我看不出这样做有什么好处。我正在使用 JOGL,我发现许多示例代码使用 CPU 来实现,我认为它的性能更低。对此有什么想法吗?

现在我正在使用 PVMMatrix 库来代替 glu 的工作。这两个库之间有什么区别吗?或者有更好的选择吗?

人们经常忘记的一个重要考虑因素是,OpenGL 的设计目的不是为程序员提供方便的界面。它旨在提供图形硬件的抽象。

当然,并非所有 GPU 都具有完全相同的功能,但它们大多非常相似。以旧式矩阵管理功能所需的方式操作矩阵并不是 GPU 支持的有意义的功能。

GPU 大多是 SIMD(单指令多数据)机器。这意味着他们非常擅长对大量数据并行执行相同的操作。在经典渲染管线中,这意味着通过 运行 相同的顶点着色器并行处理许多顶点,并通过 运行 相同的片段着色器在所有顶点上并行处理许多片段。

对于矩阵堆栈操作,相应的操作只执行一次。 CPUs 在这方面效率更高。此外,这些操作非常便宜,因此在 CPU 上执行它们实际上不是性能问题。

即使在遗留管道中,这些操作通常也会在 CPU 上执行。唯一真正改变的是它们现在留给了应用程序代码,而以前它们在驱动程序代码中。

由于 OpenGL 是针对硬件抽象而不是为了方便而优化的,其想法是更高级别的库可以提供更方便的接口。在这种情况下,许多可用的矩阵库之一可以为您提供此功能的实现。