- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用光线追踪模拟开发激光雷达传感器。模拟可配置为以每秒所需的帧数运行(在我的例子中为 30 fps。即 1 帧运行时间为 33.34 毫秒)。
目前每秒进行 300000 次光线追踪(包括水平和垂直)。在 30 fps 下,每帧进行 10000 次光线追踪。代码如下所示
//call back at the start of frame (just for understanding - not the actual code, data type conversions and some other basics are ignored)
uint32 channels = 16;
float vert_angle[] = {15, 13, 11, 9, 7, 5, 3, 1, -1, -3, -5, -7, -9, -11, -13, -15};
float hor_angle_ref = 0;
uint32 points_per_second = 300000;
float rotation_frequency = 10;
/* 300000 points per second is divided into points per frame.
These points are distributed horizontally and vertically*/
void callback_scan(){
uint32 poits_to_scan_with_one_laser = points_per_second/ (fps * channels);
auto hor_angle_covered_this_frame = points_per_second* rotation_frequency * (1/fps);
auto hor_angle_resolution = hor_angle_covered_this_frame / poits_to_scan_with_one_laser ;
auto hor_angle = hor_angle_ref ;
for(auto i= 0u; i< poits_to_scan_with_one_laser ; ++i){
for(auto ch= 0u; ch< channels; ++ch){
auto hitPoint = raytrace(hor_angle, vert_angle[ch]);
// process_data(); -> distance, time and energy are calculated
/* distance -> Euclidean distance calculation and addition of noise
time -> c=d/t
energy -> Pr = Pt*pow(D,2)*nsys*natm*row/ pow(dist,2);*/
}
hor_angle += hor_angle_resolution ;
}
hor_angle_ref = hor_angle;
}
上面的代码运行得很好。一切都在 33.33 毫秒的预期时间内完成。现在需要引入效应发散https://en.wikipedia.org/wiki/Beam_divergence .
使用的解决方案:每个点取 8 个样本。即嵌套 for 循环内的 8 个光线追踪。总共 (8+1)*300000
光线追踪。此解决方案占用了大量时间,并且不可能在 33 毫秒内完成。任何人都可以建议任何其他替代方案来构建代码/算法的体系结构/我可以使用一种不同的方法来实现它,同时减少计算复杂性。
附加信息:
虚幻引擎 4.22,在 GPU 上运行
最佳答案
我没有关于您使用的引擎的基本知识,也没有您尝试实现的效果,但我知道有 2 种主要的加速光线追踪器的方法(除了明显的并行化和 GPU):
使用旧的帧/光线而不是转换更多的光线
这通常用于泛光、反射、运动模糊和类似的效果……所以简单地不是在稍微不同的方向上转换更多光线,而是使用来自最后一个或多个帧的光线……然而,这需要额外的缓冲区来存储需要最后一帧数据。如果您需要的不仅仅是结果颜色,它可能需要相当大的 RAM,尤其是对于光线追踪器。
使用随机而不是 split 光线
这是很常见的方法。你知道当光线撞击表面时它应该 split 成反射和折射光线。随机光线追踪不会 split 。相反,它取决于伪随机值,它以 50/50 的机会反射或折射。正如您在没有 split 的情况下看到的那样,为场景转换的光线要少得多。另一方面,这会产生明显的噪声(类似于弱光条件下的旧 CCD 相机图像)。可以通过将最后几帧平均在一起(或每帧对同一场景进行多次光线跟踪)来部分抑制它......
这样做的另一个优点是它不需要 GLSL 中未实现的递归,因此您可以更轻松地在 GLSL 中进行光线追踪。没有它,您将需要将递归转换为迭代,这并不简单,请参阅:
关于c++ - 降低 Unreal Engine 4.22 上 C++ 的时间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58336978/
#include using namespace std; class C{ private: int value; public: C(){ value = 0;
这个问题已经有答案了: What is the difference between char a[] = ?string?; and char *p = ?string?;? (8 个回答) 已关闭
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 此帖子已于 8 个月
除了调试之外,是否有任何针对 c、c++ 或 c# 的测试工具,其工作原理类似于将独立函数复制粘贴到某个文本框,然后在其他文本框中输入参数? 最佳答案 也许您会考虑单元测试。我推荐你谷歌测试和谷歌模拟
我想在第二台显示器中移动一个窗口 (HWND)。问题是我尝试了很多方法,例如将分辨率加倍或输入负值,但它永远无法将窗口放在我的第二台显示器上。 关于如何在 C/C++/c# 中执行此操作的任何线索 最
我正在寻找 C/C++/C## 中不同类型 DES 的现有实现。我的运行平台是Windows XP/Vista/7。 我正在尝试编写一个 C# 程序,它将使用 DES 算法进行加密和解密。我需要一些实
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
有没有办法强制将另一个 窗口置于顶部? 不是应用程序的窗口,而是另一个已经在系统上运行的窗口。 (Windows, C/C++/C#) 最佳答案 SetWindowPos(that_window_ha
假设您可以在 C/C++ 或 Csharp 之间做出选择,并且您打算在 Windows 和 Linux 服务器上运行同一服务器的多个实例,那么构建套接字服务器应用程序的最明智选择是什么? 最佳答案 如
你们能告诉我它们之间的区别吗? 顺便问一下,有什么叫C++库或C库的吗? 最佳答案 C++ 标准库 和 C 标准库 是 C++ 和 C 标准定义的库,提供给 C++ 和 C 程序使用。那是那些词的共同
下面的测试代码,我将输出信息放在注释中。我使用的是 gcc 4.8.5 和 Centos 7.2。 #include #include class C { public:
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我的客户将使用名为 annoucement 的结构/类与客户通信。我想我会用 C++ 编写服务器。会有很多不同的类继承annoucement。我的问题是通过网络将这些类发送给客户端 我想也许我应该使用
我在 C# 中有以下函数: public Matrix ConcatDescriptors(IList> descriptors) { int cols = descriptors[0].Co
我有一个项目要编写一个函数来对某些数据执行某些操作。我可以用 C/C++ 编写代码,但我不想与雇主共享该函数的代码。相反,我只想让他有权在他自己的代码中调用该函数。是否可以?我想到了这两种方法 - 在
我使用的是编写糟糕的第 3 方 (C/C++) Api。我从托管代码(C++/CLI)中使用它。有时会出现“访问冲突错误”。这使整个应用程序崩溃。我知道我无法处理这些错误[如果指针访问非法内存位置等,
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我有一些 C 代码,将使用 P/Invoke 从 C# 调用。我正在尝试为这个 C 函数定义一个 C# 等效项。 SomeData* DoSomething(); struct SomeData {
这个问题已经有答案了: Why are these constructs using pre and post-increment undefined behavior? (14 个回答) 已关闭 6
我是一名优秀的程序员,十分优秀!