Mars3D或Cesium版本间兼容问题

5/18/2023

在引入Mars3D SDK后正常可以在F12打印的信息中可以看到Mars3D和Cesium版本信息。

# Mars3D对Cesium版本对应关系

正常情况下mars3d依赖的cesium均是最新版本,并且对cesium版本无特殊要求,版本间均是兼容的,因为cesium本身的变更造成一些版本间不兼容情况,目前版本依赖关系如下:

mars3d版本 Cesium版本 说明
v3.5 - 至今 v1.107及之后,如果版本不匹配F12会打印提示 重写glTF架构、改用WebGL2渲染
v3.3 - v3.4 v1.92 至 v1.96 改为原生Promise
v3.0 - v3.2 v1.91 及之前
v1.0 - v2.0 v1.91 及之前 老版本

当npm环境使用mars3d时需要指定mars3d-cesium的版本,可以这样操作: 搜下 package.json 中 "mars3d-cesium" 后 ,改下 "mars3d-cesium": : "~1.95.0",【注意不要^】,删除node_modules后重新npm install安装即可

# Ceiusm 1.102+ 与之前版本不兼容 - 2023-02-01

Cesiumv1.102(2023-02-01)默认改为 WebGL2 渲染,与之前版本的shader语法部分不兼容。 具体详情参看1.102更新日志 (opens new window),

相关版本依赖关系是:

  1. Mars3D v3.4.x及之前 版本,须使用 mars3d-cesiumv1.96及之前的版本 (mars3d-cesium 1.97-1.100 未做发布)
  2. Mars3D v3.5.x及之后 版本,须使用 mars3d-cesiumv1.104及之后的版本

# 处理方式

无法兼容,3.4之前版本需要用1.102之后版本mars3d-cesium时,需要shader需要改写为 WebGL2 语法,或者构造Map时scene参数下加requestWebgl1: true参数。

# Ceiusm 1.97+ 与之前版本不兼容 - 2022-09-01

Cesiumv1.97(2022-09-01)的gltf/3dtiles与之前版本完全不兼容,采用了新的glTF架构代码重写,影响3dtiles部分功能无法使用和部分gltf/3dtiles数据报错。 具体详情参看1.97更新日志 (opens new window),

相关版本依赖关系是:

  1. Mars3D v3.4.x及之前 版本,须使用 mars3d-cesiumv1.96及之前的版本 (mars3d-cesium 1.97-1.100 未做发布)
  2. Mars3D v3.5.x及之后 版本,须使用 mars3d-cesiumv1.104及之后的版本

如果使用其他版本会造成的问题(除此之外不影响)

  1. 模型裁剪、压平等功能无法使用;
  2. 建筑物特效等涉及3dtiles模型的地方可能无效。
  3. 部分shader需要改写为 WebGL2 语法,或者构造Map时scene参数下加requestWebgl1: true参数

# 处理方式

无法兼容,但您如果对模型编辑等功能没有特殊要求,可以混用。

# Ceiusm 1.92+ 与之前版本不兼容 - 2022-04-01

Cesiumv1.92(2022-04-01)的Promise与之前版本不兼容,具体可以参考其官方说明 (opens new window),

与之对应的是Mars3Dv3.3.x(内部依赖Cesiumv1.92+),所以针对不同情况的处理方式不同。

# 出现不兼容的场景

  1. Mars3D v3.2.x及之前 版本如果需要使用 Cesiumv1.92及之后版本时
  2. Mars3D v3.3.x及之后 版本如果需要使用 Cesiumv1.91及之前版本时
  3. 运行后浏览器提示找不到Cesium命名空间之类错误时

# 处理方式

可以在引入Cesium后,引入/mars3d/plugins/compatible/目录下的2个兼容处理文件cesium-version (opens new window)cesium-when (opens new window)即可, 如下所示:

mars3d: [
    "Cesium/Widgets/widgets.css", //cesium
    "Cesium/Cesium.js",
    "mars3d/plugins/compatible/cesium-version.js", //cesium版本间兼容处理
    "mars3d/plugins/compatible/cesium-when.js", 
    "mars3d/mars3d.css", //mars3d
    "mars3d/mars3d.js",
]
1
2
3
4
5
6
7
8

# Ceiusm 1.83+ 仅支持KTX2纹理的模型 - 2021-07-01

Ceiusm在1.83版本(2021-07-01)中正式放弃对 KTX1 和 Crunch 纹理的支持,仅支持KTX2 , 所以在用1.83+版本加载KTX1材质的模型时会出现模型无法展示的问题。

# 处理方式

需要将Cesium版本切到1.79版本进行加载KTX1纹理的模型,或者使用最新版本的相关数据处理工具重新转换处理数据。

mars3d: [
    "Cesium-1.79/Widgets/widgets.css", //cesium 1.79版
    "Cesium-1.79/Cesium.js",
    "mars3d/plugins/compatible/cesium-version.js", //cesium版本间兼容处理
    "mars3d/plugins/compatible/cesium-when.js", 
    "mars3d/mars3d.css", //mars3d 最新版
    "mars3d/mars3d.js",
]
1
2
3
4
5
6
7
8

# Mars3D V3.x与之前老版本间不兼容 - 2021-03-01

v3.x版本与v1.xv2.x之前老版本之间是不兼容(API结构不同),无法兼容平滑的升级,因为v3所有代码是按最优雅的方式从零开始编写设计进行搭建的,不是基于之前的老版本修改的。 老版本所有功能在新版都支持,并且v3版增加了很多新功能。

# 处理方式

二者不兼容,需要升级到V3后,使用V3的功能,替换mars3d+cesuim和依赖的库,参考v3功能示例代码,对运行报错处按示例代码进行修改处理,通用性修改可以批量替换处理。

最后更新: 10/27/2023, 3:18:43 PM