【问题标题】:C or ObjC for real-time raytracer on iOS?C 或 ObjC 用于 iOS 上的实时光线追踪器?
【发布时间】:2010-10-04 05:28:10
【问题描述】:

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

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

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

【问题讨论】:

  • 为什么选择 C ​​或 ObjC?在我看来,如果 OO 特性和性能都很重要,并且你想要一种 C 系列语言,我会选择 C++。
  • 你应该用真实的尺寸来描述你的容器。我怀疑 Objective C 比直接 C 慢得多,但我可能是错的,在你测量它之前你不会知道。
  • @xscott:可以。如果您花费大量时间发送消息,则发送消息而不是调用函数的开销会很大。但是对于任何特定的应用程序,正如您所说,直到您对其进行分析才能知道。
  • 硬件将在这项工作中发挥重要作用。你更有可能在 iPad 和 iPhone4(iPod 4G) 上获得成功,因为图形处理要好得多。我认为 Jerry Coffin 可能是对的,OpenCL 将为您提供更接近您所追求的速度,但是我认为 30 fps 的实时光线追踪在 iOS 设备上将是一个困难的目标。
  • 我没有意识到 OpenCL 可以在 iOS 上使用,谢谢。

标签: objective-c c ios real-time raytracing


【解决方案1】:

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

【讨论】:

  • @Ohmu:不——OpenCL 是我的想法。在这里,我们谈论的是进行计算,而不仅仅是显示。虽然您当然可以在着色器中进行计算,但如果您的目标是纯粹的计算,OpenCL 通常是实现该目标的更清晰的途径。
  • 我认为 iOS 还不支持 OpenCL...stackoverflow.com/questions/3258257/…
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      查看http://ofps.oreilly.com/titles/9780596804824/,您将获得尽可能接近的信息。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-08-24
        • 2015-03-21
        • 1970-01-01
        • 2013-04-07
        • 2011-11-18
        • 2011-10-03
        • 2021-04-30
        相关资源
        最近更新 更多