1

我开始为 iOS 构建一个实时光线追踪器。我是这个光线追踪的新手,到目前为止我所做的只是在 ObjC 中编写一个基本的。在我看来,基于 C 的光线追踪器会比用 ObjC 编写的更快,但 ObjC 会简单得多,因为对象层次结构非常方便。不过,速度非常重要,因为我希望它是实时的,比如 30 fps。

你对 C 的加速是否值得额外的复杂性有什么看法?我可以预见 C 代码需要更长的时间,并让我因许多错误而头疼(尽管我对 C 并不陌生),但最初追求更高的速度是很诱人的。

有没有用 C 编写的光线追踪器的例子?我在谷歌上搜索这些东西被很多 C++ 和 C# 的结果所污染。

4

4 回答 4

1

如果您想要快速的光线追踪,您几乎可以忘记使用C或 Objective C。您几乎肯定想要使用 OpenCL。它仍然不足以让你(甚至非常接近)30 fps,但它可能至少是在 CPU 上运行的任何东西的两倍(并且快 5-10 倍也不足为奇) )。

于 2010-10-04T06:02:15.770 回答
0

正如 zneak 所说,c++ 是速度和多态性的最佳组合。

但是,您可以通过减少 objc 调用来完成一些接近的事情(阅读:将多态接口减少到所需的最小集合,然后只需将需要快速的部分放入纯 c 或 c++ 中)。

objc 消息调度非常快,您通常可以从接口中删除大部分虚拟/动态方法(假设每个 objc 实例方法都是虚拟的)。objc 方法中的 c 代码仍然是 c 代码...从那里确定您的瓶颈在哪里——在更改工作代码之前进行分析也没有什么坏处;)

于 2010-10-04T06:50:25.397 回答
0

编写“实时光线跟踪器”无需使用手动优化程序集(或使用“廉价”英特尔编译器;),但这对于该平台是不可能的),因为您需要速度,所以这是不可能的。

此外,您还需要大量的处理能力,但我想即使是 OpenCL 路径也不够强大(在我看来,即使是真正的桌面机器也是如此,原因是图形处理器上缺乏真正的大缓存)。

于 2010-10-06T15:34:54.920 回答
0

看看http://ofps.oreilly.com/titles/9780596804824/ 就可以了。

这不是光线追踪,我写了一个光线追踪器,这是一项巨大的工作。GL 对图形使用了不同的技术,因此它无法例如渲染钻石捕捉光线的能力。该链接包含示例代码,您可以下载并运行它。您会意识到,即使是一些中等复杂的示例也确实在实际设备上运行……我们说的是 < 1 fps。

于 2011-06-25T13:16:15.050 回答