Cesium中的Heading/Pitch/Roll
headingpitchroll是用在orientation属性上的(比如相机的setView,flyTo,以及entities.add中)
在Cesium中,Heading就是yaw,即偏航的意思。则相机的Heading/pitch/roll与飞机类似:
Heading=yaw,表示相机绕Up轴旋转,Up轴为+Z轴,且定义绕-Z轴旋转为正。
Pitch,表示相机绕Right轴旋转,Right轴为-Y轴,且定义绕-Y轴旋转为正。
Roll,表示相机绕Direction轴(视线方向)旋转,Direction轴为+X轴,且绕+X轴旋转为正。
相机的三个旋转方向见下图示意,同时给出了Cesium中相机的Up/Right/Direction三个轴与X/Y/Z轴的关系。
Cesium中相机的Heading/Pitch/Roll
下面给出Heading/Pitch/Roll的旋转顺序:
初始时刻,相机以坐标系o − x y z o-xyzo−xyz为参考基准,相机坐标系o − X Y Z o-XYZo−XYZ与之重合。
绕z轴旋转角度ψ \psiψ;
接着绕新的y轴(下图中的N(y’))旋转角度θ \thetaθ;
最后绕着新的x轴(下图中的X轴)旋转角度ϕ \phiϕ。
即相机坐标系经过三次基本的欧拉旋转,旋转到最终的坐标系o − X Y Z o-XYZo−XYZ(下图红色),欧拉转序为321(ZYX),旋转的角度遵循右手定则。
注意,在Cesium中,常使用对象headingPitchRoll来表示相机的三次旋转角度,使用heading属性表示绕z轴旋转的角度(绕-z轴为正);使用pitch表示绕y轴旋转的角度(绕-y轴为正);使用roll表示绕x轴旋转角度(绕+x轴为正);旋转顺序仍为321(ZYX)。
小结
Cesium中,使用Heading /Pitch /Roll来分别表示相机坐标系绕Z、Y、X轴的3次连续旋转,需要注意的是,Heading和Pitch的旋转角度与普通右手旋转的符号相反,因此在计算中需要在前两个角度加上负号,再进行321转序的旋转。
Cesium采用的是第二种旋转方式,因此连续旋转时,最先旋转的矩阵(或四元素)在最左边。
由HeadingPitchRoll创建的旋转矩阵Matrix3(或者四元素表示的)是把相机坐标系中的点坐标转换为原坐标系中(不一定是世界坐标系)的坐标。
题外ps
首先看一下Cesium官方文档对HeadingPitchRoll的说明:A rotation expressed as a heading, pitch, and roll. Heading is the rotation about thenegative z axis. Pitch is the rotation about the negative y axis. Roll is the rotation aboutthe positive x axis.
翻译过来的意思就是,一个用heading、pitch、roll三个方向的旋转角度来表达的旋转信息。换句话说,就是在三维空间中,通过实体与笛卡儿坐标系三个坐标轴的的夹角来确定实体在三维空间中的方向。heading是实体与z轴的旋转角,pitch是实体与y轴的旋转角,roll是实体与x轴的旋转角。为了更加形象的说明三者关系,下面结合具体的图示来说明。不过需要说明的是由于GIS中坐标系的不同(大家都知道GIS中的高斯坐标系x轴是纵轴,y轴是横轴),可能会与其他领域的坐标系有所差别。
三维空间的右手笛卡尔坐标如图1所示
网上有很多图是照搬这个,但这和cesium中的其实并不一样。
我对比了很多教程,总结的这个,但还是要更深入理解,比如相机四元数之类,模型旋转等。
在此感谢:[相机四元数]相机四元数
四元数
模型旋转变换示例(https://blog.csdn.net/u011575168/article/details/83097894?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control&dist_request_id=6d4c1245-6105-4bf8-865a-1f687cc86380&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control)
未完待续,,,,,