c++ - 我应该通过 API 还是通过项目的源代码本身使用英特尔 Embree?

标签 c++ raytracing pbr embree

我正在考虑在我的渲染器中使用英特尔 Embree,目前正在研究 Embree 教程。

那么,问题是,是否可以通过 API 高效地使用 Intel Embree?

我的意思是,我可以看到 <embree2/rtcore.h>, <embree2/rtcore_ray.h>, e.t.c 中的函数使用一些内部数据结构,如 RTCRay . 显然,因为我不能重载任何运算符,所以我总是必须将我的数据结构转换为 Embree 数据结构,反之亦然。 这甚至不仅仅是类型转换,而是新对象的构造。

例如,在调用 rtcIntersect(RTCScene scene, RTCRay ray); 之前我 build 了RTCRay来 self 的射线 Ray类对象,然后当函数返回一些数据时,我将一些值复制回来。

这看起来不是使用 Intel Embree 的好方法。

最佳答案

我直接从预构建的二进制文件中使用了 API。缺点是没有 vector 或矩阵功能可供使用,但从好的方面来说,这意味着您可以使用任何其他您想要的库,这不是为您决定的。我使用了开源的单一头文件 linalg.h让事情变得简单。

这是我的 EmbreeTest具有单个 Main.cpp 的项目让你开始的文件。只需使用 Embree installer这就是您所需要的。

至于效率,如果您从这个项目开始,您应该能够确定是否存在任何性能瓶颈,因为它除了调用 Embree 之外几乎什么都不做。光线转换方法只是将我计算出的光线组织和目录复制到堆栈上的 RTCRay 结构中。我认为这不会有太大的开销。重组以一次转换多条射线肯定会比拷贝对性能产生更大的影响。

关于c++ - 我应该通过 API 还是通过项目的源代码本身使用英特尔 Embree?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43947729/

相关文章:

c++ - 试图使 std::make_pair 接受超过 2 个参数

java - Java:光线追踪:光面反射着色

reflection - BRDF 通常是如何实现的?

c++ - blender :不可能的立方体

ios - SceneKit:如何在不禁用 PBR 的情况下在 iOS 10 上重现 iOS 9 灯光颜色效果(一个方向,一个环境)?

blender - 开放着色语言(OSL)在新 Material /BSDF 方面到底有哪些限制?

c++ - 如何在每次迭代中创建新 vector ?

c++ - 在结构中使用 getline 获取 char 类型名称

c++ - Qt:如何使装饰丰富的弹出窗口代替默认的QSystemTrayIcon弹出窗口

c++ - 光线追踪:转换问题