我正在考虑在我的渲染器中使用英特尔 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/