有很多项目已经选择
通用图形工具包。其中的GMTL非常好用,它相当小巧、功能强大,并且被广泛使用,因此非常可靠。OpenSG、VRJuggler和其他项目都已经转而使用它,而不是他们自己手写的向量/矩阵运算。
我发现这非常好用——它通过模板实现所有功能,因此非常灵活和快速。
编辑:
在评论讨论和编辑后,我想提供一些关于特定实现的优缺点以及为什么在特定情况下你可能会选择其中之一的更多信息。
GMTL -
优点:简单的API,专门设计用于图形引擎。包括许多面向渲染的基本类型(如平面、AABB、带有多重插值的四元数等),这些类型在任何其他软件包中都没有。非常低的内存开销,速度相当快,易于使用。
缺点:API非常专注于渲染和图形,不包括通用的(NxM)矩阵、矩阵分解和求解等,因为这些超出了传统图形/几何应用的范畴。
Eigen -
优点:清晰的API,相当易于使用。包括一个几何模块,具有四元数和几何变换。内存开销较小。完整的,高性能的求解大型NxN矩阵和其他通用数学例程。
缺点:可能比你想要的范围更大(?)。与GMTL相比,几何/渲染特定例程较少(即:欧拉角定义等)。
IMSL -
优点:非常完整的数值库。速度非常快(据说是最快的求解器)。迄今为止最大、最完整的数学API。商业支持、成熟、稳定。
缺点:费用高,不便宜。几乎没有几何/渲染特定方法,因此您需要在其线性代数类之上自己编写。
NT2 -
优点:提供更熟悉的语法,如果您习惯MATLAB的话。提供了大型矩阵的完整分解和求解等功能。
缺点:数学方面,不注重渲染。可能不如Eigen性能好。
LAPACK -
优点:非常稳定,经过长时间证明的算法。存在已久。完整的矩阵求解等。许多晦涩的数学选项。
缺点:在某些情况下性能不如其他库。从Fortran移植而来,使用奇怪的API。
对我来说,问题归结为一个问题 - 你计划如何使用它。如果你只关注渲染和图形,我喜欢通用图形工具包,因为它表现良好,并支持许多有用的渲染操作,无需自己实现。如果你需要一般目的的矩阵求解(即:大矩阵的SVD或LU分解),我会选择Eigen,因为它处理这个问题,提供一些几何操作,并且在大矩阵解决方案方面非常高效。您可能需要编写更多自己的图形/几何操作(在它们的矩阵/向量之上),但那并不可怕。