想写一个光线跟踪器,坚持使用什么代数库(C ++)

时间:2011-01-12 21:20:51

标签: c++ raytracing algebra

我一直想用C ++编写自己的多线程实时光线跟踪器,但我不想实现它附带的所有矢量和矩阵逻辑。我想我会做一些研究,为此找到一个好的图书馆,但我没有取得多大成功......

实施很快很重要,最好是附带一些友好的许可。我已经读过boost有基本代数,但我找不到关于速度有多好的任何内容。

其他方面,谷歌给了我Armadillo,声称速度非常快,并将自己与其他一些我没有听说过的图书馆进行比较。
然后我得到Seldon,虽然我无法确定它们在规模上的确切位置,但它也声称效率高且方便。
最后我读到了Eigen,我在这里搜索时也在StackOverflow上看到过。

在我大学的CG讲座中,他们使用HLSL代数(让学生实现/优化光线跟踪器的部分),让我思考是否可以使用GLSL这个。同样,我不知道哪个选项最有效,或者对代数库的一般共识是什么。我希望SO可以帮助我,所以我可以开始一些真正的发展:)

PS:我尝试过链接到网站,但我还没有足够的代表

5 个答案:

答案 0 :(得分:12)

我建议您编写自己的例程。当我编写我的光线跟踪器时,我发现大多数代数都使用相同的小方法集合。基本上你需要的是一个支持加法,减法等的矢量类。从那里你真正需要的是Dot和Cross。

说实话,使用GLSL并不会给你带来更多的东西(它们只支持点,交叉和简单的矢量数学,其他一切都必须手工编码)。我还建议使用C ++进行原型设计,然后再转向CUDA。调试GPU代码相当困难,因此您可以在CPU中使用它然后重新编码以便在CUDA中工作。

实际上光线追踪器相当简单。这让他们很快就很难。这是加速结构,需要花费大部分时间和优化。至少它对我有用。

答案 1 :(得分:2)

你应该看一下http://ompf.org/forum/

这个论坛主要用C ++来处理实时光线追踪。它会给你指针和样本源。

大多数情况下,每个循环计数,人们不依赖于外部矢量数学库:优化取决于您正在使用的编译器,内联,使用SSE(或种类)或不使用等等。

答案 2 :(得分:1)

我推荐“IlmBase”是OpenEXR包的一部分。它是由ILM开发的精心编写的C ++,并且被专业编写和使用图形软件的人广泛使用。

答案 3 :(得分:0)

对于我使用glm的项目,也许它也适合你。

请注意boost::ublasseldon这样的库可能不适合您,因为它们是面向BLAS的(我假设您正在寻找一个好的3D驱动线性代数库)。

此外,dxmath DirectX库非常好,虽然有时很难使用,因为它兼容C语言。

答案 4 :(得分:0)

您可以查看POVRAY

的源代码