实现
- 我们首先使用
Cesium.Transforms.eastNorthUpToFixedFrame
方法创建一个基于地球坐标系的固定参考帧m1
,该参考帧用于描述模型的朝向。 - 接下来,我们通过将
m1
的逆矩阵与模型的变换矩阵transform
相乘,得到一个新的变换矩阵m3
。这个矩阵包含了模型相对于固定参考帧的旋转信息。 - 我们从
m3
中提取出旋转矩阵mat3
,然后使用Cesium.Quaternion.fromRotationMatrix
方法将其转换为四元数q
。 - 最后,我们使用
Cesium.HeadingPitchRoll.fromQuaternion
方法从四元数q
中获取模型的朝向、俯仰角和滚转角。 - 将计算得到的姿态信息存储在
dataObj
对象的heading
、pitch
和roll
属性中。
javascript
// 计算模型的朝向
function computeModelHeading(transform) {
const m1 = Cesium.Transforms.eastNorthUpToFixedFrame(Cesium.Matrix4.getTranslation(transform, new Cesium.Cartesian3()), Cesium.Ellipsoid.WGS84, new Cesium.Matrix4());
const m3 = Cesium.Matrix4.multiply(Cesium.Matrix4.inverse(m1, new Cesium.Matrix4()), transform, new Cesium.Matrix4());
const mat3 = Cesium.Matrix4.getMatrix3(m3, new Cesium.Matrix3());
const q = Cesium.Quaternion.fromRotationMatrix(mat3);
const hpr = Cesium.HeadingPitchRoll.fromQuaternion(q);
// 获取模型的heading、pitch、roll
const heading = Cesium.Math.toDegrees(hpr.heading);
const pitch = Cesium.Math.toDegrees(hpr.pitch);
const roll = Cesium.Math.toDegrees(hpr.roll);
dataObj.heading = heading;
dataObj.pitch = pitch;
dataObj.roll = roll;
}