问题描述
3dtiles模型生成后,在Cesium中显示时,y轴向上,z轴向上,x轴向上,导致模型显示异常,无法正常显示
问题原因
WebODM是先生成glb模型,而后再进行3dtiles转换; glb模型一般是y轴向上,所以转换后的3dtiles模型也是Y轴向上;WebODM生成的3dtile是使用其自研的Obj2Tiles🔗进行转换的,但Obj2Tiles其实是有z-up的api配置; 由于WebODM在调用Obj2Tiles的时候没有做z-up的配置选项,故而需要修改调用源代码;
解决思路
修改ODM🔗仓库内的ogctiles.py🔗代码,如下:
python
# .......上文忽略......
try:
kwargs = {
'input': input_obj,
'output': output_path,
'divisions': divisions,
'lat': lat,
'lon': lon,
'alt': alt,
}
system.run('Obj2Tiles "{input}" "{output}" --divisions {divisions} --lat {lat} --lon {lon} --alt {alt} '.format(**kwargs))
# 改为以下↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
try:
kwargs = {
'input': input_obj,
'output': output_path,
'divisions': divisions,
'lat': lat,
'lon': lon,
'alt': alt,
}
CmdStr = 'Obj2Tiles "{input}" "{output}" --divisions {divisions} --lat {lat} --lon {lon} --alt {alt}'.format(**kwargs)
# 方向转换,空格不可缺
CmdStr += ' --y-up-to-z-up'
system.run(CmdStr)
# .......下文忽略......
具体操作
WebODM安装参考: 透過WSL2在Windows執行WebODM🔗
在docker中安装好WebODM仓库后,使用docker命令行进入 名称为
webodm-node-odm-1的容器中, cd进入仓库目录 /code/opendm,然后修改其文件下的ogctiles.py文件
shell
# 1. 查看容器列表,找到odm服务容器,一般名称都为 webodm-node-odm-1
docker ps -a
# 2. 将容器内的文件复制到服务器目录下
docker cp webodm-node-odm-1:/code/opendm/ogctiles.py /服务器某个目录/ogctiles.py
# 3. 将文件中的代码添加--y-up-to-z-up,如上述代码
# 4. 将修改后的文件复制回容器中
docker cp /服务器某个目录/ogctiles.py webodm-node-odm-1:/code/opendm/ogctiles.py
# 5. 进入容器内部
docker exec -it webodm-node-odm-1 bash
# 6. 查看文件是否已更改
cat /code/opendm/ogctiles.py
# 7. 如未更改则重新复制,已更改则重启docker应用