Cesium禁止相机进入地下(地形穿透)问题

2023-12-14 04:10

本文主要是介绍Cesium禁止相机进入地下(地形穿透)问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Cesium滚动鼠标的 禁止相机进入地下 亲测可行的解决方法

    • 问题描述
    • 解决方案

问题描述

Cesium的地形图中,滚动鼠标滚轮会出现Cesiumviewer进入地形之下,出现格网
如下图所示
地形格网

在设置了 scene.screenSpaceCameraController.minimumZoomDistance=100;

之后,在地形还在加载的过程中旋转地球,依然会出现上述问题。

解决方案

注意:版本号1.47.0测试成功 其他1.XX版本相差不太大

先是会出现部分格网,但是会加载对应的视角的地形。之前是一直出现格网不会加载地形的。效果受电脑配置影响。
监控相机的pitch值
pitch>0的时候就禁止地球旋转事件
监控鼠标滚轮按下的鼠标移动事件
当鼠标朝下移的时候就允许地球旋转
具体代码

//初始化地球

var viewer = new Cesium.Viewer('cesiumContainer',{infoBox: false,selectionIndicator: false,shadows: true,shouldAnimate: true,animation: false, //动画控制不显示baseLayerPicker: false, //图层控制显示geocoder: false, //地名查找不显示timeline: false, //时间线不显示sceneModePicker: false, //投影方式显示sceen3DOnly: true,fullscreenButton: false,homeButton: false,navigationHelpButton: false,})

//相机的pitch值大于0则禁止球旋转操作

var scene = viewer.scene;
var canvas = viewer.canvas;
var camera = viewer.camera;
scene.screenSpaceCameraController.minimumZoomDistance=100; //距离地形的距离?这个值可以多测试几个值,,我这不太好描述
viewer.clock.onTick.addEventListener(function () {setMinCamera();
})
var setMinCamera = function () {if(camera.pitch > 0){scene.screenSpaceCameraController.enableTilt = false;}
}

//监控鼠标滚轮按下状态下移动鼠标事件,当鼠标向下移动的时候就允许地球旋转操作

 var startMousePosition;var mousePosition;var handler = new Cesium.ScreenSpaceEventHandler(canvas);handler.setInputAction(function(movement) {mousePosition = startMousePosition = Cesium.Cartesian3.clone(movement.position);handler.setInputAction(function(movement) {mousePosition = movement.endPosition;var y = mousePosition.y - startMousePosition.y;if(y>0){scene.screenSpaceCameraController.enableTilt = true;}}, Cesium.ScreenSpaceEventType.MOUSE_MOVE);}, Cesium.ScreenSpaceEventType.MIDDLE_DOWN);

至此相机操作不会再进入地下或者地形里面,个人发现和那个minimumZoomDistance=100有关系,不会出现格网,而是缓慢加载对应视角的地图情况。效果如下图所示:
地形加载过程中:
地形加载中
加载完成
如果没有解决地形格网,则格网将一直存在,解决后将加载对应视角的地形情况,如下图
成功加载对应地图

这篇关于Cesium禁止相机进入地下(地形穿透)问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/491099

相关文章

numpy求解线性代数相关问题

《numpy求解线性代数相关问题》本文主要介绍了numpy求解线性代数相关问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 在numpy中有numpy.array类型和numpy.mat类型,前者是数组类型,后者是矩阵类型。数组

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

怎么关闭Ubuntu无人值守升级? Ubuntu禁止自动更新的技巧

《怎么关闭Ubuntu无人值守升级?Ubuntu禁止自动更新的技巧》UbuntuLinux系统禁止自动更新的时候,提示“无人值守升级在关机期间,请不要关闭计算机进程”,该怎么解决这个问题?详细请看... 本教程教你如何处理无人值守的升级,即 Ubuntu linux 的自动系统更新。来源:https://

Redis缓存问题与缓存更新机制详解

《Redis缓存问题与缓存更新机制详解》本文主要介绍了缓存问题及其解决方案,包括缓存穿透、缓存击穿、缓存雪崩等问题的成因以及相应的预防和解决方法,同时,还详细探讨了缓存更新机制,包括不同情况下的缓存更... 目录一、缓存问题1.1 缓存穿透1.1.1 问题来源1.1.2 解决方案1.2 缓存击穿1.2.1

vue解决子组件样式覆盖问题scoped deep

《vue解决子组件样式覆盖问题scopeddeep》文章主要介绍了在Vue项目中处理全局样式和局部样式的方法,包括使用scoped属性和深度选择器(/deep/)来覆盖子组件的样式,作者建议所有组件... 目录前言scoped分析deep分析使用总结所有组件必须加scoped父组件覆盖子组件使用deep前言

解决Cron定时任务中Pytest脚本无法发送邮件的问题

《解决Cron定时任务中Pytest脚本无法发送邮件的问题》文章探讨解决在Cron定时任务中运行Pytest脚本时邮件发送失败的问题,先优化环境变量,再检查Pytest邮件配置,接着配置文件确保SMT... 目录引言1. 环境变量优化:确保Cron任务可以正确执行解决方案:1.1. 创建一个脚本1.2. 修

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g

四种简单方法 轻松进入电脑主板 BIOS 或 UEFI 固件设置

《四种简单方法轻松进入电脑主板BIOS或UEFI固件设置》设置BIOS/UEFI是计算机维护和管理中的一项重要任务,它允许用户配置计算机的启动选项、硬件设置和其他关键参数,该怎么进入呢?下面... 随着计算机技术的发展,大多数主流 PC 和笔记本已经从传统 BIOS 转向了 UEFI 固件。很多时候,我们也

SpringBoot项目删除Bean或者不加载Bean的问题解决

《SpringBoot项目删除Bean或者不加载Bean的问题解决》文章介绍了在SpringBoot项目中如何使用@ComponentScan注解和自定义过滤器实现不加载某些Bean的方法,本文通过实... 使用@ComponentScan注解中的@ComponentScan.Filter标记不加载。@C

VMWare报错“指定的文件不是虚拟磁盘“或“The file specified is not a virtual disk”问题

《VMWare报错“指定的文件不是虚拟磁盘“或“Thefilespecifiedisnotavirtualdisk”问题》文章描述了如何修复VMware虚拟机中出现的“指定的文件不是虚拟... 目录VMWare报错“指定的文件不是虚拟磁盘“或“The file specified is not a virt