C++ 3D数学库

6

什么是C++中最好的复杂数学库?(我想在图形引擎中使用它)

编辑:我应该稍微明确一下:它应该具有所有3D数学功能,如平面、球体、点、AABB等,当然还要支持矩阵、向量和四元数。

6个回答

7

1
我将尝试使用Geometric Tools中的Math lib - 它似乎是我正在寻找的东西,但在使用之前我必须深入检查它。 - chris
1
一些链接不会走丢... - Nick Bedford
我推荐使用Geometric Tools,它是Ogre3D数学库的基础,我提取并在许多项目中使用它。通常情况下,它比其他项目随时构建的任何数学库都要好2-3倍。 - Joseph Lisee

4

如果你正在使用OpenGL,可以尝试使用OpenGL Mathematics (glm)库。该库所有类都是基于GLSL实现的,因此在客户端和服务器端之间使用起来非常方便。


1

CGAL - 这个库提供了数据结构和算法,如三角剖分、Voronoi图、多边形和多面体上的布尔运算、点集处理、曲线排列、表面和体积网格生成、几何处理、alpha形状、凸包算法、形状分析、AABB和KD树...


非常好的库! - abu_bua

1

你的意思是最快的吗?如果你在写Windows程序,而且你在谈论向量数学、矩阵数学之类的东西,我还没有遇到比DirectX/XNA中的Math函数更快的东西。(D3DX)

DirectX不支持复数;它处理浮点数,但我认为人们在图形引擎中很少使用复数。如果你必须要用它,实现起来也很容易。


对我而言,“最好”的意思是它应该具备所有的3D数学功能,如平面、球体、点、AABB等等,当然还包括矩阵、向量和四元数支持。 - chris
1
D3DX数学函数都是静态的,可以处理所有基本的数学运算,包括四元数、三角形碰撞测试和AABB交叉测试。 (尽管我最后查看时,AABB测试不会给您一个交点,只会返回真/假;这是一个小小的失望)其余的东西,如四边形、球体、盒子、圆柱等等,使用它们底层的数学实现并不难。它们快速而且相当全面。 - R Ubben
我可以自己实现整个数学库 :) 但我不喜欢重复造轮子,我正在寻找一些经过验证的东西。D3DX对我来说太简单了,缺少我想要的许多功能。 - chris
我知道你的意思。我喜欢编写光线追踪器并尝试交点例程和加速结构 - BHV、网格、kd树等等,但是当你第十次实现向量数学库时,它开始变得乏味。这就是为什么我喜欢D3DX。快速、易于构建和可从C、C++、C#使用。 - R Ubben

0
你可能还想看一下支持SIMD的math2-matrix-vector轻量级模板库。你可以在boost vault的“Math-Geometry”文件夹中下载它。
Ogre3d框架有自己的数学库(基于WildMagic 0.2)。你可以从框架中提取并在你的应用程序中使用,因为Ogre3d >1.7是根据MIT许可证分发的。

0
你尝试过http://www.boost.org/的Boost库吗?
它可能不会提供最佳性能,但它是相当标准和跨平台的。

对不起,但boost是一个库集合,而不是一个3D数学库。问题非常模糊,但这个答案也是如此。 - Gustavo Muenz
Boost确实具有四元数。 - J-16 SDiZ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接