提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
cesium漫游跟随视角设置初始偏移角度viewFrom
前言
最近因项目需要设置跟随视角的默认角度,网上查到的资料都提到entity的viewFrom属性却没有使用方法,大多还是以锁定视角为主,以下是踩坑出来的使用方法viewFrom。下图为修改后的默认跟随角度。如有错误,感谢指出。
一、viewFrom是什么?
二、使用步骤
1.简介
其实这个属性本身用法简单,可接受一个笛卡尔三坐标系的偏移值,关键点在与算出模型所需观察角度的偏移值。
2.错误原因
计算偏移值时使用世界坐标计算,以世界中心为原点,得出结果错误。
3.正确思路
以模型中心点为原点建立局部坐标系,计算观察点在该局部坐标系中的坐标位置,向量相减计算偏移值。
代码如下(示例):
- 计算偏移值
function getOffset(a, b) {//a为模型中心点,b为计算好的观察位置
//以a点为原点建立局部坐标系(东方向为x轴,北方向为y轴,垂直于地面为z轴),得到一个局部坐标到世界坐标转换的变换矩阵
const localToWorld_Matrix = Cesium.Transforms.eastNorthUpToFixedFrame(a);
//求世界坐标到局部坐标的变换矩阵
const worldToLocal_Matrix = Cesium.Matrix4.inverse(
localToWorld_Matrix,
new Cesium.Matrix4()
);
//a点在局部坐标的位置,其实就是局部坐标原点
const localPosition_A = Cesium.Matrix4.multiplyByPoint(
worldToLocal_Matrix,
a,
new Cesium.Cartesian3()
);
//B点在以A点为原点的局部的坐标位置
const localPosition_B = Cesium.Matrix4.multiplyByPoint(
worldToLocal_Matrix,
b,
new Cesium.Cartesian3()
);
// 获得b相对于a点的偏移值
var direction = Cesium.Cartesian3.subtract(
localPosition_B,
localPosition_A,
new Cesium.Cartesian3()
);
return direction;
}
2.开启跟随并赋值初始偏移值
let direction = courseAngle(center, cartesian3);
modelEntity = viewer.entities.add(
new Cesium.Entity({
'你的模型'
})
);
viewer.trackedEntity = modelEntity;
modelEntity.viewFrom = direction;
总结
以上就是全部实现思路,重点为局部坐标系的建立,以此坐标位置计算相对于模型的偏移量。