var params = {
tx: 110.5, //模型中心X轴坐标(经度,单位:十进制度)
ty: 30, //模型中心Y轴坐标(纬度,单位:十进制度)
tz: 1120, //模型中心Z轴坐标(高程,单位:米)
rx: 60, //X轴(经度)方向旋转角度(单位:度)
ry: 30, //Y轴(纬度)方向旋转角度(单位:度)
rz: 0 , //Z轴(高程)方向旋转角度(单位:度)
scale: 1 //缩放系数
};
function update3dtilesMaxtrix(tileset) {
//旋转
var mx = Cesium.Matrix3.fromRotationX(Cesium.Math.toRadians(params.rx));
var my = Cesium.Matrix3.fromRotationY(Cesium.Math.toRadians(params.ry));
var mz = Cesium.Matrix3.fromRotationZ(Cesium.Math.toRadians(params.rz));
var rotationX = Cesium.Matrix4.fromRotationTranslation(mx);
var rotationY = Cesium.Matrix4.fromRotationTranslation(my);
var rotationZ = Cesium.Matrix4.fromRotationTranslation(mz);
//平移
var position = Cesium.Cartesian3.fromDegrees(params.tx, params.ty, params.tz);
//tx,ty,tz为分量
//var position = Cesium.Cartesian3.fromArray([params.tx, params.ty, params.tz]);
var m = Cesium.Transforms.eastNorthUpToFixedFrame(position);
//旋转、平移矩阵相乘
Cesium.Matrix4.multiply(m, rotationX, m);
Cesium.Matrix4.multiply(m, rotationY, m);
Cesium.Matrix4.multiply(m, rotationZ, m);
//缩放
var scaleM = Cesium.Matrix4.fromUniformScale(params.scale);
Cesium.Matrix4.multiply(m, scaleM, m);
//赋值给tileset
tileset._root.transform = m;
}
//高度调整
//直接调用函数,调整高度,height表示物体离地面的高度
function changeHeight(tileset, height)
{
height =Number(height);
if(isNaN(height)) return;
var cartographic = Cesium.Cartographic.fromCartesian(tileset.boundingSphere.center);
var surface = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, cartographic.height);
varoffset = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude,height);
vartranslation = Cesium.Cartesian3.subtract(offset, surface,newCesium.Cartesian3());
tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation);
}
来源于示例,感谢源作者的分享
网友评论