便携性

CloudCompare是在C++中开发的。它目前是在Windows、Linux和Mac操作系统上编译(感谢CMake)32位和64位体系结构。

在存储和速度之间进行权衡

以下是关于CloudCompare中所做技术选择的一些细节(主要是为了实现加载尽可能多的点而不降低太多性能的目标,即在存储和速度之间进行良好的权衡)

所有存储值和大部分计算都使用32位浮点值完成

防止对数组大小的任何限制(因为在32 位Windows上很难获得大的连续内存块),我们使用一个自定义容器,自动将数据集分块成小块(每个块64KB)。

法向量(如果有)压缩到16位(实际上是15位,因为量化1的工作方式)

CloudCompare中使用的特定八叉树结构需要恒定的每点内存(即在32位操作系统上,每点8个字节—最大深度为10—在64位操作系统上为12个字节—最大深度为21!)。它基于三维点坐标的特定量化-一种Morton【2】排序方案-其中每个点在八叉树网格和任何级别上的位置都由单个整数代码表示。然后我们处理这些代码以实现非常高效的最近邻查询操作。然而,尽管这种八叉树结构对于计算距离非常有效,但它不适合快速显示( Level Of Detail (LOD) 等)

基于以上平衡选择的结果是CloudCompare每GB内存可以存储大约9000万个空白点(只含有XYZ的意思)。如果添加RGB颜色、法线向量、单个尺度字段,并且需要计算八叉树,则每GB最多可以加载3200万个点。在一个64位操作系统上,你可以加载任意多个点(事实上多达40亿)。但是,根据您的显卡功能,显示和交互性可能会因为这许多点而严重降低)。有了高端显卡,你可以保持一个合理的帧速率高达1.5亿个点。

参考文献

1 http://en.wikipedia.org/wiki/Quantization

2 http://en.wikipedia.org/wiki/Z-order_curve