0

我正在测试示例https://github.com/petrbroz/forge-potre-demo试图将 NWD 和点云导入 Forge 查看器,但无法使它们与坐标匹配。

我在 Navisworks 上确认 PC 和模型都在 0,0,0 对齐。但它们在查看器中位移了 200 多英尺。

我们所做的尝试

  • 点云是使用 Potree 转换的 1.6 和 1.7 https://github.com/potre/PotreeConverter/releases/tag/1.7的转换器

  • 使用 . 将点云从米缩放到英尺let scale = new THREE.Vector3(3.28084,3.28084,3.28084);

  • 模型以 0,0,0 的全局偏移量插入。globalOffset: {x:0,y:0,z:0}

  • 我们使用英尺坐标直接在 Threejs 中的已知点创建了一个球体,它与 NWD 上的位置相匹配。

  • 我们发现 potree 转换器不是 100% 与示例兼容,需要在第464 行快速修复以读取转换器创建的类别。
    var pointAttributeName = pointAttributes[i].name.toUpperCase().replaceAll(' ','_');

  • 我们还需要在第 434 行周围添加一个新类别 PointAttribute.RGBA = new PointAttribute(PointAttributeNames.COLOR_PACKED, PointAttributeTypes.DATA_TYPE_INT8, 4);

  • 如果没有这两个最新修复,我们将无法加载点云。

我们缺少什么?

我们可以手动覆盖位置,但最终坐标对项目没有意义。太随意了。这两个修复可能是问题吗?应该有什么替代方案?

4

1 回答 1

-1

我们发现了问题,Potree使用了基于实际点云边界框的绝对单位的边界框。

如果您希望点云位于场景的中心,这是有道理的。但不是我们的情况。

因此,如果您通过更改potree.js边界框集从

boundingBox.min.sub(offset);
boundingBox.max.sub(offset);

tightBoundingBox.min.sub(offset);
tightBoundingBox.max.sub(offset);

tightBoundingBox.min.sub(offset);
tightBoundingBox.max.sub(offset);
                
boundingBox.copy(tightBoundingBox);

点云将与模型对齐。

仅供参考:我们所做的修复实际上使我们能够运行 potree 转换器 1.7 而不是演示自述文件中指定的 1.6。

于 2021-05-04T00:46:30.837 回答