Cesium中导入三维模型方法(dae到glft/bgltf)[转]
Cesium中导入三维模型方法(dae到glft/bgltf)
Cesium中目前支持gltf和bgltf两种格式。“gltf是khronos组织(起草OpenGL标准的那家)定义的一种交换格式,用于互联网或移动设备上展现3d内容,充分支持opengl,webgl,opengles图形加速标准”[1];bgltfg则是二进制格式的gltf扩展,cesium从1.10后开始支持该格式,其能减少模型数据的大小有利于网络传输,并且提高10%-30%的模型加载速度。
目前gltf和bgltf都可以通过dae格式的三维模型转换而来。其中gltf的转换工具可以在https://github.com/KhronosGroup/glTF/wiki/Converter-builds获取----colladaTogltf.exe,其能完成.dae到.gltf三维模型格式的转换。而dae转换到bgltf的工具可以在
https://github.com/virtualcitySYSTEMS/colladaToBglTFConverter中获取-- colladaToBgltfConverter.jar,该工具是首先将dae通过colladaTogltf.exe转换为gltf格式,然后在把gltf转换为bgltf,所以要使用该工具同时需要下载colladaTogltf.exe工具。
1 数据预处理
一般的模型格式,比如obj、3ds、fbx都可以先通过3dmax或者其他的建模工具(blender等)先转换为dae格式后再使用,但是在转换处理时要注意:
1. Gltf的纹理贴图的格式不能是tga,可以在3dmax转换为dae格式时同时转换纹理格式为png、bmp或者 jpg格式。我在处理时把max数据转为了obj,在导出为obj时有如下设置,即可完成纹理格式的转换(我转为了png)

2. 注意转换后的格式模型的几何数据中引用的纹理路径。尽量不要出现绝对路径。其实这个问题在格式转换时几乎不会产生,比如我这里使用了obj的纹理路径在./maps文件夹下。在以后的模型拷贝或者移动的同时把纹理文件夹一起拷贝就不会出问题。
2 数据转换
2.1 daeTogltf
使用colladaTogltf.exe把dae数据转为gltf格式。通过cmd进入到colladaTogltf.exe所在的文件夹,使用如下命令即可:
collada2gltf.exe–f daePath -e或者collada2gltf.exe–f daePath -o gltfPath
这里的daePath为dae文件的全路径,比如C:\Test.dae,有博客说不把dae、gltf、exe文件放一个文件夹下会报错,但是可能现在的版本已经解决好了这个bug,所以你也可以把三者放同一个文件下,那样的话这里的daePath就只要提供dae文件的名字即可,比如test.dae,gltf。同样只要一个文件名即可。
另外这里使用-e命令选项的意思是把转换后的gltf只输出为一个文件,其把几何和纹理数据一起打包在一起;-o命令则一般输出3个格式.bin、.gltf、.glsl。(Cesium在1.16后提供了纹理和几何异步加载的机制,这样就建议不要用-e了)
转换成功时的命令行会输出转换过程中转换的一些信息,包含了几何和动画信息,并且转换后的gltf会在exe或者指定的文件夹下。如下图。

2.2 daeTobgltf
对于转换为bgltf也是同样的道理。把collada2gltf.exe和colladaToBgltfConverter.jar放到同一个文件夹下,cmd进到该文件夹,通过如下命令格式可以进行转换。
java -jar colladaToBglTFConverter.jar -ccollada2gltf.exe -i inputPath -o outputPath
这里inputPath只需指明dae格式所在文件夹,outputPath则是输出格式的文件夹。转换后的输出为:
转换后的数据在指定输出文件夹下。

3 模型数据加载
对于数据的加载使用,首先把转换后的数据(如果不是-e命令生成的单独数据,请把所有转换出来的文件和纹理文件一起)放到应用需要的布置文件夹,本文中将文件放在了Apps\ModelData文件夹下了。使用的加载代码为:
var viewer = new Cesium.Viewer('cesiumContainer');
var scene=viewer.scene;
var modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(
Cesium.Cartesian3.fromDegrees(-75.62898254394531, 40.02804946899414, 6.0));
var model = scene.primitives.add(Cesium.Model.fromGltf({
url : 'ModelData/test.gltf',//如果为bgltf则为.bgltf
modelMatrix : modelMatrix,
scale : 3.0
}));
viewer.camera.flyTo({
destination : Cesium.Cartesian3.fromDegrees(-75.62898254394531, 40.02804946899414, 6.0)
});
4 测试效果
测试用Obj数据:

Cesium中加载的效果如下:

注意:本人在测试过程中遇到一个问题,使用的3dmax导出的dae在转换时始终不能转换成功,显示转换的几何数量是0,创建的gltf文件没有数据。问题原因是这里需要区分两个数据格式:Autodesk Collada和OpenCOLLADA这两个格式,他们的后缀名都是.dae,一个是Autodesk的数据格式,一个是开放标准的格式,这里我们需要的就是开放标准的格式,遗憾的是Max自带的是自家公司的dae格式。
针对这样的问题,1、我直接把max数据转为了obj,再通过其他软件(如blender、SketchUp、meshlab等)转为的dae,这样就能正常使用了;2、或者在Max中装一个open collada导出插件,链接地址https://github.com/KhronosGroup/OpenCOLLADA/wiki/OpenCOLLADA-Tools,导出时注意不要有中文路径,不然纹理导出会出问题。这个提示以回答群里(Cesium交流群:115883691)朋友的疑问。有疑问欢迎加Q详聊:491453302
或者关注我的微博:Web3DGIS 了解个人及团队等相关研究进展。
版本问题:
因为gltf本来是一个草案,并没有形成一个公认的标准,其是一个不断完善的格式描述。从Cesium1.15开始,Cesium开始支持KHR_binary_glTF格式(由CESIUM_binary_glTF格式衍生而来的官方版),并推荐使用glTf1.0版本。到Cesium1.18时CESIUM_binary_glTF格式将会被废弃,而转换工具也不会再支持glTF0.8格式的转换。
参考资料:
[1] http://my.oschina.net/u/1585572/blog/290604
[2] https://github.com/KhronosGroup/glTF/wiki/Converter-builds
[3] https://github.com/virtualcitySYSTEMS/colladaToBglTFConverter
Cesium中导入三维模型方法(dae到glft/bgltf)[转]的更多相关文章
- Cesium中导入三维模型方法(dae到glft/bgltf) 【转】
http://blog.csdn.net/l491453302/article/details/46766909 目录(?)[+] Cesium中目前支持gltf和bgltf两种格式.“gltf是kh ...
- 详细地jsoncpp编译方法 和 vs2010中导入第三方库的方法
详细地jsoncpp编译方法 和 vs2010中导入第三方库的方法 一 编译链接 1 在相应官网下载jsoncpp 2 解压得到jsoncpp-src-0.5.0文件 3 打开jsoncpp-src- ...
- 从SQL Server中导入/导出Excel的基本方法(转)
从sql server中导入/导出 excel 的基本方法 /*=========== 导入/导出 excel 的基本方法 ===========*/ 从excel文档中,导入数据到sql数据库中,很 ...
- Cesium 中两种添加 model 方法的区别
概述 Cesium 中包含两种添加 model 的方法,分别为: 通过 viewer.entities.add() 函数添加 通过 viewer.scene.primitives.add() 函数添加 ...
- json库的编译方法和vs2010中导入第三方库的方法
json库的编译方法和vs2010中导入第三方库的方法 一.去相应官网下载json.cpp文件 Jsoncpp下载:https://sourceforge.net/projects/jsoncpp/ ...
- 关于swift语言中导入OC三方类找不到头文件的解决方法
首先我遇到的问题是这样的: 我之前封装的OC类,我导入现在的swift工程中,然后建立桥接文件,在Swift的控制器中可以找到这个OC写的东西. 但是问题来了,当你使用cocoapods导入的OC三方 ...
- Eclipse中导入项目后js报错解决方法(转未解决问题)
本文转自:http://blog.csdn.net/chenchunlin526/article/details/54666882 Eclipse中导入项目后js报错的原因与解决方法 在我们将项目导入 ...
- 在Centos中导入sql文件的方法
在Centos中导入sql文件的方法 利用mysql -u root -p进入mysql数据库 对于文件的导入,在Centos下里面的是首先要新建一个和文件相同名字的数据库.例如:mysql>c ...
- 网易UI自动化测试工具Airtest中导入air文件中的方法
最近看了一下网易的Airtest ,UI测试工具,写了一些后在导入其他air文件中的.py文件,卡了一下,现在博客中纪录一下导入其他air文件的方式: 在Airtest 测试工具中,导入其他air文件 ...
随机推荐
- python爬虫爬取天气数据并图形化显示
前言 使用python进行网页数据的爬取现在已经很常见了,而对天气数据的爬取更是入门级的新手操作,很多人学习爬虫都从天气开始,本文便是介绍了从中国天气网爬取天气数据,能够实现输入想要查询的城市,返回该 ...
- day 38
目录 元类 什么是元类 元类的作用 怎么自定义创建元类 元类 什么是元类 用class关键字定义的类本身是一个对象,负责产生该对象的类称之为元类(元类可以简称为类的类),内置的元类为type 元类的作 ...
- Pandas 之 描述性统计案例
认识 jupyter地址: https://nbviewer.jupyter.org/github/chenjieyouge/jupyter_share/blob/master/share/panda ...
- rest framework 之解析器
一.示例 1.api/urls.py from django.urls import path, re_path from api.views import UserView, ParserView ...
- Django 之restfromwork 源码分析以及使用之--视图组件
restframework 源码分析以及使用 mixins 中的五种类方法 from rest_framework import mixins # mixins 中一种有五种类 # 第一种:用户保存数 ...
- Ubuntu 14.04更新为国内阿里源解决apt-get install无法执行的问题
step01: sudo gedit /etc/apt/sources.list #将下面全部粘贴到sources.list中deb http://mirrors.aliyun.com/ubuntu/ ...
- Beta冲刺第6次
二.Scrum部分 1. 各成员情况 翟仕佶 学号:201731103226 今日进展 新增图像拼接合并功能 存在问题 无 明日安排 视情况而定 截图 曾中杰 学号:201731062517 今日进展 ...
- iView学习笔记(四):Form表单操作
1.后端准备 环境说明 python版本:3.6.6 Django版本:1.11.8 数据库:MariaDB 5.5.60 新建Django项目,在项目中新建app,配置好数据库 2.后端代码(基于C ...
- 《TensorFlow2深度学习》学习笔记(一)Tensorflow基础
本系列笔记记录了学习TensorFlow2的过程,主要依据 https://github.com/dragen1860/Deep-Learning-with-TensorFlow-book 进行学习 ...
- 如何测试Web服务.3
-->全文字数:2254,需要占用你几分钟的阅读时间 ,您也可以收藏后,时间充足时再阅读- ->第一节讲了<Web服务基础介绍>,第二节讲了<Web服务测试工具> ...