cesium相机(camera)控制

news2024/10/25 23:08:02

camera基础属性:

Cesium 中的相机通过 viewer.camera 来获取和操作。

  • position:相机的位置,用 Cartesian3 坐标表示,表示的是相机在世界坐标系中的绝对位置。

    viewer.camera.position = Cesium.Cartesian3.fromDegrees(longitude, latitude, height);
    
  • direction:相机的朝向,指向相机正在查看的目标。

    viewer.camera.direction = new Cesium.Cartesian3(x, y, z);
    
  • up:相机的上方向,用于定义相机的倾斜角度(与地面的垂直方向)

    viewer.camera.up = new Cesium.Cartesian3(x, y, z);
    
  • right:相机的右方向,定义相机横向的方向。

控制相机视角:

  • setView() 是 Cesium 中一个常用的方法,用于设置相机的视图,包括位置、目标点和相机的方向。

viewer.camera.setView({
   // 相机的位置
  destination: Cesium.Cartesian3.fromDegrees(longitude, latitude, height),  
  // 相机方向
  orientation: {

// 水平旋转角度,从正北顺时针旋转到目标方向的角度
    heading: Cesium.Math.toRadians(heading),  
// 朝向的方位角,即相机绕着地心的水平方向旋转,范围: 0-2π
//0   - 正北
//π/2 - 正东
// π   - 正南
// 3π/2 - 正西


//直旋转角度,从水平面向上/向下的角度
    pitch: Cesium.Math.toRadians(pitch),      
// 俯仰角,即相机绕着横轴的上下旋转,范围: -π/2 到 π/2
// π/2   - 正上方(90°)
// 0     - 水平(0°)
// -π/2  - 正下方(-90°)

//相机自身的旋转角度
    roll: 0                                   
// 滚转角,即相机绕着前后轴的旋转,范围: -π 到 π
// 0     - 正常
// π     - 倒置
// π/2   - 右倾斜90°
// -π/2  - 左倾斜90°

  }
});
  • flyTo() 方法提供了平滑的动画过渡,来控制相机飞行到指定的位置。

viewer.camera.flyTo({
  destination: Cesium.Cartesian3.fromDegrees(longitude, latitude, height),
  orientation: {
    heading: Cesium.Math.toRadians(heading),
    pitch: Cesium.Math.toRadians(pitch),
    roll: 0
  },
  duration: 3,  // 飞行持续时间,单位秒
  complete: function() {
    console.log("Fly complete!");
  }
});
  • lookAt()相机看向某个目标点

var target = Cesium.Cartesian3.fromDegrees(120.0, 30.0);
viewer.camera.lookAt(target, new Cesium.Cartesian3(0.0, 0.0, 5000.0));  // 相机距离目标5000米
  • zoomTo是Cesium中用于控制相机视角和定位

// viewer.zoomTo 实际上是对 camera.viewBoundingSphere 的封装
viewer.zoomTo(target, offset);  

// 等同于
viewer.camera.viewBoundingSphere(boundingSphere, offset);

// 应用
// 1. 飞向实体
viewer.zoomTo(entity);
// 2. 飞向实体集合
viewer.zoomTo(viewer.entities);

// 3. 飞向数据源
viewer.zoomTo(dataSource);

相机事件:

相机轨迹飞行:

Cesium 还可以让相机沿着一条预设的轨迹飞行,比如沿着多段 Cartesian3 位置点。可以使用 flyTo 配合 Polyline 来模拟轨迹飞行。

var positions = [
  Cesium.Cartesian3.fromDegrees(120.0, 30.0, 5000),
  Cesium.Cartesian3.fromDegrees(121.0, 30.5, 5000),
  Cesium.Cartesian3.fromDegrees(122.0, 31.0, 5000)
];

viewer.camera.flyTo({
  destination: positions[0],
  complete: function() {
    viewer.camera.flyTo({
      destination: positions[1]
    });
  }
});

视觉化理解相机:


假设你是摄影师,相机属性就像这样:

  1. 你站在哪里? -> position
  2. 你看向哪里? -> direction
  3. 你的头顶朝向哪里? -> up
  4. 你的右手指向? - right
  5. 你水平转动脖子左右转头 -> heading
  6. 你点头或抬头 -> pitch
  7. 你歪着头 -> roll

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2223617.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

>甘晴void:小蒟蒻的CCSP2024

小蒟蒻前两天参加了CCSP2024 最终幸运蹭铜(蹭着本科的边边捞到了铜牌,没有遗憾了)。 评价感受 本来只是来打酱油(蹭吃蹭喝)的,因为自从推免结束后,已经正好一个月没碰代码了,上一次…

DeepLearn-实现天气的识别

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 本次使用的数据集有晴天、雨天、多云和日出。 导入基本的包 包括读取文件、图像处理、科学计算和tensorflow的api包layers是层模块,提供了神经网络…

[bug] vllm 0.6.1 RuntimeError: operator torchvision::nms does not exist

[bug] vllm 0.6.1 RuntimeError: operator torchvision::nms does not exist 环境 python 3.10 torch 2.4.0cu118 torchvision 0.19.0cu118 vllm 0.6.1.post2cu118问题详情 if torch._C._d…

利用客户端导入有关联的业务数据(DBeaver+sql)

前言 最近有点坑,麻辣烫的活落手上了,上个迭代除了自己的开发任务,还有处理接手的工作。然后节后问题又多,还有前1个迭代没有测试的模块本迭代测试,烦死了。 这次这个数据处理的活,以后希望可以交出…

香橙派5(RK3588)使用npu加速yolov5推理的部署过程

香橙派5使用npu加速yolov5推理的部署过程 硬件环境 部署过程 模型训练(x86主机) 在带nvidia显卡(最好)的主机上进行yolo的配置与训练, 获取最终的best.pt模型文件, 详见另一篇文档 模型转换(x86主机) 下载airockchip提供的yolov5(从pt到onnx) 一定要下这个版本的yolov5, …

docker集成Nginx和Mysql (教程)

文章目录 前言一、Docker 集成Nginx步骤 1:安装 Docker步骤 2:拉取官方的 Nginx Docker 镜像1.可以先搜索nginx镜像(查看nginx镜像)2.拉取nginx镜像步骤 3:运行 Nginx 容器 二、Docker 集成Mysql步骤 1:拉取mysql镜像步骤2、运行 …

Vulnhub打靶-DC-1

基本信息 靶机下载:https://download.vulnhub.com/dc/DC-1.zip 攻击机器:192.168.20.128(Windows操作系统)& 192.168.20.138(kali) 靶机:192.168.20.0/24 目标:获取2个flag…

SQL 干货 | SQL 半连接

大多数数据库开发人员和管理员都熟悉标准的内、外、左和右连接类型。虽然可以使用 ANSI SQL 编写这些连接类型,但还有一些连接类型是基于关系代数运算符的,在 SQL 中没有语法表示。今天我们将学习一种这样的连接类型:半连接(Semi …

tensorflow案例3--运动鞋识别(学习tensorflow动态加载学习率、如何设置早停等方法)

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 前言 这个案例还是以学习API为主,学习了tensorflow如何动态加载学习率、如何设置早停等方法;这个案例主要学习为主,由于模…

SpringBoot 集成RabbitMQ 实现钉钉日报定时发送功能

文章目录 一、RabbitMq 下载安装二、开发步骤:1.MAVEN 配置2. RabbitMqConfig 配置3. RabbitMqUtil 工具类4. DailyDelaySendConsumer 消费者监听5. 测试延迟发送 一、RabbitMq 下载安装 官网:https://www.rabbitmq.com/docs 二、开发步骤:…

Python 实现彩票抽奖系统详解(双色球)

目录 一、系统功能概述 二、代码实现详解 (一)自选功能实现(ziXuanCaiPiao函数) (二)机选功能实现(autoChoiceCaiPiao函数) (三)彩票展示功能实现&#x…

如何解决 IDEA 的 pom.xml 文件中,依赖警告问题

原因 在升级高版本的Idea后,我的是(2024.2)版本。Idea默认引入了插件 Package Checker 插件,用于检查 Maven 的 pom.xml 引入的 jar 包是否有漏洞风险。如果有漏洞风险则直接在引入的 pom.xml 下画黄线警告。 虽然不是错误&…

Tkinter -- python GUI学习与使用

前言 python GUI 目前pythonGUI有很多,哪一个最好? 先说说我选择的思路,我的目的是开发一个易用的软件,最重要的是稳定,并且碰到问题能够解决,因此,我的目标很明确,有比较大的用户群…

杂项笔记

1 这个好像如果如果分配空间就会执行 这个扩容好像会进行拷贝 2 3 4 没懂 5

【数据结构与算法】走进数据结构的“时间胶囊”——栈

大家好,我是小卡皮巴拉 文章目录 目录 引言 一.栈的基本概念 1.1 定义 1.2 特性 1.3 基本操作 二.栈的实现方式 2.1 顺序栈 2.2 链栈 三.顺序栈的实现 定义顺序栈的结构 初始化 入栈 检查栈是否为空 出栈 销毁 四.链栈的实现 定义链栈的结构 初始…

未来汽车驾驶还会有趣吗?车辆动力学系统简史

未来汽车驾驶还会有趣吗?车辆动力学系统简史 本篇文章来源:Schmidt, F., Knig, L. (2020). Will driving still be fun in the future? Vehicle dynamics systems through the ages. In: Pfeffer, P. (eds) 10th International Munich Chassis Symposiu…

数字图像处理的概念(一)

一 何谓数字图像处理 1 图像的概念 图像是对客观存在的物体的一种相似性的、生动的写真或描述。 2 图像的类别 可见光成像和不可见光成像 单波段、多波段和超波段图像 伽马射线成像 主要用途包括核 医学和天文观测 等 。 核医学 a)同位素注射 骨骼扫描图像 b)正电子放射( …

【Docker】安装、镜像、容器

什么是Docker? Docker:是基于Go语言实现的开源项目。 Docker 是一个用于开发、交付和运行应用程序的开放平台。它允许开发人员将应用程序及其依赖包打包到一个可移植的容器中, 然后在任何流行的 Linux 机器上运行。Docker 容器是完全隔离的&…

Openpyxl--学习记录

1.工作表的基本操作 1.1 工作表的新建打开与保存 1.1.1 创建工作簿 from openpyxl import Workbook from pathlib import Pathfile_path Path.home() / "Desktop" / "123.xlsx"# 1.创建工作簿 wb Workbook() # 2.访问默认工作簿 ws wb.active # 3.填充…

pytorh学习笔记——cifar10(六)MobileNet V1网络结构

基础知识储备: 一、深度可分离卷积(Depthwise Separable Convolution) MobileNet的核心是深度可分离卷积(Depthwise Separable Convolution),深度可分离卷积是卷积神经网络(CNN&#xf…