【问题标题】:Can't match coordinates of NWD and POTREE on Forge Viewer无法匹配 Forge Viewer 上 NWD 和 POTREE 的坐标
【发布时间】:2021-07-25 22:15:57
【问题描述】:

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

我在 Navisworks 上确认 PC 和模型都在 0,0,0 对齐。但它们在查看器中的位移超过 200'。

我们所做的尝试

  • 点云是使用 Potree 转换的转换器 1.6 和 1.7 https://github.com/potree/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% 兼容,需要在 line 464 上进行快速修复以读取转换器创建的类别。
    var pointAttributeName = pointAttributes[i].name.toUpperCase().replaceAll(' ','_');

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

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

我们缺少什么?

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

【问题讨论】:

    标签: point-clouds viewer forge autodesk-navisworks


    【解决方案1】:

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

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

    因此,如果您通过更改 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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-28
      • 2017-10-25
      • 2021-11-27
      • 2020-11-18
      • 2019-07-22
      • 2020-09-07
      • 1970-01-01
      • 2016-12-19
      相关资源
      最近更新 更多