有相当多的项目已经解决了通用图形工具包。这里的GMTL非常好——它非常小,功能非常强大,并且被广泛使用,非常可靠。OpenSG、VRJuggler和其他项目都改用了这种方法,而不是他们自己手工制作的vertor/矩阵数学。
我发现它非常好——它通过模板完成所有的事情,所以它非常灵活,非常快。
编辑:
在评论讨论和编辑之后,我想我应该介绍一些关于特定实现的优点和缺点的更多信息,以及根据您的情况选择其中一种而不是另一种的原因。
GMTL -
优点:简单的API,专门为图形引擎设计。包括许多面向渲染的基元类型(例如平面、AABB、具有多重插值的四元数等),这些基元类型不在任何其他包中。非常低的内存开销,非常快,易于使用。
缺点:API非常专注于渲染和图形。不包括通用(NxM)矩阵、矩阵分解和求解等,因为这些超出了传统图形/几何应用程序的领域。
艾根 -
优点:干净的API,相当容易使用。包括一个几何模块与四元数和几何变换。低内存开销。大型NxN矩阵和其他通用数学例程的完整、高性能求解。
缺点:可能比你想要的范围大一些。与GMTL相比,更少的几何/渲染特定例程(例如:欧拉角定义等)。
IMSL -
优点:非常完整的数字库。非常非常快(据说是最快的求解器)。迄今为止最大、最完整的数学API。商业支持,成熟,稳定。
缺点:成本——并不便宜。很少有特定的几何/渲染方法,所以你需要在他们的线性代数类之上滚动你自己的方法。
NT2 -
优点:如果您使用过MATLAB,则提供更熟悉的语法。提供大型矩阵的完整分解和求解等。
缺点:数学化,不聚焦渲染。可能没有Eigen表现得好。
LAPACK -
优点:非常稳定,经过验证的算法。已经存在很长时间了。完整的矩阵求解等。许多晦涩的数学选项。
缺点:在某些情况下性能不高。从Fortran移植,使用奇怪的API。
Personally, for me, it comes down to a single question - how are you planning to use this. If you're focus is just on rendering and graphics, I like Generic Graphics Toolkit, since it performs well, and supports many useful rendering operations out of the box without having to implement your own. If you need general purpose matrix solving (ie: SVD or LU decomposition of large matrices), I'd go with Eigen, since it handles that, provides some geometric operations, and is very performant with large matrix solutions. You may need to write more of your own graphics/geometric operations (on top of their matrices/vectors), but that's not horrible.