昨天写的模型机头不是速度的方向
基础知识
屏幕坐标系,笛卡尔空间直角坐标系,大地坐标系
平移和旋转都是基于笛卡尔空间直角坐标系,也就是基于地心。但是我们想实现模型的旋转是基于模型的局部坐标系,那么就要坐标转换。
向量归一化:单位向量
平移
平移思路:
源点笛卡尔坐标系坐标1,终点局部坐标系坐标2,(1)然后计算局部坐标系到笛卡尔坐标系的转换矩阵m,(2)m与坐标2算出终点笛卡尔坐标系坐标,(3)得到笛卡尔坐标系坐标1向笛卡尔坐标系终点坐标的转换矩阵,(4)然后相乘
实现
传入参数是模型entity对象
const Translation =(plane:any)=>
{//飞机原来的位置let origin=Cesium.Cartesian3.fromDegrees(104.173,30.822,600)console.log(origin)//(1) 局部转笛卡尔的转换矩阵const m = Cesium.Transforms.eastNorthUpToFixedFrame(origin)// 平移量的局部坐标系const tempTranslation = new Cesium.Cartesian3(500,500,0)// (2) 终点的笛卡尔坐标const offset = Cesium.Matrix4.multiplyByPoint(m, tempTranslation, new Cesium.Cartesian3(0, 0, 0))//计算两个笛卡尔的分量差异const translation = Cesium.Cartesian3.subtract(offset, origin, new Cesium.Cartesian3())//(3) 分量差异=>转换矩阵let m2=Cesium.Matrix4.fromTranslation(translation)//(4) 坐标×转换矩阵(你也可以用分量的xyz直接加)var newPoint = Cesium.Matrix4.multiplyByPoint(m2, origin, new Cesium.Cartesian3());plane.position=newPoint
}
旋转
思路:
好像可以通过很多次矩阵转换达到目标,不过这里我使用