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

输入

输出
处理思路
通常我解决这种问题的思路都是确定的:
- 部署调试环境(不到万不得已,不用打日志代替调试)
- 整理思路+猜测
- 调试验证猜测
- 修改
- 验证
部署调试环境
这里因为是自己使用,我从supersplat官方仓库fork到了自己的仓库,并克隆了代码,按照说明
git clone https://github.com/Fav/supersplat.git
cd supersplat
npm install
npm run develop
重点来了,打开网页和F12 之后,需要勾选这个,否则无法进行调试

整理思路
现在我们应该关注两个问题:
- 导入时,数据读进去没有
- 导出时,数据为什么没写出去
调试修改
先看导入,怎么入手呢? 从界面入手

我们点击的是导入按钮,那就到代码里面搜索“导入”
第一步搜"导入",得到: 'file.import': '导入...',
第二步搜"file.import",得到关键字: scene.import
继续搜索,得到入口函数: importFiles(files);
ok ,打断点开始调试, 最终调试到关键函数 loadPly,并且找到关键代码和数据结构

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


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


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