为什么OpenGL 3+会抛出查看矩阵操作?

时间:2015-03-04 07:02:37

标签: opengl glsl jogl

GL版本1和2包含操作模型,视图和投影矩阵的函数,例如“glLoadIdentity()”等。通常使用glu来设置相机和查看透视图。

但是,GL版本3+不再支持这些,这意味着您必须实现这些。但我认为这样做没有任何好处。我正在使用JOGL,我发现许多示例代码都是用CPU做的,我认为它的性能更低。有关于此的任何想法吗?

现在我正在使用PMVMatrix库来取代glu的工作。这两个图书馆之间有什么不同吗?或者更好的选择?

1 个答案:

答案 0 :(得分:3)

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

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

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

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

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

由于OpenGL针对硬件抽象进行了优化而不是为了方便,因此更高级别的库可以提供更方便的界面。在这种情况下,许多可用的矩阵库中的一个可以为您提供此功能的实现。