cesium 3d-tiles平移、贴地和旋转
//示例参数,根据实际情况设置(可定制UI实现动态调整,直到满意为止)
var params = {
tx: 110.5, //模型中心X轴坐标(经度,单位:十进制度)
ty: 30, //模型中心Y轴坐标(纬度,单位:十进制度)
tz: 1120, //模型中心Z轴坐标(高程,单位:米)
rx: 60, //X轴(经度)方向旋转角度(单位:度)
ry: 30, //Y轴(纬度)方向旋转角度(单位:度)
rz: 0 //Z轴(高程)方向旋转角度(单位:度)
};
//平移、贴地、旋转模型
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);
var m = Cesium.Transforms.eastNorthUpToFixedFrame(position);
//旋转、平移矩阵相乘
Cesium.Matrix4.multiply(m, rotationX, m);
Cesium.Matrix4.multiply(m, rotationY, m);
Cesium.Matrix4.multiply(m, rotationZ, m);
//赋值给tileset
tileset._root.transform = m;
}
//调用示例
function test(viewer) {
viewer.scene.globe.depthTestAgainstTerrain = true;
var url = "./test/tileset.json";
var tileset = new Cesium.Cesium3DTileset({
url: url
});
var primitive = viewer.scene.primitives.add(tileset);
primitive.readyPromise.then(function (t) {
var originalSphere = t.boundingSphere;
var radius = originalSphere.radius;
viewer.zoomTo(t, new Cesium.HeadingPitchRange(0.5, -0.5, radius * 4.0));
//平移、贴地、旋转模型
update3dtilesMaxtrix(tileset);
}).otherwise(function (error) {
var msg = JSON.stringify(error);
console.log(msg);
});
}
欢迎加QQ群(cesium 3dtiles):392437033。