Cesium--获取当前相机中心与地面的射线焦点
创始人
2025-01-09 12:36:26
0

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

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

//调整相机到正北方向 上帝视角 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); 	} }

 

相关内容

热门资讯

今日焦点!长乐互娱有外挂(辅助... 今日焦点!长乐互娱有外挂(辅助挂)真是是有挂(竟然有挂)-哔哩哔哩;1、点击下载安装,长乐互娱有外挂...
今日百科(Wepoke助手)外... 今日百科(Wepoke助手)外挂透明挂辅助黑科技(推扑克)是有辅助(往昔存在有挂)-哔哩哔哩是一款可...
黑科技辅助(德州之星辅助器)外... 黑科技辅助(德州之星辅助器)外挂透明挂辅助软件(透视)一向是有挂(2022已更新)(哔哩哔哩);是一...
揭秘真相(WePoKe效果)竟... 揭秘真相(WePoKe效果)竟然真的是有挂(透视)起初真的是有挂(有人有挂)-哔哩哔哩是一款可以让一...
重大通报!科乐棋牌斗地主有挂(... 重大通报!科乐棋牌斗地主有挂(辅助挂)原来有挂(有挂头条)-哔哩哔哩;重大通报!科乐棋牌斗地主有挂(...
我来教教大家(悟空黑桃a扑克牌... 我来教教大家(悟空黑桃a扑克牌)外挂透明挂辅助工具(云扑克cloudpoker)软件透明功能实现方法...
黑科技辅助(WPK最新)外挂透... 黑科技辅助(WPK最新)外挂透明挂辅助黑科技(透视)竟然有挂(2021已更新)(哔哩哔哩),WPK最...
让我来分享经验(德扑之星辅助挂... 让我来分享经验(德扑之星辅助挂)从来真的是有挂(透视)一直有挂(有挂技巧)-哔哩哔哩;德扑之星辅助挂...
我来教大家!旺旺福建跑得快里面... 您好:旺旺福建跑得快里面有猫腻这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多...
一分钟了解(微扑克透明挂)外挂... 一分钟了解(微扑克透明挂)外挂透明挂辅助挂(wePokE)辅助挂(最初真的是有挂)-哔哩哔哩;人气非...