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.pswp.cn/pingmian/76476.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/76476.shtml
英文地址,請注明出處:http://en.pswp.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…