Cesium--获取当前相机中心与地面的射线焦点

本文记录获取当前相机中心与地面的射线焦点的方法,可用于视角缩放过程中,控制视角自动平滑切换到二维等场景:

方法一定是视角中心能与地面有交集,如果对着地平线或对着天空肯定是没效果的。直接放代码:

//调整相机到正北方向 上帝视角
const limitViewerController=(viewer)=>{
	try{
		viewer.scene.screenSpaceCameraController.enableTilt = false; //禁止中键旋转视角
		// 将相机朝向正北方向(即Z轴指向正北,Y轴指向正东)
		var heading = Cesium.Math.toRadians(0.0); // 正北方向为90度
		var pitch = Cesium.Math.toRadians(0.0); // 保持平面视角
		var roll = 0.0; // 无滚动
		var hpr = new Cesium.HeadingPitchRoll(heading, pitch, roll);
		let camera_position = viewer.camera.position.clone();
		let cameraHeight = viewer.camera.positionCartographic.height;

		let camera = viewer.scene.camera;
		const rayget = new Cesium.Ray(camera.position, camera.direction)
		
		//射线监测 不到目标时 无法设置视角
		const rayintersection = Cesium.IntersectionTests.rayEllipsoid(rayget, Cesium.Ellipsoid.WGS84);
		if(rayintersection){
			const raypoint = Cesium.Ray.getPoint(rayget, rayintersection.start);
			
			// 获取当前使用的地球椭球体
			var ellipsoid = viewer.scene.globe.ellipsoid;
			// 将Cartesian3转换为经纬度
			var raycartographic = ellipsoid.cartesianToCartographic(raypoint);
			 var cameracartographic = ellipsoid.cartesianToCartographic(camera_position);
			 
			// 获取经度、纬度和高度
			var raylongitude = Cesium.Math.toDegrees(raycartographic.longitude);
			var raylatitude = Cesium.Math.toDegrees(raycartographic.latitude);
			var rayheight = cameracartographic.height;
			
			const destinationPostion = Cesium.Cartesian3.fromDegrees(raylongitude, raylatitude, rayheight+100000);
			
			viewer.camera.flyTo({
			    destination : destinationPostion,
				duration: 1.5,
			    orientation : {
			        heading : 6.283185307179586,
			        pitch : -1.5707963267948966,
			        roll : 0.0
			    }
			});
		}
		
		
		//调整也可以通过TWEEN.js 实现过渡动画
		//import * as TWEEN from '@tweenjs/tween.js'
		// const coords = {x: viewer.camera.heading, y: viewer.camera.pitch,z:viewer.camera.roll} // Start at (0, 0)
		// const tween = new TWEEN.Tween(coords, false) // Create a new tween that modifies 'coords'.
		// .to({x: 6.283185307179586, y: -1.5707963267948966, z:0}, 1000) 
		// .easing(TWEEN.Easing.Quadratic.InOut)
		// .onUpdate((object) => {
		// 	viewer.camera.setView({
		// 		//destination : new Cesium.Cartesian3(raypoint.x, raypoint.y, camera_position.z),
		// 	    orientation: {
		// 			heading: object.x, // 方向的朝向,以弧度为单位
		// 			pitch: object.y, // 视角的高度,以弧度为单位
		// 	        roll: object.z // 绕着圆周运动的角度,一般设置为0
		// 	    }
		// 	});
		// 	// viewer.scene.camera.setView({
		// 	// 	 destination : new Cesium.Cartesian3(camera_position.x, camera_position.y, camera_position.z),
		// 	//     orientation: {
		// 	//         headingPitchRoll: new Cesium.HeadingPitchRoll(object.x, object.y, object.z)
		// 	//     }
		// 	// });
		// })
		// .start() // Start the tween immediately.
		// function animate() {
		// 	tween.update()
		// 	requestAnimationFrame(animate)
		// }
		// requestAnimationFrame(animate)
		
	
	}catch(err){
		console.log(err);
	}
}

 

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

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

相关文章

链接追踪系列-04.linux服务器docker安装elk

[rootVM-24-17-centos ~]# cat /proc/sys/vm/max_map_count 65530 [rootVM-24-17-centos ~]# sysctl -w vm.max_map_count262144 vm.max_map_count 262144 #先创建出相应目录:/opt/dockerV/es/…docker run -e ES_JAVA_OPTS"-Xms512m -Xmx512m" -d -p 92…

单目3D和bev综述

文章目录 SOTA2D 检测单目3d检测3d bev cam范式1 Transformer attention is all you need 20172 ViT vision transformer ICLR 2021google3 swin transformer 2021 ICCV bestpaper MS4 DETR 2020 decoder set match4 Deformabel DETR (deformabel convolution&#…

c++包管理器

conan conan search,查看网络库 conan profile detect,生成缓存信息conan new cmake_exe/cmake_lib,创建cmakelists.txtconan install .,执行Conanfile.txt中的配置,生成相关的bat文件 项目中配置Conanfile.txt(或者…

k8s核心操作_存储抽象_K8S中的持久卷与持久卷申请_PV/PVC理解与搭建_解决联动删除动态存储管理---分布式云原生部署架构搭建029

我们之前使用nfs搭建了一个存储系统,并且使用nfs的自动同步,让,不同节点上部署的应用,都可以,访问到自己的配置文件,并且 当pod宕机,在其他机器上启动,也可以访问到配置文件,但是这里依然有问题. 1.首先对于nfs上的文件夹,现在是我们自己创建的,有很多程序会自动创建很多文件夹…

知识图谱与LLMs:实时图分析(通过其关系的上下文理解数据点)

大型语言模型 (LLM) 极大地改变了普通人获取数据的方式。不到一年前,访问公司数据需要具备技术技能,包括熟练掌握各种仪表板工具,甚至深入研究数据库查询语言的复杂性。然而,随着 ChatGPT 等 LLM 的兴起,随着所谓的检索…

贪心算法案例

1.买卖股票的最佳时机 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔…

贝塞尔曲线基础

贝塞尔曲线于1962年由法国工程师皮埃尔贝塞尔(Pierre Bzier)所广泛发表,他运用贝塞尔曲线来为汽车的主体进行设计。贝塞尔曲线最初由Paul de Casteljau于1959年运用de Casteljau演算法开发,以稳定数值的方法求出贝兹曲线。 贝塞尔…

基于ARM Cortex-M3单片机研发的国产指纹芯片 - P1032BF1

智能指纹锁的核心部件:主板、离合器、指纹采集器、密码技术、微处理器(CPU)、智能应急钥匙。作为指纹锁来说,重要的应该是指纹芯片。指纹锁是通过电子部件及机械部件的精密组合而生产出的安全产品。指纹锁的本质无非是安全、便捷、…

配置Redis时yml的格式导致报错

报错如下 java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:98) at org.springframework.test.context.su…

C++面试问题

C基础 什么是野指针? 指向未分配或已释放内存的指针。比如未初始化、delete后未指向空、保存了局部变量的地址 怎么解决野指针问题? 使用智能指针释放后置空指针初始化避免返回局部变量的地址 C空类会创造那些函数? 默认构造析构函数拷…

【Linux】重定向,dup2

2.重定向 2.1.输出重定向 1.输入重定项。 我们之前学习过的输出重定向就是,将我们本应该输出到显示器上的数据重定向输出到另一个文件中。那他的原理是什么了? 例如: 如果我们想让本应该输出到“显示器文件”的数据输出到log.txt文件当中&…

Spring webflux基础核心技术

一、 用操作符转换响应式流 1 、 映射响应式流元素 转换序列的最自然方式是将每个元素映射到一个新值。 Flux 和 Mono 给出了 map 操作符&#xff0c;具有 map(Function<T&#xff0c;R>) 签名的方法可用于逐个处理元素。 当操作符将元素的类型从 T 转变为 R 时&#xf…

Linux虚拟机扩展磁盘空间

文章目录 在VM上进行扩展新的磁盘空间进入虚拟机将扩展的磁盘空间分配给对应的分区 VM 下的Linux虚拟机提示磁盘空间不足&#xff0c;需要对其进行磁盘扩容&#xff0c;主要有以下两步&#xff1a; 在VM上进行扩展新的磁盘空间 先关闭虚拟机在VM的虚拟机设置处进行硬盘扩展 …

电脑关机被阻止

1. winR输入regedit进入注册表 2. 选择HKEY_USERS-》.DEFAULT-》Control Panel-》Desktop 3. 右键DeskTop新建字符串值&#xff0c;命名为AutoEndTasks&#xff0c;数值设置为1

C++_入门

C入门 C发展历程 C的起源可以追溯到1979年&#xff0c;当时Bjarne Stroustrup(本贾尼斯特劳斯特卢普&#xff0c;这个翻译的名字不同的地⽅可能有差异)在贝尔实验室从事计算机科学和软件⼯程的研究工作。面对项目中复杂的软件开发任务&#xff0c;特别是模拟和操作系统的开发…

【SQL】DML、DDL、ROLLBACK 、COMMIT详解

DML DML&#xff08;Data Manipulation Language&#xff09;数据操作语言&#xff0c;是用于对数据库中的数据进行基本操作的一种编程语言。DML是数据库管理系统&#xff08;DBMS&#xff09;中的一个重要部分&#xff0c;它允许用户或应用程序对数据库中的数据进行增、删、改…

君方智能设计平台-数据对象升级框架设计

1.设计背景 由于文件存储基于流存储&#xff0c;目前处于快速开发阶段&#xff0c; 修改对象数据结构很频繁。对象数据结构的修改&#xff0c;会破坏文件的二进制内存结构&#xff0c;版本发布时导致一些已创建的项目文件不能正常打开。目前的解决方案是&#xff0c;先将文件导…

基于Python thinker GUI界面的股票评论数据及投资者情绪分析设计与实现

1.绪论 1.1背景介绍 Python 的 Tkinter 库提供了创建用户界面的工具&#xff0c;可以用来构建股票评论数据及投资者情绪分析的图形用户界面&#xff08;GUI&#xff09;。通过该界面&#xff0c;用户可以输入股票评论数据&#xff0c;然后通过情感分析等技术对评论进行情绪分析…

PX4 UM982 配合F9P Base 进行 RTK 定位

UM982是新兴的常见双天线GPS模块&#xff0c;支持双天线定向&#xff0c;RTK功能&#xff0c;PX4也引入了对其的支持&#xff0c;需要按需额外设置 官方手册号称直接用F9P做地面站&#xff0c;搭配QGC使用就能进行RTK定位 但是经过实践&#xff0c;发现这样是进不了RTK模式的…

解读网传《深圳IT圈⭕新解读八小时工作制》

网传深圳IT圈的新解读八小时工作制 工作时间安排&#xff1a; 10:00-12:0014:00-18:0019:00-21:00 初看&#xff1a;有惊喜 上午开始时间晚&#xff1a;相对于传统的9点开始&#xff0c;这种安排允许员工有更多的早晨时间&#xff0c;可以用来休息或处理个人事务。下午和晚上分…