专栏名称: 小猿猴GISer
GIS遥感交流学习
目录
51好读  ›  专栏  ›  小猿猴GISer

Cesium 中的 Camera

小猿猴GISer  · 公众号  ·  · 2025-01-03 18:46

正文

温馨提示:文中标记的脚注 [^数字] 在文末的参考资料给出了访问链接。

1. Camera的定义

如下图所示,官方给的定义是:Camera [^1] 是由 position (位置)、 orientation (方向)、 view frustum (视锥体)来定义的。我们可以将相机看做是自己的眼睛, position 可以看做是我们所站的位置,而 orientation 可以看做是我们看的方向。

而关于视锥体,我在维基百科 view frustum [^2] 一词介绍中找到一张示意图,具体如下图所示,我们也称该形状为四角锥台 [^3] ,具体地,四棱锥被平行于其底面的平面所截后,截面与底面之间的几何形体,它有near、far,left、right,top、bottom 六个面。

2. 相机的 position(位置)

很显然,由于 Cesium 使用的是三维笛卡尔坐标系,自然我们可以用一个三维笛卡尔坐标即 Cartesian3 来表示相机的位置。

3. 相机的 orientation(方向)

如上定义所说,方向会形成一个标准正交基(orthonormal basis),两两垂直的单位向量,这三个向量分别为 view vector(视图(线)向量)、up vector(上向量)、right vector(右向量),视图向量即相机的位置指向目标点(兴趣点),上向量定义了相机向上的方向,同理右向量定义了相机向右的方向。这些向量都可以用 Cartesian3 来表示。

注:文章一开始给出相机定义的截图,使用的网页翻译插件翻译的,存在些许问题,这里顺带纠正一下。



为了形象描述,这里我们伸出自己的左手当做相机,大拇指指向右,食指指向上,则中指则是相机的 direction。

我们在官方给出的示例不难发现,这里仅仅定义Camera方向的 up direction 属性即可,则右向量自然垂直于这两个向量,我果然是个大聪明。

具体可以看官方定义的 DirectionUp [^4] 类的定义:

除此之外,我们在 Camera flyTo() 方法的中不难发现,还可以通过定义 heading (航向), pitch (俯仰)和 roll (翻滚)来定义 orientation 的属性值。但是关于Camera的这三个属性都是只读的,因此,我们通过直接访问属性的方法来单个修改是行不通的,因此我们可以参考官方给出的示例,通过修改 direction up 属性来修改相机的方向。

flyTo() 方法则是将相机移动至新位置,我们可以通过下面两种方法来定义相机的新位置和方向,具体可以参考官方给出的入门教程:Control the camera [^5]

通过透视视锥体不难发现 Cesium 使用的是透视投影,关于透视投影可以自己去网上查找相关内容。


//方法1:
viewer.camera.flyTo({
    destination: Cesium.Cartesian3.fromDegrees(-117.1632.7115000.0),
    orientation: {
      heading: Cesium.Math.toRadians(20.0),
      pitch: Cesium.Math.toRadians(-35.0),
      roll0.0,
    },
});

//方法2:
viewer.camera.flyTo({
destinationnew Cesium.Cartesian3(
    -3961951.575572026,
    3346492.0945766014,
    3702340.5336036095
  ),
orientation: {
    directionnew Cesium.Cartesian3(
      0.8982074415844437,
      -0.4393530288745287,
      0.013867512433959908
    ),
    upnew Cesium.Cartesian3(
      0.12793638617798253,
      0.29147314437764565,
      0.9479850669701113
    ),
  },
});

关于 heading , pitch roll 我们可以参考维基百科上关于航空器三主轴 [^6] 的图示来理解,这里直接贴上:

这里我顺便给贴一个动图吧,这里我将维基百科的图自己做了合并录制:分别对应的 heading pitch roll 的动作。

其实关于 heading







请到「今天看啥」查看全文