如何自由设置3dtile模型的重要前提
3dtile模型的世界坐标要设在模型的中心,这样才能保证cesuim中的旋转矩阵在3Dtile模型中间!!!
3dtile模型的世界坐标要设在模型的中心,这样才能保证cesuim中的旋转矩阵在3Dtile模型中间!!!
3DTIie建模的时候,跟cad一样具有世界坐标,
加载一下代码来设置模型的位置
var palaceTileset = new Cesium.Cesium3DTileset({
url: tilesUri,//tilesUri为3dtile路径
})
palaceTileset.readyPromise.then(function (palaceTileset) {
viewer.scene.primitives.add(palaceTileset);
let mx = Cesium.Matrix3.fromRotationX(
Cesium.Math.toRadians(X)//x轴的旋转
);
let my = Cesium.Matrix3.fromRotationY(
Cesium.Math.toRadians(Y)//Y轴的旋转
);
let mz = Cesium.Matrix3.fromRotationZ(
Cesium.Math.toRadians(Z)//Z轴的旋转
);
let rotationX = Cesium.Matrix4.fromRotationTranslation(mx);
let rotationY = Cesium.Matrix4.fromRotationTranslation(my);
let rotationZ = Cesium.Matrix4.fromRotationTranslation(mz);
let position = Cesium.Cartesian3.fromDegrees(
lng,lat, alt
);
//lng,lat, alt对应模型的经纬度坐标和高度
let m = Cesium.Transforms.eastNorthUpToFixedFrame(position);
Cesium.Matrix4.multiply(m, rotationX, m);
Cesium.Matrix4.multiply(m, rotationY, m);
Cesium.Matrix4.multiply(m, rotationZ, m);
//赋值给tilesetet
palaceTileset._root.transform = m;
});
补充内容
关于3dtile旋转矩阵的选择问题,
选择主要有两种模式:
第一种:
palaceTileset._root.transform (有人说尽量不要动这个旋转矩阵,但是好像不动又不太行)
第二种:
palaceTileset.modelMatrix
第一种:是绕着模型设置的世界坐标位置旋转,然后找了一下加载的3Dtile模型的旋转矩阵,跟’palaceTileset._root.transform是一样的,所以cesuim加载的模型的旋转矩阵就储存在_root.transform里面的,意思是说最初加载模型的位置跟这个有关系,
第二种,我试了一下,直接飘外太空去了,这个应该是旋转中心在地球的中心,所以如果要调想要的位置,就比较麻烦,需要把模型平移在地球的旋转中心,然后调好方向在放回来