Cesium|Cesium 1.91 更新日志 - MSAA 与原生 Promise 来了
不兼容式更新
- 在下一个版本,也就是 Cesium 1.92,第三方库
when.js
将被原生 Promise API 代替。Cesium.when
将被废弃,且于下个版本移除。关于如何升级,请参考下方个人点评,我转载了官方指导文档。 - 修复了当 Scene 没有渲染时(例如 css 样式设为 none)相机对象的获取射线方法(
camera.getPickRay()
)引发的异常,这个函数会返回 undefined 了。
- 为 WebGL 2.0 添加 MSAA(多重采样抗锯齿)支持。你可以在创建 Viewer 时传递
msaaSamples
选项,也可以用Scene.msaaSamples
属性控制。 - 现在,glTF 模型默认使用
ModelExperimental
架构处理。 - 在
ModelExpertimental
架构中支持切换背面裁剪。 - 向 Viewer 和 Scene 类的构造参数中添加
depthPlaneEllipsoidOffset
,以解决椭球体平面之下的奇怪渲染问题 - 在
ModelExperimental
架构中支持了debugColorTiles
- 在
ModelExperimental
架构中支持了阴影 - 在所有的矩阵类中添加了
packArray
和unpackArray
方法 - 为矩阵类添加一些仿射变换帮助函数
- Matrix2:
setScale
、setUniformScale
、setRotation
、getRotation
、multiplyByUniformScale
- Matrix3:
setScale
、setUniformScale
、setRotation
、multiplyByUniformScale
- Matrix4:
setUniformScale
、setRotation
、getRotation
、fromRotation
- Matrix2:
- 为
AxisAlignedBoundBox
类添加fromCorners
方法 - 为
BoundingSphere
类添加fromTransformation
方法 - 为
OrientedBoundingBox
类添加fromTransformation
、computeCOrners
、computeTransformation
方法 - 为
Rectangle
类添加subsection
方法 - glTF 的版权信息会标注至版权区域
- 为 3D Tiles 增加一个选项,它可以决定数据集的版权信息是否显示在屏幕上
- 修改了版权排序规则为出现的频率
- 修复了使用
ModelExperimental
架构的模型在更新其模型矩阵时不会更新范围球的错误 - 修复了在 Safari 浏览器中 FeatureID 纹理的伪影
- 修复了使用
ModelExpertimental
架构的不透明模型使用半透明着色器,但是未正确渲染的错误
const viewer = new Viewer('cesiumContainer', {
msaaSamples: 4 // 1, 2, 4, 8, 默认 1, 越高效果越好, 也越吃性能
})
viewer.postProcessStages.fxaa.enabled = true
二者有什么区别?
- msaa 发生在管线结束前,准确的说是光栅化阶段对片元进行多重采样,输出到渲染缓冲,然后才绘制到屏幕上
- fxaa 发生在管线结束后的后处理阶段,对渲染的结果进行图像算法处理
② 相机获取射线 获取射线的函数现在返回值类型发生了改变
const ray = viewer.camera.getPickRay() // Ray 或 undefined
③ ModelExperimental 即实验中的 Model,是对原有 Model 类的架构升级,这是为了适配更强大的 glTF,以及为下一代 3D Tiles 准备的。
预计 2022 年这个新架构会转正。
④ 逐渐 ES6 细心的朋友也许观察到了,源代码已经把
var
切换至 let/const
声明变量了。在下一个版本(1.92),CesiumJS 有计划地将第三方异步库 when.js
替换为 ES6 原生 Promise 实现。不过,距离源代码完全使用 async/await
估计还有一段路要走。关于迁移
Cesium.when
,官方是这么说的:- 移除所有使用了
Cesium.when
的代码 Cesium.defer
代替了when.defer
Promise.all
代替了when.join
- 在 Promise 链式调用中,
catch
代替了otherwise
,finally
代替了always
;如果你用async/await
而不是 Promise 链,那这里不需要改变
推荐阅读
- android|android 系统升级 方法,安卓系统怎么升级 浅谈安卓系统更新升级的几种方法
- Kubernetes(更新与回滚)
- linux系统更新内核,亲身体验 升级Linux系统内核完全过程
- Unity3D|【游戏开发高阶】从零到一教你Unity使用ToLua实现热更新(含Demo工程 | LuaFramework | 增量 | HotUpdate)
- Ubuntu更换镜像源,更快升级和更新软件
- 为何在打包工具中导入|为何在打包工具中导入 Cesium 的 css 失败了()
- 应用工具|【长期更新】盘一盘那些 uTools 高质量插件,让你的工作效率瞬间提升N倍!
- 【重磅发布】蚂蚁动态卡片,让 App 首页实现敏捷更新
- 学习|(系列更新完毕)深度学习零基础使用 PyTorch 框架跑 MNIST 数据集的第一天(LeNet 网络的搭建)
- 学习|(系列更新完毕)深度学习零基础使用 PyTorch 框架跑 MNIST 数据集的第二天(加载 MNIST 数据集)