supersplat导出数据丢失信息问题处理

supersplat导出数据丢失信息问题处理

来由

目前我手里的3DGauss数据有两类,一种是带GPS信息的,一种是不带GPS信息的,不带GPS信息的需要指定经纬度,才能跟地图叠合,但往往需要多次调整位置;但是带GPS信息的是不用给经纬度的,不过如果使用supersplat删除了一些飞点,再保存的话,有些信息就会丢失,非常不方便,我们今天就来尝试通过修改源码解决这个问题。

01

输入

01

输出

处理思路

通常我解决这种问题的思路都是确定的:

  1. 部署调试环境(不到万不得已,不用打日志代替调试)
  2. 整理思路+猜测
  3. 调试验证猜测
  4. 修改
  5. 验证

部署调试环境

这里因为是自己使用,我从supersplat官方仓库fork到了自己的仓库,并克隆了代码,按照说明

git clone https://github.com/Fav/supersplat.git
cd supersplat
npm install
npm run develop

重点来了,打开网页和F12 之后,需要勾选这个,否则无法进行调试

01

整理思路

现在我们应该关注两个问题:

  1. 导入时,数据读进去没有
  2. 导出时,数据为什么没写出去

调试修改

先看导入,怎么入手呢? 从界面入手

01

我们点击的是导入按钮,那就到代码里面搜索“导入”

第一步搜"导入",得到: 'file.import': '导入...',
第二步搜"file.import",得到关键字: scene.import
继续搜索,得到入口函数:  importFiles(files);

ok ,打断点开始调试, 最终调试到关键函数 loadPly,并且找到关键代码和数据结构

01

而且通过调试可以发现我们要的信息是读取到了,那么接下来就用同样的方法搜索导出的代码,顺藤摸瓜,找到关键函数 serializePly

01
01

验证

修改之后需要先关闭服务,重新打包,发现信息没缺失,使用自己弄的工具生产成3dtiles,位置也是对的

01
01

总结

思路清晰,加上这份源码很整洁,总共没花多少时间解决了当前问题,但是没有评估对于整个项目的影响,先自己用着吧~~

发表评论