//目前只驗證過cesiumlab處理的3dtiles數(shù)據(jù)棺聊,其他工具處理的數(shù)據(jù)有待驗證伞租。
//示例參數(shù),根據(jù)實際情況設(shè)置(可定制UI實現(xiàn)動態(tài)調(diào)整限佩,直到滿意為止)
var params = {
? ? tx: 110.5,? //模型中心X軸坐標(biāo)(經(jīng)度肯夏,單位:十進制度)
? ? ty: 30,? ? //模型中心Y軸坐標(biāo)(緯度,單位:十進制度)
? ? tz: 1120,? ? //模型中心Z軸坐標(biāo)(高程犀暑,單位:米)
? ? rx: 60,? ? //X軸(經(jīng)度)方向旋轉(zhuǎn)角度(單位:度)
? ? ry: 30,? ? //Y軸(緯度)方向旋轉(zhuǎn)角度(單位:度)
? ? rz: 0,? ? ? ?//Z軸(高程)方向旋轉(zhuǎn)角度(單位:度)
? ? scale:?1? ?//縮放比例
};
//平移驯击、貼地、旋轉(zhuǎn)模型
function update3dtilesMaxtrix(tileset) {
? ? //旋轉(zhuǎn)
? ? 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);
? ? //旋轉(zhuǎn)耐亏、平移矩陣相乘
? ? 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);
}
//調(diào)用示例
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));
? ? ? ? //平移徊都、貼地、旋轉(zhuǎn)模型
? ? ? ? update3dtilesMaxtrix(tileset);
? ? }).otherwise(function (error) {
? ? ? ? var msg = JSON.stringify(error);
? ? ? ? console.log(msg);
? ? });
}