假定场景中有一辆车,需要将相机视角锁定到这个车上,车辆在视角的中心位置,即三维容器的中心位置,可参考 cesium 视角锁定 视角跟随 第三人称视角跟随_cesium视角跟随-优快云博客
此时,若需要将跟随的视角以车辆为中心点,进行偏移一定位置,使车辆不在三维容器的中心位置,可采用此办法
// 相机看向车辆的矩阵,车辆矩阵带了hpr,不需要额外处理hpr
let modelMatrix = car.modelMatrix;
// 计算车辆前方 2 米的世界坐标
let forwardOffset = new Cesium.Cartesian3(0, 0, 2);
const modelMatrixB = Cesium.Matrix4.multiplyByTranslation(modelMatrix, forwardOffset, new Cesium.Matrix4());
viewer.camera.lookAtTransform(modelMatrixB, new Cesium.HeadingPitchRange(Cesium.Math.toRadians(90), Cesium.Math.toRadians(-15), 17));
代码详解
在 Cesium.Matrix4.multiplyByTranslation(modelMatrix, forwardOffset, new Cesium.Matrix4()) 这行代码中,forwardOffset 的 XYZ 轴是 基于车辆自身坐标系 的,即它们表示的是车辆的本地坐标方向,而不是世界坐标系方向。
在车辆自身坐标系(模型坐标系)中:
- X 轴(右方向):指向车辆的 右侧(通常是车辆的副驾驶方向)。
- Y 轴(前方向):指向车辆的 前方(车辆行驶方向)。
- Z 轴(上方向):指向车辆的 上方(垂直向上)。
效果对比 :在z轴向上偏移2米,即沿着车辆的垂直方向(车顶方向)向上移动 2 米