想要获取Cesium中的模型姿态,首先需要获取模型的旋转矩阵。
模型矩阵的获取方式如下:
glb/gltf类型的模型,模型矩阵为模型对象的modelMatrix字段。
3DTileset类型的模型,模型矩阵为模型对象的root.transform字段。
模型缩放比例:
var scale= Cesium.Matrix4.getScale( modelMatrix, new Cesium.Cartesian3() );
模型位置:
var position = Cesium.Matrix4.getTranslation( modelMatrix, new Cesium.Cartesian3() );
模型欧拉角:
var m1 = Cesium.Transforms.eastNorthUpToFixedFrame(
Cesium.Matrix4.getTranslation( modelMatrix, new Cesium.Cartesian3()),
Cesium.Ellipsoid.WGS84,
new Cesium.Matrix4(),
);
var m3 = Cesium.Matrix4.multiply(
Cesium.Matrix4.inverse(m1, new Cesium.Matrix4()),
modelMatrix,
new Cesium.Matrix4(),
);
var mat3 = Cesium.Matrix4.getMatrix3(m3, new Cesium.Matrix3());
var q = Cesium.Quaternion.fromRotationMatrix(mat3);
var hpr = Cesium.HeadingPitchRoll.fromQuaternion(q);
var heading = Cesium.Math.toDegrees(hpr.heading);
var pitch = Cesium.Math.toDegrees(hpr.pitch);
var roll = Cesium.Math.toDegrees(hpr.roll);