当前位置: 首页 > news >正文

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);}
}

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 处理线程安全的列表CopyOnWriteArrayList 和Collections.synchronizedList
  • Java中的输入输出
  • [misc]-流量包-wireshark-icmp
  • wifi信号处理的CRC8、CRC32
  • 【学习笔记】无人机(UAV)在3GPP系统中的增强支持(十三)-更换无人机控制器
  • uniapp引入 uview( HBuilder 和 npm 两种安装方式) #按需引入
  • Leetcode3202. 找出有效子序列的最大长度 II
  • 【高中数学/幂函数】比较a=2^0.3,b=3^0.2,c=7^0.1的大小
  • 【面试题】Golang 之Channel底层原理 (第三篇)
  • 前端Vue组件化实践:自定义加载组件的探索与应用
  • Python面试题:如何在 Python 中处理大数据集?
  • GO channel 学习
  • 杜比全景声——空间音频技术
  • 36.UART(通用异步收发传输器)-RS232(3)
  • 游戏视频是后期配音好还是边录边配 游戏视频怎么剪辑制作才能火 视频剪辑免费软件
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • docker容器内的网络抓包
  • Fabric架构演变之路
  • JavaScript设计模式系列一:工厂模式
  • Java基本数据类型之Number
  • jquery ajax学习笔记
  • jquery cookie
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • vue自定义指令实现v-tap插件
  • Vue组件定义
  • 创建一种深思熟虑的文化
  • 从setTimeout-setInterval看JS线程
  • 关于字符编码你应该知道的事情
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 前端面试总结(at, md)
  • 算法系列——算法入门之递归分而治之思想的实现
  • 怎么将电脑中的声音录制成WAV格式
  • 阿里云API、SDK和CLI应用实践方案
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • # SpringBoot 如何让指定的Bean先加载
  • ## 基础知识
  • #AngularJS#$sce.trustAsResourceUrl
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • $L^p$ 调和函数恒为零
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (回溯) LeetCode 77. 组合
  • (四)React组件、useState、组件样式
  • (五)Python 垃圾回收机制
  • (详细文档!)javaswing图书管理系统+mysql数据库
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (轉)JSON.stringify 语法实例讲解
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .Net Core 生成管理员权限的应用程序
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET MAUI Sqlite程序应用-数据库配置(一)