当前位置: 首页 > news >正文

【收藏】Cesium 限制相机倾斜角(pitch)滑动范围

1.效果


2.思路

    在项目开发的时候,有一个需求是限制相机倾斜角,也就是鼠标中键调整视图俯角时,不能过大,一般 pitch 角度范围在 0 至 -90之间,-90刚好为正俯视。

    在网上查阅了很多资料,发现并没有一个合适的解决方案,于是自个研究了半天,终于实现了,下面是我的解决方案。

(1)首先是 viewer.camera.changed.addEventListener 监听相机移动,同时不断获取相机状态,例如 pitch、heading、roll 参数等,后面会用到。

(2)设置最大容许角度,我这里设置了 -10 度,在相机监听中,判断相机 pitch 是否超过最大容许角度。

(3)当相机 pitch 大于 -10度时,停止相机监听(这是关键),同时先禁止鼠标中键移动改变视图倾斜角。最后就是视角修复,前面获取的相机参数这里就用到了,使用 viewer.camera.flyTo() 进行视角修正。

(4)在 viewer.camera.flyTo() 方法的成功回调中(complete)再次开启相机监听,当然不要忘记恢复鼠标中键移动改变视图。


3.代码

      _this.viewer.camera.changed.addEventListener(cameraChanged); //监听相机移动function cameraChanged() {// 获取当前相机的状态var camera = _this.viewer.camera;var pitch = camera.pitch;var minPitch = Cesium.Math.toRadians(-10); //角度只能再-10 至 -90之间var heading = camera.heading;var roll = camera.roll;// 当俯角超出设定角度if (pitch >= minPitch) {_this.viewer.camera.changed.removeEventListener(cameraChanged) // 先取消监听// 先静止鼠标中键对相机倾斜角的移动_this.viewer.scene.screenSpaceCameraController.enableTilt = false; // 使用该方法修正一点点视角_this.viewer.camera.flyTo({destination: _this.viewer.camera.position,orientation: {heading: heading,pitch: Cesium.Math.toRadians(-12),roll: roll},duration: 0.5,// 当视角修正完成,再次开启监听complete: function () {_this.viewer.scene.screenSpaceCameraController.enableTilt = true;_this.viewer.camera.changed.addEventListener(cameraChanged);},})}}

4.最后

    这里的方法还是有局限性,需要时刻监听相机变化,非常影响性能。不知道还有没有其他办法,欢迎各位大佬在评论区指正。

(ps:如果文章对你有帮助,可以点个赞鼓励下博主噢!)

相关文章:

【收藏】Cesium 限制相机倾斜角(pitch)滑动范围

1.效果 2.思路 在项目开发的时候,有一个需求是限制相机倾斜角,也就是鼠标中键调整视图俯角时,不能过大,一般 pitch 角度范围在 0 至 -90之间,-90刚好为正俯视。 在网上查阅了很多资料,发现并没有一个合适的…...

Jenkins流水线初体验(六)

DevOps之安装和配置 Jenkins (一) DevOps 之 CI/CD入门操作 (二) Sonar Qube介绍和安装(三) Harbor镜像仓库介绍&安装 (四) Jenkins容器使用宿主机Docker(五) Jenkins流水线初体验(六) 一、Jenkins流水线任务介绍 之前采用Jenkins的自由风格构建的项目,每个步骤…...

Azure OpenAI 生成式人工智能白皮书

简介 生成式 AI 成为人工智能领域新的关键词。吸纳从机器智能到机器学习、深度学习的关键技术生成式 AI更进一步,能够根据提示或现有数据创建新的书面、视觉和听觉内容。在此基础上大模型和大模型应用一时涌现,并迅速确立AI落地新范式。据 data.ai inte…...

Ubuntu22.04安装docker desktop遇到的bug

1. 确认已启用 KVM 虚拟化 如果加载了模块,输出应该如下图。说明 Intel CPU 的 KVM 模块已开启。 否则在VMware开启宿主机虚拟化功能: 2. 下一步操作: Ubuntu | Docker Docs 3. 启动Docker桌面后发现账户登陆不上去: Sign in | …...

LLMC:大语言模型压缩工具的开发实践

关注:青稞AI,学习最新AI技术 青稞Talk主页:qingkelab.github.io/talks 大模型的进步,正推动我们向通用人工智能迈进,然而庞大的计算和显存需求限制了其广泛应用。模型量化作为一种压缩技术,虽然可以用来加速…...

基于阿里云Ubuntu22.04 64位服务器Java及MySql环境配置命令记录

基于阿里云Ubuntu22.04 64位服务器Java及MySql环境配置命令记录 Java 23 离线环境配置MySql 环境配置MySQL常用命令 Java 23 离线环境配置 下载 Ubuntu环境下 Java 23 离线包 链接: java Downloads. 在Linux环境下创建一个安装目录 mkdir -p /usr/local/java将下载好的jdk压缩…...

第一课【输入输出】(题解)

1.向世界问好 题目描述 编程输出以下内容: Hello World! Im a C program. 输入格式 本题无输入。 输出格式 请按照样例输出,注意大小写、空格、感叹号,句号,单引号都必须使用英文输入法里的符号。 样例输入/输出 输入数据 1 本题无…...

查看 Linux 进程运行所在 CPU 内核

判断进程运行在哪个 CPU 内核上 作者:Dan Nanni 译者:LCTT | 2015-09-28 10:43 问题:Linux 进程运行在多核处理器系统上。怎样才能找出哪个 CPU 内核正在运行该进程? 当你在 多核 NUMA 处理器上 运行需要较高性能的 HPC&…...

ESP32外设学习部分--SPI篇

SPI学习 前言 我个人以为开始学习一个新的单片机最好的方法就是先把他各个外设给跑一遍,整体了解一下他的功能,由此记录一下我学习ESP32外设的过程,防止以后忘记。 SPI 配置步骤 SPI总线初始化 spi_bus_config_t buscfg {.miso_io_num …...

Tomcat的下载和使用,配置控制台输出中文日志

目录 1. 简介2. 下载3. 使用3.1 文件夹展示3.1.1 控制台输出乱码 3.2 访问localhost:80803.3 访问静态资源 4. 总结 1. 简介 Tomcat,全称为Apache Tomcat,是一个开源的Web应用服务器和Servlet容器,由Apache软件基金会的Jakarta项目开发。它实…...

MySQL不能被其他地址访问,授权问题解决(8.x,,5.x)

首先强调的是两个版本,5版本和8版本问题反馈不一样 Linux系统部署mysql8.4版本 MySQL官网地址写的很清楚了,不多介绍 直接进入主题,恶心了我三个多小时的问题,翻阅大量国内外资料,结果并不是个多么难得问题&#xff0…...

四、个人项目系统搭建

文章目录 一、python写的后端代码二、html代码三、index.css四、js代码 效果图: 一、python写的后端代码 后端代码使用Flask编写,如下所示: # app.py from flask import Flask, render_template, request, jsonify, g import sqlite3 import…...

CV(4)--边缘提取和相机模型

前言 仅记录学习过程,有问题欢迎讨论 边缘提取(涉及语义分割): 图象的边缘是指图象局部区域亮度变化显著的部分,也有正负之分,暗到亮为正 求边缘的幅度:sobel,Canny算子 图像分高频分量和低…...

SORT算法详解及Python实现

目录 SORT算法详解及Python实现第一部分:SORT算法概述与原理1.1 SORT算法简介1.2 应用场景1.3 算法流程第二部分:数学公式与主要模块2.1 卡尔曼滤波模型2.2 目标关联与匈牙利算法2.3 新建与移除机制第三部分:Python实现:SORT算法基础代码3.1 安装依赖3.2 基础代码实现第四部…...

图计算之科普:BSP计算模型、Pregel计算模型、

一、BSP计算模型 BSP计算模型,即整体同步并行计算模型(Bulk Synchronous Parallel Computing Model),又名大同步模型或BSP模型,是由哈佛大学L.G. Valiant教授(2010年图灵奖得主)在1992年提出的…...

pytest入门一:用例的执行范围

从一个或多个目录开始查找,可以在命令行指定文件名或目录名。如果未指定,则使用当前目录。 测试文件以 test_ 开头或以 _test 结尾 测试类以 Test 开头 ,并且不能带有 init 方法 测试函数以 test_ 开头 断言使用基本的 assert 即可 所有的…...

22. 正则表达式

一、概述 正则表达式(regular expression)又称 规则表达式,是一种文本模式(pattern)。正则表达式使用一个字符串来描述、匹配具有相同规格的字符串,通常被用来检索、替换那些符合某个模式(规则&…...

Flink Python作业快速入门

Flink Python快速入门_实时计算 Flink版(Flink)-阿里云帮助中心 import argparse # 用于处理命令行参数和选项,使程序能够接收用户通过命令行传递的参数 import logging import sysfrom pyflink.common import WatermarkStrategy, Encoder, Types from pyflink.data…...

自定义函数库

求两点距离 double dis(double x1, double y1, double x2, double y2){return sqrt(pow(x2-x1, 2)pow(y2-y1, 2)); }判断闰年 bool isLeapYear(int year){return year%40 && year%100!0 || year%4000; }判断素数 bool isPrime(int num){if(num<2) return false;f…...

FreeRTOS例程2-任务挂起恢复与使用中断遇到的坑!

任务挂起简单点理解就是现在不需要执行这个任务&#xff0c;让它先暂停&#xff0c;就是挂起。恢复就是从刚才挂起的状态下继续运行。 API函数 任务挂起vTaskSuspend() 函数原型(tasks.c中): void vTaskSuspend( TaskHandle_t xTaskToSuspend ) 1. 参数&#xff1a; xTaskTo…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...