【收藏】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:如果文章对你有帮助,可以点个赞鼓励下博主噢!)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【经验分享】私有云运维的知识点

最近忙于备考没关注,有次点进某小黄鱼发现首页出现了我的笔记还被人收费了 虽然我也卖了一些资源,但我以交流、交换为主,笔记都是免费给别人看的 由于当时刚刚接触写的并不成熟,为了避免更多人花没必要的钱,所以决定公…

Please activate LaTeX Workshop sidebar item to render the thumbnail of a PDF

Latex代码中使用pdf图片,无法预览,提示: Please activate LaTeX Workshop sidebar item to render the thumbnail of a PDF 解决办法: 点击左边这个刷新下即可

QT:Widgets中的事件

事件的处理 (1)重新实现部件的paintEvent()、mousePressEvent()等事件处理函数。这是最常用的一种方法,不过它只能用来处理特定部件的特定事件。 (2)重新实现notify()函数。这个函数功能强大,提供了完全的控制,可以在事件过滤器得到事件之前…

Windows如何安装go环境,离线安装beego

一、安装go 1、下载go All releases - The Go Programming Language 通过网盘分享的文件:分享的文件 链接: https://pan.baidu.com/s/1MCbo3k3otSoVdmIR4mpPiQ 提取码: hxgf 下载amd64.zip文件,然后解压到指定的路径 2、配置环境变量 需要新建两个环境…

AI Agent:重塑业务流程自动化的未来力量(2/30)

《AI Agent:重塑业务流程自动化的未来力量》 摘要:整体思路是先介绍 AI Agent 的基本情况,再深入阐述其实现业务流程自动化的方法和在不同领域的应用,接着分析其价值和面临的挑战,最后得出结论,为读者全面…

R语言的数据结构-矩阵

【图书推荐】《R语言医学数据分析实践》-CSDN博客 《R语言医学数据分析实践 李丹 宋立桓 蔡伟祺 清华大学出版社9787302673484》【摘要 书评 试读】- 京东图书 (jd.com) R语言医学数据分析实践-R语言的数据结构-CSDN博客 矩阵是一个二维数组,矩阵中的元素都具有相…

springboot+javafx使用aop切面导致的fx:id不能被注入问题

记录一个我遇到得问题 问题描述 我本来使用AOP切面来进行全局异常管理,但是使用AOP之后fxml中通过fx:id绑定得参数无法被注入 Slf4j Component Aspect public class GlobalExceptionAspect {AfterThrowing(pointcut "execution(* com.shkj.videoclassifica…

STM32 HAL库 + LM2904运算放大器 + ADC + 4-20ma液位传感器:电路设计及代码实现

4-20ma液位传感器在工业自动化和日常应用中非常常见,例如水位监测、液体储罐管理等。本文将结合STM32 HAL库,带你实现一个简单的液位监测demo,从电路设计到代码实现,实现通过单通道ADC采集4-20ma液位传感器的信号,并通…

MongoDB-固定集合(Capped Collection)

在 MongoDB 中,固定集合(Capped Collection)是一种具有特殊属性的集合。固定集合具有一个固定的最大大小,并且一旦达到该大小时,最早插入的文档将会被自动删除,以便为新的文档腾出空间。固定集合的这种特性…

Vue2 基础

Vue 2 是 Vue.js 的第二个主要版本,于 2016 年发布。它是一个渐进式的 JavaScript 框架,以其简单、灵活、易用性高而广受欢迎。Vue 2 主要专注于构建用户界面(UI),并且非常适合用于构建单页应用(SPA&#x…

2450.学习周刊-2024年50周

封面 人生五个球 ✍优秀博文 面对老板安排的工作,事事有回应,有必要吗? 职场精英进阶手册:工作推进五原则,让你合理高效地利用时间 上个班而已,千万别畏手畏脚 理解了雷军说的SU7要守正出奇&#xff0…

基于Llamaindex的网页内容爬取实战

目的 本文不关注如何解析网页 html 元素和各种 python 爬虫技术,仅作为一种网页数据的预处理手段进行研究。Llamaindex 也并不是爬虫技术的集大成者,使用它是为了后续的存查一体化。 安装依赖 pip install llama-index-readers-web # pip install llam…

Excel拆分脚本

Excel拆分 工作表按行拆分为工作薄 工作表按行拆分为工作薄 打开要拆分的Excel文件,使用快捷键(AltF11)打开脚本界面,选择要拆分的sheet,打开Module,在Module中输入脚本代码,然后运行脚本 Su…

go语言zero项目通过Supervisor启动与停用的管理

为了让Go项目通过 Supervisor 启动与重启,您需要确保已经正确安装和配置了 Supervisor。接下来是详细的步骤来配置您的 Go 项目,使其可以通过 Supervisor 管理。 ### 配置 Go 项目 首先,确保您的 Go 项目可以编译成一个可执行文件&#xff…

【ABAP SAP】开发-BUG修补记录_采购申请打印时品名规格品牌为空

项目场景: TCODE:自开发程序ZMMF004 采购申请打印 问题描述 ZMMF004打印的时候,有的采购申请的品名、规格、品牌为空 原因分析: 1、首先我通过写SQL语句查底表来看这几条采购申请本身有无品名、规格、品牌 SQL语句如下,只需修…

汽车租赁系统数据库 E-R 图设计

文章目录 汽车租赁系统数据库 E-R 图设计一、实体(Entities)二、实体间关系(Relationships)三、数据表(Tables) 汽车租赁系统数据库 E-R 图设计 一、实体(Entities) 用户&#xff0…

【小沐学GIS】基于C++绘制三维数字地球Earth(OpenGL、glfw、glut、QT)第三期

🍺三维数字地球系列相关文章如下🍺:1【小沐学GIS】基于C绘制三维数字地球Earth(456:OpenGL、glfw、glut)第一期2【小沐学GIS】基于C绘制三维数字地球Earth(456:OpenGL、glfw、glut)第二期3【小沐…

Vizcom:AI驱动的草图到3D设计革命

Vizcom是一家领先的AI技术公司,专注于为工业设计师提供工具,将手绘草图快速转化为可制造的3D模型,从而加速产品迭代和创新。 公司背景与愿景 成立于2021年的Vizcom由前Nvidia工业设计师Jordan Taylor创立。Taylor凭借其深厚的创意设计背景和技术敏锐度,看到了生成对抗网络…

【开源免费】基于SpringBoot+Vue.JS课程智能组卷系统(JAVA毕业设计)

本文项目编号 T 009 ,文末自助获取源码 \color{red}{T009,文末自助获取源码} T009,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 老…

Linux常用指令-----下

Linux常用指令------上 Linux常用指令------中 Linux系列 文章目录 Linux系列前言一、more指令二、less指令三、head指令和tail指令四、grep指令五、zip指令和unzip指令六、tar指令1、打包压缩2. 预览3. 解压解包 前言 在上一篇博客中,我給大家介绍了cat指令&#…