首页 > 其他分享 >Cesium的相机(2)

Cesium的相机(2)

时间:2024-03-26 18:34:08浏览次数:22  
标签:direction 朝向 CesiumMath up 相机 方向 Cesium roll

本节主讲相机的Heading\Pitch和Roll。
Cesium的相机主要是通过局部坐标的偏航角、俯仰角和翻滚角确定相机姿态的。

上一节我们知道,Cesium在获取这三个角度的时候,会将以地球球心为原点的地心地固坐标ECEF转为ENU东北天坐标系,ENU坐标系中,X轴指向正东,Y轴指向正北,Z轴指向天顶。

所谓的偏航角、俯仰角和翻滚角,我们可以想象一个正在飞行的飞机,机头的朝向称为偏航角Heading,用于决定此时飞行的方向,如果飞机要转向,实际上是在与大地平行的一个平面上进行转向,因此,Heading的旋转轴是负Z轴。

飞机的俯仰角Pitch可以考虑为机头是朝向地面还是朝向天空,从而决定此时是上行还是下降。Pitch的旋转轴是负Y轴。

飞机的翻滚角Roll是飞机开始玩花样飞翔,以机身为旋转轴开始翻滚。Roll的旋转轴是X轴。

由此我们可以分析Heading、Pitch和Roll的计算方式。
我们将机头的朝向定义为direction,机翼方向为right,机身正身朝上的方向为up,构建右手坐标系。

获取Heading的方法

function getHeading(direction, up) {
  let heading;
  if (
    !CesiumMath.equalsEpsilon(Math.abs(direction.z), 1.0, CesiumMath.EPSILON3)
  ) {
    heading = Math.atan2(direction.y, direction.x) - CesiumMath.PI_OVER_TWO;
  } else {
    heading = Math.atan2(up.y, up.x) - CesiumMath.PI_OVER_TWO;
  }

  return CesiumMath.TWO_PI - CesiumMath.zeroToTwoPi(heading);
}

可以看到,由于Heading的旋转轴是Z轴,因此,Heading实际上是一个在XY平面上与X轴的夹角。首先要将direction和up投影到XY平面上。如果此时相机朝向Z轴,即飞机机头像火箭一样垂直向上,则direction在XY轴的垂线在原点上,此时我们使用up来计算。此时的up一定是在XY平面上的。或者可以这么理解,当你站立在地上,你的眼睛直视前方,此时你的眼睛朝向的方向就是direction方向,你的右手方向就是right方向,你的头顶就是up方向。当你躺在地上,面朝天空的时候,你的面向方向如何确定的呢?当你站起来时,你面朝的方向一定是是你的脚的方向,因此,此时的方向也设为你的脚的朝向,同时,也是你的头顶方向up加减180度的方向。所以,此时要使用up来计算heading值。

heading方向的确定是你所面朝的方向direction与正北(Y轴)方向的夹角,并以顺时针,0-2PI的方式取值。
当direction平行于Z轴的时候,使用up来计算,head方向为up方向在XY轴上的投影的负向与正北(Y轴)方向的夹角。

即,当你站在地面上的时候,不管你的头是如何上下抬动的,heading方向始终是你的身体的朝向与正北之间的夹角,顺时针计算。

pitch的计算比较简单

function getPitch(direction) {
  return CesiumMath.PI_OVER_TWO - CesiumMath.acosClamped(direction.z);
}

就是你抬头或者低头的较低,与你面朝的方向无关。计算你抬头的角度和天空之间(Z轴)的夹角即可。

而roll则是你歪头的角度。

function getRoll(direction, up, right) {
  let roll = 0.0;
  if (
    !CesiumMath.equalsEpsilon(Math.abs(direction.z), 1.0, CesiumMath.EPSILON3)
  ) {
    roll = Math.atan2(-right.z, up.z);
    roll = CesiumMath.zeroToTwoPi(roll + CesiumMath.TWO_PI);
  }

  return roll;
}

歪头的时候,你的眼睛朝向的方向并不改变,但是你的头顶朝向和右耳朝向会改变。因此,roll主要取决于right和up。由于roll的旋转轴是X轴,因此我们将right、up、direction投影到YZ平面上。如果direction的z朝向正上(Z轴),则right和up在YZ平面的投影都是共线的,都落在Y轴上,此时我们记roll为0.
如果direction的z不是朝上的就要求一个up方向在ZY平面上的投影与Z轴的夹角,表示你头歪了多少(同样,direction朝向上方的时候,不管怎么歪头,角度都是90度)。同样,在YZ平面上,顺时针为正。最终结果都为正值。

标签:direction,朝向,CesiumMath,up,相机,方向,Cesium,roll
From: https://www.cnblogs.com/masakulayou/p/18097306

相关文章

  • 【Cesium源码系列】Cesium的相机(1)
    Cesium相机内部保存着相机的基本信息,主要有以下几个属性:_transform:对外只读,变换矩阵_invTransform:对外只读,变换矩阵的逆_actualTransform:对内,实际变换矩阵_actualInvTransform:对内,实际变换矩阵的逆position:对外,相机的位置_position:对内,相机的位置_positionWC:对外只读,相机......
  • 海康工业面阵相机
     测试型号:MV-CA032-10GCIMX2652048×153637.5fpsGigE即将退市MV-CU060-10GCIMX1783072×204819.1fpsGigE已发布MV-CS060-10GCIMX1783072×204819.1fpsGigE已发布                      ......
  • Three.js 中的 OrbitControls 是一个用于控制相机围绕目标旋转以及缩放、平移等操作的
    demo案例Three.js中的OrbitControls是一个用于控制相机围绕目标旋转以及缩放、平移等操作的控制器。下面是它的详细讲解:构造函数:OrbitControls(object:Camera,domElement?:HTMLElement)object:THREE.Camera实例,控制器将围绕此对象进行操作,例如相机。domElement......
  • 分享:vue3+OpenTiny UI+cesium 实现三维地球
    效果图使用vue3+OpenTinyUI+cesium实现三维地球node.js>=v16.0opentinyvue3ui安装指南https://opentiny.design/tiny-vue/zh-CN/os-theme/docs/installationyarnadd@opentiny/vue@3项目依赖"dependencies":{  "@opentiny/vue":"3"......
  • 工业相机里面图像数据格式mono8,packetedmono10是什么意思,还有color是什么意思?
    mono8,即存储下来的图像为单色,8Bit的图片,一般是bmp,jpeg等。packedmono10,即存储下来的图片为单色,10Bit的图片,但是一般都是存储为16Bit图片,packed存储即将10Bit的数据以16Bit的方式填充,剩余的本应填充为0的6个bit被下一帧图片数据填充,这****样做可以减少数据量和数据冗余度,节省空......
  • dalsa相机结合yolo实现检测
    本节可以说是本专栏最核心的内容之一,将dalsa相机、yolo、qt相结合,实现一个基于dalsa相机彩图的缺陷检测系统目录引言STEP1添加初始化模型的代码STEP2添加检测部分代码STEP3添加标框代码STEP4添加缩放框代码效果展示引言如果你看了上一节的内容,那么这一节你......
  • EasyRecovery2024永久免费版数据恢复软件,无论是硬盘、光盘、U盘/移动硬盘还是数码相机
     尊敬的用户们,大家好!今天,我将为大家深入介绍EasyRecovery这款软件的主要功能。EasyRecovery,作为数据恢复领域的佼佼者,凭借其强大的功能和卓越的性能,赢得了广大用户的青睐。首先,让我们来谈谈它的数据恢复功能。EasyRecovery具备出色的数据恢复能力,无论是硬盘、光盘、U盘/移动......
  • 相机与激光雷达是怎么标定的?一览行业所有主流的标定工具
    相机与激光雷达是怎么标定的?一览行业所有主流的标定工具相机与激光雷达的标定是很多任务的基础工作,标定精度决定了下游方案融合的上限,因为许多自动驾驶与机器人公司投入了较大的人力物力不断提升,今天也为大家盘点下常见的Camera-Lidar标定工具箱,建议收藏!加V好友:AutoDriverZone,......
  • Phantom S710系列相机配置
    [email protected]系列相机配置 目录S710系列相机配置41S710相机说明42配置说明52.1BANK说明52.2BANK配置62.3像素重新排列62.4配置示例BANKA4ports7图1‑1芬腾S710相机4图1‑2S710规格5S710系列相机配置S710相机说明Pha......
  • 在不知道相机内参的情况下,利用opencv库进行基于特征点匹配的极线校正
    defrectify_image(img1,img2):#初始化SIFT检测器sift=cv2.SIFT_create()#检测关键点和计算描述符kp1,des1=sift.detectAndCompute(img1,None)kp2,des2=sift.detectAndCompute(img2,None)#使用FLANN匹配器进行特征点匹配FLANN_INDEX_K......