10

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

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

其余的,谷歌给了我Armadillo,它声称非常快,并将自己与我没有听说过的某些其他库进行比较。
然后我得到了Seldon,它也声称高效且方便,尽管我无法找到它们在秤上的确切位置。
最后我读到了Eigen,我在 StackOverflow 上搜索时也看到了这里提到的内容。

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

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

4

5 回答 5

12

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

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

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

于 2011-01-12T21:29:04.413 回答
2

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

该论坛主要介绍实时光线追踪,主要使用 C++。它将为您提供指针和示例源。

大多数时候,随着每个循环计数,人们不依赖外部向量数学库:优化取决于您使用的编译器、内联、是否使用 SSE(或 kindof)等。

于 2011-01-12T22:59:46.850 回答
1

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

于 2011-01-12T23:11:18.900 回答
0

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

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

此外,dxmathDirectX 库非常好,虽然有时很难使用,因为它是 C 兼容的风格。

于 2011-01-12T22:14:58.720 回答
0

您可以查看POVRAY的源代码

于 2011-01-12T22:26:31.593 回答