【发布时间】:2016-11-17 19:32:10
【问题描述】:
我有一个由外部库 Assimp 在其自己的 aiVector3D 类中加载的点数组(它没有组件访问器函数,只是对成员变量的公共访问),我想使用 CGAL 的 Point Set Processing 库来处理这些点。
由于我拥有数以千万计的这些积分(有一天可能会达到数十亿),如果我能提供帮助,我不想创建一个新的 CGAL Point_3s 数组。
如果他们实现了相应的属性映射,这个包的用户可以使用其他类型来表示位置和法线。
这似乎意味着我可以通过创建一个将aiVector3D 映射到Point_3 的属性映射来实现我想要的,但是在阅读了 CGAL 和 Boost 的文档之后,我不清楚我将如何去做。
我认为这是正确的方法吗?如果是这样,我该怎么做?
【问题讨论】:
-
我相信您高估了将点复制到 cgal 点向量的成本。您可以使用将 aiVector3D 动态转换为 cgal 点的点属性图进行管理(有关创建此类属性图的简单方法,请参见 boost::function_property_map),但我怀疑节省的费用是否值得。
-
我想避免简单复制的两个原因,1) 输入点集一天可能有数十亿个,并且在内存中有两个副本可能会导致问题。 2)它只是不似乎优雅。 1) 可以通过内存映射文件来缓解,2) 可以放在抽屉里并忽略 :) 我会尝试
boost::function_property_map,并运行一些基准测试。
标签: c++ boost cgal point-clouds assimp