SuperMap iClient3D for Cesium动态修改水面高度实现水面涨跌效果
前言
在水利相关项目中一般都会有这样一个场景,那就是水面的涨跌.但是由于水面是高低不平,没法使用淹没分析去实现这个涨跌.那么如何做呢?分两种情况,一种情况是前端构建的水面,需要通过修改水面的ModelView 矩阵来实现水面的上下移动,近似实现水面涨跌;另一种情况是桌面构建的水面,通过修改图层的bottomatutide实现
一、通过实体添加的水面
1. 修改矩阵
构建primitive水面符号参考上篇博客: https://blog.csdn.net/weixin_45486229/article/details/134401837
主要代码:
// 定义要平移的高度偏移值
const heightOffset = 5000.0; // 以米为单位
// 获取原始的 ModelView 矩阵
const originalModelViewMatrix = tmp.modelMatrix;
// 创建一个平移矩阵来将 Primitive 上下移动
const translationMatrix = Cesium.Matrix4.fromTranslation(new Cesium.Cartesian3(0, 0, heightOffset));
// 将平移矩阵应用到原始 ModelView 矩阵上
const newModelViewMatrix = Cesium.Matrix4.multiply(originalModelViewMatrix, translationMatrix, new Cesium.Matrix4());
// 更新 Primitive 的 ModelView 矩阵,从而将其整体上下移动
tmp.modelMatrix = newModelViewMatrix;
最终效果如下:
水位涨跌
二、通过桌面创建的水面.
1. 桌面制作水面.
在图层风格中设置风格为三维水面符号后保存场景,对场景切缓存。发布三维服务。
2. 前端加载并修改水面符号高度
主要代码
var layer = scene.layers.find('heliu_ZR@DataSource');
setInterval(() => {
layer.style3D.bottomAltitude += 1;
}, 100);
效果如下:
水面效果1