cesium移动实体_cesium 3d-tiles平移、贴地、旋转和缩放

这篇博客介绍了如何使用Cesium库操作3D Tiles模型,包括平移、贴地、旋转和缩放的实现方法。通过设置参数并结合矩阵变换,实现了对3D模型的动态调整,适用于Cesium场景中的3D Tiles数据展示。
摘要由CSDN通过智能技术生成

//目前只验证过cesiumlab处理的3dtiles数据,其他工具处理的数据有待验证。

//示例参数,根据实际情况设置(可定制UI实现动态调整,直到满意为止)

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);

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;

//缩放

zoom3dtiles(tsfParams);

}

function  zoom3dtiles(tileset) {

var scale = (params.scale || 1) * 1;

tileset._root.customTransform = {

matrix: {

origin: tileset._root.transform.clone(),

rotation: Cesium.Matrix4.IDENTITY,

translation: Cesium.Matrix4.IDENTITY,

}

};

var m1 = Cesium.Matrix4.fromScale(new Cesium.Cartesian3(scale, scale, scale));

tileset._root.customTransform.matrix.scale = m1;

tileset._root.customTransform.scale = scale;

var m2 = new Cesium.Matrix4();

Cesium.Matrix4.multiply(tileset._root.customTransform.matrix.origin, tileset._root.customTransform.matrix.rotation, m2);

Cesium.Matrix4.multiply(m2, tileset._root.customTransform.matrix.scale, m2);

Cesium.Matrix4.multiply(m2, tileset._root.customTransform.matrix.translation, tileset._root.transform);

}

//调用示例

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);

});

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值