快速、模板化的 C++ 八叉树实现

34

我一直在(主要是通过Google)搜索快速、高效、带有STL类似特性的模板化八叉树实现,但一直没有找到。我想在3D场景图的上下文中使用它。

这样的东西是否存在,或者人们通常自己开发呢?我希望在stackoverflow上的朋友们能知道哪里可以找到。


一般来说,如果你想要最快的解决方案,你必须自己动手实现,因为使用情况千差万别,从存储点的八叉树、存储大小元素的八叉树、更高效地存储大小元素的松散八叉树、用于体素数据的SVO、使用SPFP的八叉树、使用DPFP的八叉树、使用整数以利用更多位运算的八叉树等等。列表可以继续下去,如果你找到了一个单一的通用八叉树,它能够非常高效地满足所有可能的标准,那么它可能会非常难以使用,就像一个策略类模板一样。 - user4842163
使用16个不同的策略作为模板参数进行指定,例如,在哪个点上仅使用这样笨重的东西可能比自己编写或找到一个更窄适用范围但更接近您需求的简单而有效的示例,并根据需要进行调整。 通用数据结构往往对于像std::vector这样的简单事物很有效,将可变大小的动态数组的想法抽象出来,几乎没有性能损失(我想到的唯一原因是有人想要其他东西[...] - user4842163
如果他们想要不同的重新分配/保留策略,比如能够控制向量在满时重新分配多少内存,或者使用小于64位整数来存储大小和容量等,这些都是非常琐碎的事情。但是当你接近更复杂的结构,比如空间索引,特别是数据结构,往往基于它们所用的领域而呈现出各种各样的形状和大小时,试图寻找完美的通用工具就变得相当笨拙了,因为此时“通用”和“为我的目的而制作”的概念是不兼容的。 - user4842163
3个回答

15

24
GPL代码并不是真的为他人使用而设计的,至少在现实世界中不是这样。 ;) - Brandon Kohn

10

1
哇!非常感谢您的提示。 - mojovski

8

谢谢。很有趣,但似乎没有文档记录。 - Robinson
我的错误。找到了文档:http://docs.pointclouds.org/group__octree.html。 - Robinson
此外,还有一个test/test_octree.cpp文件可供使用。 - Lou Franco
3
如何在不包括和编译整个点云库的情况下使用它? - linello

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接