Cesium.js(6):Cesium相机系统

Camera表示观察场景的视角。通过操作摄像机,可以控制视图的位置、方向和角度。

帮助文档:Camera - Cesium Documentation

1 setView

setView 方法允许你指定相机的目标位置和姿态。你可以通过 Cartesian3 对象来指定目标位置,并通过 orientation 对象来设置相机的航向、俯仰和翻滚角。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>相机</title><script src="../../libs/Cesium/Cesium.js"></script><link href="../../libs/Cesium/Widgets/widgets.css" rel="stylesheet"><style>html,body {margin: 0px;padding: 0px;}</style>
</head>
<body><div id="puiedu-cesiumContainer"></div><script>Cesium.Ion.defaultAccessToken = '你的key';const viewer = new Cesium.Viewer('puiedu-cesiumContainer');const position = Cesium.Cartesian3.fromDegrees(116.39,39.91,400);viewer.camera.setView({destination:position,orientation:{heading:Cesium.Math.toRadians(0),pitch:Cesium.Math.toRadians(-90),roll:0}})</script>
</body>
</html>

destination:接受两种类型,一个是Cartesian3,我们这里用鼠标点击获取到经纬度之后,转换成笛卡尔坐标系传递。另一个类型是Rectangle,这个我们在下边讲解。

orientation(欧拉角):调整相机视角方向的;它有3个参数:heading、pitch、roll

  • heading 值为 0 时,指向正北方,随着数值变大,顺时针旋转(模型左右摆动),航向角,代表飞机的航向。
  • pitch 值为 0 时,相机前后保持水平,改变数值(模型上下摆动),负值时俯视,负得越大,越向下俯视,正值时仰视,正得越大,越向上仰视,这就是为什么用-180°-180°的角度范围,而不是0°-360°,很方便记忆和理解,俯仰角,俯(向下)为负,仰(向上)为正。
  • roll 值为 0 时,相机左右保持水平,改变数值(模型左右摆动),roll和pitch的表现类似,只是将前后变成了左右,左为负,右为正,用-180°-180°也很方便记忆和理解。

duration:飞行时间,单位秒;

您可以修改控件上的值,然后看每个值被修改后,相机是如何变化的,您会得出以下结论。

效果如下:

2 flyTo

flyTo 方法会让相机以动画的方式飞到指定的位置,你可以设置飞行时间和其他动画参数。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>相机</title><script src="../../libs/Cesium/Cesium.js"></script><link href="../../libs/Cesium/Widgets/widgets.css" rel="stylesheet"><style>html,body {margin: 0px;padding: 0px;}</style>
</head>
<body><div id="puiedu-cesiumContainer"></div><script>Cesium.Ion.defaultAccessToken = '你的key';const viewer = new Cesium.Viewer('puiedu-cesiumContainer');const position = Cesium.Cartesian3.fromDegrees(116.39,39.91,400);viewer.camera.flyTo({destination:position,orientation: {heading: Cesium.Math.toRadians(0),pitch: Cesium.Math.toRadians(-90),roll: 0},duration:5,})</script>
</body>
</html>

这里的参数和setView中的一致,这里就不讲解了。

效果如下:

启动后,会发现相机通过飞行的方式到底制定位置。

3 lookAt

lookAt 方法允许相机以某个位置为中心来确定位置和姿态。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>相机</title><script src="../../libs/Cesium/Cesium.js"></script><link href="../../libs/Cesium/Widgets/widgets.css" rel="stylesheet"><style>html,body {margin: 0px;padding: 0px;}</style>
</head>
<body><div id="puiedu-cesiumContainer"></div><script>Cesium.Ion.defaultAccessToken = '你的key';const viewer = new Cesium.Viewer('puiedu-cesiumContainer');const center = Cesium.Cartesian3.fromDegrees(116.39,39.91);const heading = Cesium.Math.toRadians(50);const pitch = Cesium.Math.toRadians(-90);const range = 2500;viewer.camera.lookAt(center, new Cesium.HeadingPitchRange(heading,pitch,range));</script>
</body>
</html>

效果如下:

4 viewBoundingSphere

它的视角切换效果也是和setView方法一样,没有飞行过渡效果,直接切换视口到指定目的地。优点是可以指定玩目标点后,可以从多个角度更好的观测。

代码如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>相机</title><script src="../../libs/Cesium/Cesium.js"></script><link href="../../libs/Cesium/Widgets/widgets.css" rel="stylesheet"><style>html,body {margin: 0px;padding: 0px;}</style>
</head>
<body><div id="puiedu-cesiumContainer"></div><script>Cesium.Ion.defaultAccessToken = '你的key';const viewer = new Cesium.Viewer('puiedu-cesiumContainer');const position = Cesium.Cartesian3.fromDegrees(116.39,39.91,1500);var orientation = Cesium.Transforms.headingPitchRollQuaternion(position, new Cesium.HeadingPitchRoll(-90,0,0));var entity = viewer.entities.add({position:position,orientation:orientation,model:{uri:"../../libs/models/Cesium_Air.glb",minimumPixelSize:100,maximumScale:10000,show:true}});viewer.camera.viewBoundingSphere(new Cesium.BoundingSphere(position,20),new Cesium.HeadingPitchRange(0,0,0));</script>
</body>
</html>

效果如下:

无论如何移动相机的视角都是绑定在飞机模型上的,由此发现,当我们需要对一个物体进行多角度观测时,或者建筑物进行定点漫游时,我们就需要viewBoundingSphere方法。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python技术生态全景:十大核心应用领域深度解析】

目录 前言&#xff1a;Python的统治力一、基础应用领域1. Web开发数据科学 二、前沿技术领域机器学习深度学习 三、行业解决方案量化金融生物信息 四、创新应用方向物联网开发区块链开发 五、效率工具生态自动化运维游戏开发 结语&#xff1a;Python的边界与突破技术局限未来演…

leetcode 2787. Ways to Express an Integer as Sum of Powers

题目描述 这道题是0-1背包问题。可以理解为&#xff0c;有一个最大容量是n的背包&#xff0c;有n个物品&#xff0c;第i个物品的重量是i^x&#xff0c;问装满背包有多少种装法。题目要求必须是互不相同的数的x次幂的和等于n&#xff0c;那就表示每个数只能用一次&#xff0c;也…

面试经验分享 | 成都渗透测试工程师二面面经分享

可以看看我的置顶文章和专栏找我哦 概况 面试过程 面试官的问题 问题1、你觉得当前OAuth2.0下的攻击手段有哪些&#xff1f;结合具体案例详细讲讲 问题2、php/java反序列化漏洞的原理?程序员/运维如何避免此类漏洞或如何防御? 问题3、如果一台服务器被入侵后,你会如何做应急…

模仿axios的封装效果来封装fetch,实现baseurl超时等

因为要在cocos游戏项目里面发送网络请求获取数据&#xff0c;并且还有可能用到websocket发送请求&#xff0c;所以这里封装一个fetch放便使用&#xff1a; // fetch封装// 基础配置 const BASE_URL 你的url const TIMEOUT 5000// 请求封装 const http async (url: string, …

小米运维面试题及参考答案(80道面试题)

请讲解一下 linux top 后进程的状态 在 Linux 系统中,使用top命令可以查看系统中正在运行的进程的相关信息,进程通常有以下几种状态: 运行(R):表示进程正在 CPU 上运行或者正在运行队列中等待运行。处于运行状态的进程正在积极地使用 CPU 资源来执行其任务。睡眠(S):进…

a sort.py demo

这份代码展示了如何使用 sort.py。注意&#xff0c;此处&#xff0c;我将文件名改为 my_sort.py。 你并不能直接 copy 使用&#xff0c;因为环境&#xff0c;包&#xff0c;还有模型。 此处使用 SSD-MobileNetv2 进行物体检测&#xff0c;将结果传入以 np 数组的形式传入sort…

使用Redis解决:集群的Session共享问题

使用Redis解决&#xff1a;集群的Session共享问题 session共享问题&#xff1a;多台Tomcat并不共享session存储空间&#xff0c;当请求切换到不同的tomcat服务时导致数据丢失的问题。 问题背景 ​无状态HTTP协议&#xff1a;HTTP协议本身是无状态的&#xff0c;服务器无法直接识…

Linux 内核知识体系[1]

1 Linux内核知识体系 2.Linux内核学习路线 2.1基础知识准备 操作系统基础&#xff1a;了解操作系统的概念和基本原理&#xff0c;包括进程管理、内存管理、文件系统、输入输出等。 书籍&#xff1a;《操作系统&#xff1a;设计与实现》&#xff08;Andrew S. Tanenbaum&…

KiActivateWaiterQueue函数和Queue->Header.WaitListHead队列等待列表的关系

第一部分&#xff1a; if (Thread->ApcState.KernelApcPending && (Thread->SpecialApcDisable 0) && (Thread->WaitIrql < APC_LEVEL)) { } else { // // Insert wait block in ob…

让DeepSeek API支持联网搜索

引子 DeepSeek官网注册的API token是不支持联网搜索的&#xff0c;这导致它无法辅助分析一些最新的情况或是帮忙查一下互联网上的资料。本文从实战角度提供一种稳定可靠的方法使得DeepSeek R1支持联网搜索分析。 正文 首先登录火山方舟控制台&#xff0c;https://www.volcen…

生物信息Rust-01

前言-为什么想学Rust&#xff1f; 一直想多学一门编译语言&#xff0c;主要有几个原因吧&#xff08;1. 看到一位老师实验室要求需要掌握一门编译语言&#xff1b;2. 自己享想试着开发一些实用的生信工具&#xff0c;感觉自己现在相比于数据分析&#xff0c;探索生物学层面的意…

字符串与相应函数(上)

字符串处理函数分类 求字符串长度&#xff1a;strlen长度不受限制的字符串函数&#xff1a;strcpy,strcat,strcmp长度受限制的字符串函数:strncpy,strncat,strncmp字符串查找&#xff1a;strstr,strtok错误信息报告&#xff1a;strerror字符操作&#xff0c;内存操作函数&…

asm汇编源代码之文件操作相关

提供7个子程序:   1. 关闭文件 FCLOSE   2. 打开文件 FOPEN   3. 文件大小 FSIZE   4. 读文件 FREAD   5. 写文件 FWRITE   6. 建立文件 FCREATE   7. 读取或设置文件指针 FPOS 具体功能及参数描述如下 ; ---------------------------- FCLOSE PROC  FAR ; IN…

[Dify] 使用 Docker 本地部署 Dify 并集成 Ollama 模型的详细指南

在 AI 应用快速发展的今天&#xff0c;开源项目如 Dify 正成为构建本地化 AI 应用的利器。通过 Dify&#xff0c;你可以轻松地集成不同的大语言模型&#xff08;LLM&#xff09;&#xff0c;如 Ollama&#xff0c;并快速创建可交互的 AI 应用。本篇文章将带你一步步通过 Docker…

Spring Boot 测试详解,包含maven引入依赖、测试业务层类、REST风格测试和Mock测试

Spring Boot 测试详解 1. 测试依赖引入 Spring Boot 默认通过以下 Maven 依赖引入测试工具&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</s…

DevOps与功能安全:Perforce ALM通过ISO 26262合规认证,简化安全关键系统开发流程

本文来源perforce.com&#xff0c;由Perforce中国授权合作伙伴、DevSecOps解决方案提供商-龙智翻译整理。 近日&#xff0c;Perforce ALM&#xff08;原Helix ALM&#xff09;通过了国际权威认证机构 TV SD的ISO 26262功能安全流程认证&#xff01;该认证涵盖Perforce ALM解决方…

Android11车载WiFi热点默认名称及密码配置

一、背景 基于车厂信息安全要求,车载热点默认名称不能使用统一的名称,以及默认密码不能为简单的1~9。 基于旧项目经验,组装工厂自动化测试及客户整车组装的时候均存在多台设备同时打开,亦不太推荐使用统一的热点名称,连接无法区分。 二、需求 根据客户的要求,默认名称…

MacOs java环境配置+maven环境配置踩坑实录

oracl官网下载jdk 1.8的安装包 注意可能需要注册&#xff01;&#xff01;&#xff01; 下载链接&#xff1a;下载地址点击 注意晚上就不要下载了 报错400 &#xff01;&#xff01;&#xff01; 1.点击安装嘛 2.配置环境变量 export JAVA_HOME/Library/Java/Java…

如何解读 /proc/net/netstat

在刷了屏的川普&#xff0c;关税&#xff0c;AI 大模型和 RDMA 之外的一股清流&#xff0c;来点实用的。 众所周知 /proc/net/netstat 很难读&#xff0c;且 netstat 并不是每个系统上都支持 -s&#xff0c;那么对齐该文件给出一个可读的输出就是一件高尚的事。可以用 column …

汉化进度100%

P3834 #include<bits/stdc.h> #define int long long #define 定义整型变量 int #define 这是一个常量 const #define 无返回值函数 void #define 这是一个循环条件在后面 for #define 定义结构体 struct #define 如果 if #define 否则 else #define 定义无返回值的 sig…