cesium学习(相机)

news2024/12/23 20:31:11

飞到一个地方

如果你知道位置的经纬度和高度,你可以使用相机的flyTo功能直接飞到CesiumJS中的那个位置。

viewer.camera.flyTo({
    destination: Cesium.Cartesian3.fromDegrees(-117.16, 32.71, 15000.0),
});

更改相机的方向

flyTo要在完成后更改相机的方向,请添加一个orientation选项:

viewer.camera.flyTo({
    destination: Cesium.Cartesian3.fromDegrees(-117.16, 32.71, 15000.0),
    orientation: {
      // 航向:相对于东
      heading: Cesium.Math.toRadians(20.0),
      // 俯仰:相对于北
      pitch: Cesium.Math.toRadians(-35.0),
      // 翻滚:相对于上
      roll: 0.0,
    },
});

获取一个点位置

如果您知道要飞往的地点的名称但不确定该地点的坐标是什么,您可以使用pickPosition来查找。
以下代码片段将在点击时打印出某个点的位置Cartesian3:

var handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);
handler.setInputAction(function (event) {
  var pickedPosition = viewer.scene.pickPosition(event.position);
  if (Cesium.defined(pickedPosition)) {
    console.log(pickedPosition);
  }
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);

在这里插入图片描述

飞往已添加资源

如果你已经将资源添加到场景,并希望将相机聚焦在它上面。
viewer.flyTo 函数接受 Entity、 EntityCollection、 DataSource、 Cesium3DTilset等等。

// 添加一个矩形到场景
var rectangle = viewer.entities.add({
  rectangle: {
      coordinates: Cesium.Rectangle.fromDegrees(-90.0, 38.0, -87.0, 40.0),
  },
});
// 将相机飞往这个矩形
viewer.flyTo(rectangle);

控制相机飞行运动

相机的一个选项camera.flyTo功能easingFunction。
以下代码示例将缓动函数设置为QUADRATIC_IN_OUT从东京晴空塔飞到西雅图太空针塔

viewer.camera.flyTo({
  destination: new Cesium.Cartesian3(
    -3961951.575572026,
    3346492.0945766014,
    3702340.5336036095
  ),
  orientation: {
    direction: new Cesium.Cartesian3(
      0.8982074415844437,
      -0.4393530288745287,
      0.013867512433959908
    ),
    up: new Cesium.Cartesian3(
      0.12793638617798253,
      0.29147314437764565,
      0.9479850669701113
    ),
  },
  complete: function () {
    setTimeout(function () {
      viewer.camera.flyTo({
        destination: new Cesium.Cartesian3(
          -2304817.2435183465,
          -3639113.128132953,
          4688495.013644141
        ),
        orientation: {
          direction: new Cesium.Cartesian3(
            0.3760550186878076,
            0.9007147395506565,
            0.21747547189489164
          ),
          up: new Cesium.Cartesian3(
            -0.20364591529594356,
            -0.14862471084230877,
            0.9676978022659334
          ),
        },
        easingFunction: Cesium.EasingFunction.QUADRATIC_IN_OUT,
        duration: 5,
      });
    }, 1000);
  },
});

锁定相机

将相机锁定到一个点,将摄像机的移动限制在某个区域或资源。
使用相机的 lookAtTransform 功能。以下代码片段将相机锁定在日本富士山:

const center = Cesium.Cartesian3.fromRadians(
  2.4213211833389243,
  0.6171926869414084,
  3626.0426275055174
);
const transform = Cesium.Transforms.eastNorthUpToFixedFrame(center);
viewer.scene.camera.lookAtTransform(
  transform,
  new Cesium.HeadingPitchRange(0, -Math.PI / 4, 2900)
);

围绕一个点运行

将相机锁定到一个点后,您可以创建一个相机轨道来展示您的资源。这可以通过使用带有事件侦听器的相机功能来实现: lookAtTransform

// Lock camera to a point
const center = Cesium.Cartesian3.fromRadians(
  2.4213211833389243,
  0.6171926869414084,
  3626.0426275055174
);
const transform = Cesium.Transforms.eastNorthUpToFixedFrame(center);
viewer.scene.camera.lookAtTransform(
  transform,
  new Cesium.HeadingPitchRange(0, -Math.PI / 8, 2900)
);

// Orbit this point
viewer.clock.onTick.addEventListener(function (clock) {
  viewer.scene.camera.rotateRight(0.005);
});

screenSpaceCameraController(屏幕空间相机控制器)

将 ScreenSpaceCameraController 用户输入(例如鼠标和触摸)从窗口坐标转换为相机运动。它包含用于启用和禁用不同类型的输入、修改惯性量以及最小和最大缩放距离的属性。
例如,你可以使用 来 ScreenSpaceCameraController 控制是否允许摄像头进入地下:

// Disable camera collision to allow it to go underground
viewer.scene.screenSpaceCameraController.enableCollisionDetection = false;

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

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

相关文章

一、网络协议和常用的网络工具

文章目录 1.计算机概论1.1 计算机网络是什么?1.2 计算机网络的层次结构 2.TCP/IP详解2.1 TCP/IP协议族2.2 网络传输中的数据2.3 网路通信中的地址和端口号2.4 TCP三次握手建立连接2.5 TCP四次挥手建立连接 3.网络工具Wireshark和tcpdump4.一次完整的Http请求过程 1.…

Live Demo精彩大放送,演绎openGauss技术创新

技术是开源社区的根基,创新是推动技术发展的源动力。openGauss开源三周年,携手开发者、社区伙伴、用户,持续聚焦内核竞争力、用户场景架构创新、完善周边生态工具。5月26日,openGauss Developer Day 2023 主论坛现场,1…

自定义包含天时分的时长选择器组件

场景:项目是reactantd 实现的。如果传感器超过3天4小时没有上报数据,则认为设备已经坏了,需要发出告警。 3天4小时这是由用户在前端页面输入的,因此需要有一个时长选择器。antd 原生的TimePicker 组件只能实现选择 时、分、秒&…

(Qt)day4

widget.h #ifndef WIDGET_H #define WIDGET_H#include <QDebug> #include <QMainWindow> #include <QMessageBox> #include <QTimer> //定时器类头文件 #include <QTime> //时间类的头文件 #include <QTimerEvent> //定时器…

k8s的service资源类型有ClusterIP、Nodeport、ExternalName、LoadBalancer、Headless(None)

1. ClusterIP 是什么 ClusterIP 是在所有节点内生成一个虚拟IP&#xff0c;为一组pod提供统一的接入点&#xff0c;当service存在时&#xff0c;它的IP地址和端口不会发生改变&#xff0c;客户端通过service的ip和端口建立连接&#xff0c;由service将连接路由到该服务的任意一…

基于深度学习的人脸识别与检测方案

一、项目介绍前言 人脸识别作为一种生物特征识别技术&#xff0c;具有非侵扰性、非接触性、友好性和便捷性等优点。人脸识别通用的流程主要包括人脸检测、人脸裁剪、人脸校正、特征提取和人脸识别。人脸检测是从获取的图像中去除干扰&#xff0c;提取人脸信息&#xff0c;获取人…

使用ASM在Android中进行字节码注入

目录 使用方法 1.编译使用插件 这里自定义了一个插件用来对字节码进行操作 首先我们需要找到这个Gradle任务&#xff0c;双击进行编译打包 打包成功后会生成如下目录 然后我们需要在项目的gradle文件中进行引用 然后在application的model下的gradle中应用插件 2.使用ASM清…

【裸机开发】中断系统(二)—— Reset 中断服务函数(汇编实现)

目录 一、Reset 中断服务函数的实现步骤 二、汇编实现 Reset 中断服务函数 1、禁止/打开全局中断 2、设置SP指针 3、清除 .bss 段 4、完整 Reset 中断服务函数 一、Reset 中断服务函数的实现步骤 实现 Reset 中断服务函数的基本步骤如下&#xff1a; 设置各个模式下的S…

发布Android Lib 到 MavenCentral

新建 Sonatype 项目 注册账号&#xff1a; https://issues.sonatype.org/secure/Signup!default.jspa 这里注册不需要什么验证码&#xff0c;很简单。 创建问题 点击新建&#xff1a; 概要&#xff1a;自定义&#xff0c;写项目名称即可。 GroupId&#xff1a;如果是git…

C语音:打印整数二进制的奇数位和偶数位

题目&#xff1a; 获取一个整数二进制序列中所有的偶数位和奇数位&#xff0c;分别打印出二进制序列 思路&#xff1a; 总体思路&#xff1a; &#xff08;一&#xff09;. 输入数据 &#xff08;二&#xff09;. 打印奇数位&#xff1a; 使用 for循环 循环产生 1~32 之间的偶…

2023年5月 青少年软件编程(图形化) 等级考试试卷(一级)

青少年软件编程&#xff08;图形化&#xff09; 等级考试试卷&#xff08;一级&#xff09;2023.6 一、 单选题(共 25 题&#xff0c; 共 50 分) 1.看图找规律&#xff0c; 请问下图红框中是&#xff1f; &#xff08; &#xff09; A. B. C. D. 标准答案&#xff1a; D 试题解…

centos系统把.net6 web api部署到docker

为了搞定docker是怎么部署的&#xff0c;做个笔记 前提条件准备一个core项目,使用vs自带的docker打包假如你选择docker支持的时候不小心安装了Docker Desktop&#xff1b;还可以简单的先部署到本地docker中发布到centosdocker常用命令 前提条件 一台centos 8.0 版本以上的linu…

软件测试的7年,我秃了,也变强了...

当前就业环境&#xff0c;裁员、失业消息满天飞&#xff0c;好像能有一份工作就不错了&#xff0c;更别说高薪。其实这只是一方面。另一方面&#xff0c;各大企业依然求贤若渴&#xff0c;高技术人才依然紧缺&#xff0c;只要技术过硬&#xff0c;拿个年包50w不是问题。 人生格…

i.MX RT1010跨界MCU(MCUXpresso IDE上手体验)

MCUXpresso IDE是专为NXP半导体的基于ARM Cortex-M内核的MCU芯片开发而设计的&#xff0c;其优势主要体现在以下几个方面&#xff1a; MCUXpresso IDE集成了MCUXpresso SDK&#xff0c;这是NXP提供的一个软件开发套件&#xff0c;包含了底层驱动、中间件以及大量的示例代码和应…

Charles Windows10使用 证书安装 过期重设 证书加入到受信任根目录 配置访问WhatsApp

普通教程文档 抓包神器 Charles 使用教程详解 - 知乎 界面选项详细讲解 Charles的功能介绍与使用教程&#xff0c;一学就会&#xff0c;不信就来试试&#xff1f; 疑难杂症 由于CA 根证书不在“受信任的根证书颁发机构”存储区中&#xff0c;所以它不受信任 1、winr 运行…

SandQuant停止运营,免费获取A股数据

亲爱的各位朋友们&#xff1a; SandQuant即日起不再对外提供任何服务&#xff0c;为了感恩曾经支持过我们的客户朋友&#xff0c;现免费提供所有A股数据&#xff08;数据非常庞大&#xff0c;请酌情下载&#xff09;&#xff0c;请通过链接自取。 请关注我们获取链接&#xff…

产品不可或缺的文档——帮助文档

在互联网时代&#xff0c;产品的更新迭代速度越来越快&#xff0c;产品功能也越来越复杂&#xff0c;为了让用户能够更好地理解和使用产品&#xff0c;帮助文档逐渐成为了产品不可或缺的一部分。本文将从帮助文档的作用、设计原则、撰写技巧等方面探讨帮助文档的重要性及如何编…

【AI面试】损失函数(Loss),定义、考虑因素,和怎么来的

神经网络学习的方式,就是不断的试错。知道了错误,然后沿着错误的反方向(梯度方向)不断的优化,就能够不断的缩小与真实世界的差异。 此时,如何评价正确答案与错误答案,错误的有多么的离谱,就需要一个评价指标。这时候,损失和损失函数就运用而生。 开始之前,我们先做…

MySQL数据库——初步安装与数据表结构数据管理

MySQL数据库——初步安装与数据表结构数据管理 一、数据库的基本概念1.数据库基本常识2.数据库系统发展史 二、数据库的分类1.关系数据库&#xff08;SQL&#xff09;2.非关系数据库&#xff08;NO SQL&#xff09; 三、mysql的数据类型1.常用的数据库类型2.char与varchar的区别…

ijkplayer 支持srt协议 rtmp协议编译步骤

写在前面 ffafaf这个编译真的太垃圾了 一堆毛病 感受下webrtc 傻瓜式编译 环境首先必须ndk 是android-ndk-r15c 或者 android-ndk-r14b ubuntu 系统随便22或者20&#xff0c;18都行 有个非常重要的点python必须是2.7 不然你会看到一大堆报错 高版本的ubuntu默认都是python3…