为什么OpenGL 3+;扔掉你的眼睛?

为什么OpenGL 3+;扔掉你的眼睛?,opengl,glsl,jogl,Opengl,Glsl,Jogl,GL版本1和2包含操纵模型、视图和投影矩阵的函数,如“glLoadIdentity()”等。glu通常一起用于设置相机和查看透视图 但是,GL版本3+不再支持这些功能,这意味着您必须实现这些功能。但我不认为这样做有什么好处。我使用的是JOGL,我发现很多示例代码都是用CPU实现的,我认为CPU的性能甚至更低。有什么想法吗 现在我用PMVMatrix库来代替glu的工作。这两个图书馆有什么不同吗?还有更好的选择吗?人们经常忘记的一个重要考虑因素是OpenGL并不是为程序员设计的一个方便的界面。它旨

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

但是,GL版本3+不再支持这些功能,这意味着您必须实现这些功能。但我不认为这样做有什么好处。我使用的是JOGL,我发现很多示例代码都是用CPU实现的,我认为CPU的性能甚至更低。有什么想法吗


现在我用PMVMatrix库来代替glu的工作。这两个图书馆有什么不同吗?还有更好的选择吗?

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

当然,并不是所有的GPU都有完全相同的特性,但它们大多相当相似。而以旧式矩阵管理功能所必需的方式操纵矩阵,对于GPU来说,这并不是一个有意义的特性

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

对于矩阵堆栈操作,相应的操作只执行一次。CPU在这方面效率更高。而且,这些操作非常便宜,因此在CPU上执行它们实际上不需要考虑性能

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

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