当前位置: 首页 > 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:如果文章对你有帮助,可以点个赞鼓励下博主噢!)

http://www.lryc.cn/news/503296.html

相关文章:

  • Jenkins流水线初体验(六)
  • Azure OpenAI 生成式人工智能白皮书
  • Ubuntu22.04安装docker desktop遇到的bug
  • LLMC:大语言模型压缩工具的开发实践
  • 基于阿里云Ubuntu22.04 64位服务器Java及MySql环境配置命令记录
  • 第一课【输入输出】(题解)
  • 查看 Linux 进程运行所在 CPU 内核
  • ESP32外设学习部分--SPI篇
  • Tomcat的下载和使用,配置控制台输出中文日志
  • MySQL不能被其他地址访问,授权问题解决(8.x,,5.x)
  • 四、个人项目系统搭建
  • CV(4)--边缘提取和相机模型
  • SORT算法详解及Python实现
  • 图计算之科普:BSP计算模型、Pregel计算模型、
  • pytest入门一:用例的执行范围
  • 22. 正则表达式
  • Flink Python作业快速入门
  • 自定义函数库
  • FreeRTOS例程2-任务挂起恢复与使用中断遇到的坑!
  • L23.【LeetCode笔记】验证回文串(剖析几种解法)
  • FPGA 17 ,FPGA 与 SR-IOV虚拟化技术,高性能计算与虚拟化技术的结合(FPGA 与 SR-IOV 和 PCI,高性能计算与虚拟化的完美融合)
  • 解决navicat 导出excel数字为科学计数法问题
  • [Unity] AppLovin Max接入Native 广告 Android篇
  • Source Insight 4.0的安装
  • 远程调试软件对比与使用推荐
  • 鸿蒙项目云捐助第二讲鸿蒙图文互动基本程序实现
  • 求解球面的一组正交标架
  • php.ini 文件上传/执行时间/部分配置新手教程
  • 【Leetcode Top 100】102. 二叉树的层序遍历
  • 【C++笔记】AVL树