Cesium控制3dTiles抬高
原理
只做抬高思路很简单
1、得到当前模型矩阵变换后的位置(matrix)
2、获取模型变换后平移的部分(translation)
3、根据平移的部分转换为地理坐标(C3->地理)
4、在该地理坐标的基础上加用户需要抬升的高度,再转换为C3的形式(NewTranslation)
5、把NewTranslation赋值给matrix
6、最后乘上原始模型矩阵的逆,再赋值给modelMatrix即可实现抬高
补充
方法有很多,这也只是其中的方法,但是万变不离其宗,都是围绕模型矩阵进行的变换。
代码
//控制3dTiles的抬高
raiseCesium3DTileset(tileset, height) {
//得到当前模型矩阵经过变换后的位置
const matrix = Cesium.Matrix4.multiply(
tileset.modelMatrix,//表示在初始位置上做了什么变换(即所有的变换)
tileset.root.transform,//规定了初始位置在哪里
new Cesium.Matrix4());
//平移的部分
const translation = Cesium.Matrix4.getTranslation(
matrix,
new Cesium.Cartesian3()
);
//转为地理坐标
const cartographic = Cesium.Cartographic.fromCartesian(translation);
//根据当前模型平移的位置,改变其高度
const newTranslation = Cesium.Cartesian3.fromRadians(
cartographic.longitude,
cartographic.latitude,
cartographic.height + height
);
//设置平移矩阵变换
Cesium.Matrix4.setTranslation(matrix, newTranslation, matrix);
const inverse = Cesium.Matrix4.inverse(
tileset.root.transform,
new Cesium.Matrix4()
);
return Cesium.Matrix4.multiply(
matrix,
inverse,
new Cesium.Matrix4()
);
},