vue+cesium示例:3Dtiles三維模型高度調整(附源碼下載)

接到一位知識星友的邀請,實現他需要3Dtiles三維模型的簡單高度調整需求,適合學習Cesium與前端框架結合開發3D可視化項目。

demo源碼運行環境以及配置

運行環境:依賴Node安裝環境,demo本地Node版本:推薦v18+。

運行工具:vscode或者其他工具。

配置方式:下載demo源碼,vscode打開,然后順序執行以下命令: (1)下載demo環境依賴包命令:npm install
(2)啟動demo命令:npm run dev (3)打包demo命令: npm run build

技術棧

Vue 3.5.13

Vite 6.2.0

Cesium 1.128.0

示例效果
在這里插入圖片描述

核心源碼

<template><div id="cesiumContainer" class="cesium-container"><!-- 模型調整控制面板 --><div class="control-panel"><div class="panel-header"><h3>3D模型調整</h3></div><div class="panel-body"><!-- 高度調整 --><div class="control-group"><label>高度調整:</label><input type="range" min="-100" max="100" step="1" v-model="heightOffset" @input="updateHeight" /><span>{{ heightOffset }}</span></div><!-- 重置按鈕 --><div class="control-group"><button @click="resetModel">重置模型</button></div></div></div></div>
</template>
<script setup>
import { onMounted, onUnmounted, ref } from 'vue';
import * as Cesium from 'cesium';
// 定義模型調整參數
const heightOffset = ref(0);
// 保存原始模型矩陣
let originalModelMatrix = null;
// Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI3ZjQ5ZGUzNC1jNWYwLTQ1ZTMtYmNjYS05YTY4ZTVmN2I2MDkiLCJpZCI6MTE3MTM4LCJpYXQiOjE2NzY0NDUyODB9.ZaNSBIfc1sGLhQd_xqhiSsc0yr8oS0wt1hAo9gbke6M';
// 設置cesium靜態資源路徑
// window.CESIUM_BASE_URL = "/";
// 聲明Cesium Viewer實例
let viewer, tileset = null;
let handler = null;
// 組件掛載后初始化Cesium
onMounted(async () => {// 初始化Cesium Viewerviewer = new Cesium.Viewer('cesiumContainer', {// 基礎配置animation: false, // 動畫小部件baseLayerPicker: false, // 底圖選擇器fullscreenButton: false, // 全屏按鈕vrButton: false, // VR按鈕geocoder: false, // 地理編碼搜索框homeButton: false, // 主頁按鈕infoBox: false, // 信息框 - 禁用點擊彈窗sceneModePicker: false, // 場景模式選擇器selectionIndicator: false, // 選擇指示器timeline: false, // 時間軸navigationHelpButton: false, // 導航幫助按鈕navigationInstructionsInitiallyVisible: false, // 導航說明初始可見性scene3DOnly: false, // 僅3D場景});// 隱藏logoviewer.cesiumWidget.creditContainer.style.display = "none";viewer.scene.globe.enableLighting = true;// 取消天空盒顯示// viewer.scene.skyBox.show = false;// 禁用大氣層和太陽viewer.scene.skyAtmosphere.show = false;// viewer.scene.sun.show = false;// viewer.scene.moon.show = false;// 設置背景為黑色// viewer.scene.backgroundColor = Cesium.Color.BLACK;//前提先把場景上的圖層全部移除或者隱藏 // viewer.scene.globe.baseColor = Cesium.Color.BLACK; //修改地圖藍色背景viewer.scene.globe.baseColor = new Cesium.Color(0.0, 0.1, 0.2, 1.0); //修改地圖為暗藍色背景// 設置抗鋸齒viewer.scene.postProcessStages.fxaa.enabled = true;// 清除默認底圖viewer.imageryLayers.remove(viewer.imageryLayers.get(0));// 加載底圖 - 使用更暗的地圖服務// const imageryProvider = await Cesium.ArcGisMapServerImageryProvider.fromUrl("https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer");const imageryProvider = await Cesium.ArcGisMapServerImageryProvider.fromUrl("https://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Dark_Gray_Base/MapServer");const layer = viewer.imageryLayers.addImageryProvider(imageryProvider);// 調整圖層亮度和對比度,使其更暗layer.brightness = 0.8; // 降低亮度layer.contrast = 1.8; // 調整對比度// 設置默認視圖位置 - 默認顯示全球視圖viewer.camera.setView({destination: Cesium.Cartesian3.fromDegrees(104.0, 30.0, 10000000.0), // 中國中部上空orientation: {heading: 0.0,pitch: -Cesium.Math.PI_OVER_TWO,roll: 0.0}});// 啟用地形深度測試,確保地形正確渲染viewer.scene.globe.depthTestAgainstTerrain = true;// // 清除默認地形// viewer.scene.terrainProvider = new Cesium.EllipsoidTerrainProvider({});const terrainProvider = await Cesium.CesiumTerrainProvider.fromIonAssetId(3956);viewer.terrainProvider = terrainProvider;// 開啟幀率viewer.scene.debugShowFramesPerSecond = true;// 使用異步方式加載3D Tiles數據集try {tileset = await Cesium.Cesium3DTileset.fromUrl("./public/data/tileset.json");// 設置3DTiles的樣式,確保每個要素都有一個唯一的IDtileset.style = new Cesium.Cesium3DTileStyle({// 使用默認樣式,但確保每個要素都可以被單獨選擇color: "color('white')"});// 保存原始模型矩陣,用于重置originalModelMatrix = Cesium.Matrix4.clone(tileset.modelMatrix);// 設置模型貼地// 啟用貼地屬性tileset.clampToGround = true;viewer.scene.primitives.add(tileset);viewer.zoomTo(tileset);} catch (error) {console.error("加載3D Tiles數據集失敗:", error);}
});
// 更新模型高度
const updateHeight = () => {if (!tileset) return;// 創建一個新的矩陣,用于調整高度const heightMatrix = Cesium.Matrix4.fromTranslation(new Cesium.Cartesian3(0, 0, Number(heightOffset.value)));……
};
……
</script>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/84601.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/84601.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/84601.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

詳解3DGS

4 可微分的3D高斯 splatting 核心目標與表示選擇 我們的目標是從無法線的稀疏SfM點出發&#xff0c;優化出一種能夠實現高質量新視角合成的場景表示。為此&#xff0c;我們選擇3D高斯作為基本圖元&#xff0c;它兼具可微分的體表示特性和非結構化的顯式表示優勢&#xff0c;既…

構建版本沒mac上傳APP方法

在蘋果開發者的app store connect上架Ios應用的時候&#xff0c;發現需要使用xode等軟件來上傳iOS的APP。 但是不管是xcode也好&#xff0c;transporter也好&#xff0c;還是命令行工具也好&#xff0c;都必須安裝在mac電腦才能使用&#xff0c;。 假如沒有mac電腦&#xff0…

Gitee PPM:智能化項目管理如何重塑軟件工廠的未來格局

在數字化轉型浪潮席卷全球的當下&#xff0c;軟件開發行業正經歷著前所未有的變革。隨著企業項目復雜度呈指數級增長&#xff0c;傳統項目管理方式已難以應對多項目并行、跨團隊協作等挑戰。Gitee項目組合管理&#xff08;PPM&#xff09;作為新一代智能化項目管理解決方案&…

node入門:安裝和npm使用

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言一、安裝npm命令nvm 前言 因為學習vue接觸的&#xff0c;一直以為node是和vue綁定的&#xff0c;還以為vue跑起來必須要node&#xff0c;后續發現并不是。 看…

單例模式,餓漢式,懶漢式,在java和spring中的體現

目錄 餓漢式單例模式 懶漢式單例模式 Spring中的單例模式 關鍵差異對比 在Java和Spring中的應用場景 手寫案例 單例模式是一種創建型設計模式&#xff0c;其核心在于確保一個類僅有一個實例&#xff0c;并提供一個全局訪問點來獲取該實例。下面將詳細介紹餓漢式和懶漢式…

網絡編程——UDP網絡編程

文章目錄 1、sendto()&#xff0c;recvfrom() 與TCP編程不同的是&#xff1a; 無需建立連接&#xff0c;在recvfrom()阻塞等待客戶端的數據&#xff0c;收到數據后進入do something進行數據的處理。 1、sendto()&#xff0c;recvfrom() ssize_t sendto(int socket, void *mes…

OpenSSL詳解

這里寫目錄標題 選項&#xff1a;**通用選項&#xff1a;**1. genrsa&#xff1a;生成RSA密鑰對3. req&#xff1a;生成證書簽名請求4. x509&#xff1a;生成自簽名證書 **證書管理&#xff1a;**1. verify&#xff1a;驗證證書2. x509&#xff1a;查看證書詳情3. crl&#xff…

MySQL的日志和備份

目錄 一. MySQL的日志 1.1 日志的作用 1.2 日志的分類 1.3 事務日志 1.4 錯誤日志 1.5 通用日志 1.6 慢查詢日志 1.7 二進制備份 二. 備份 2.1 數據備份的重要性 2.2 備份的分類 2.3 MySQL備份的內容 2.4 備份的注意點 2.5 備份的工具 2.6 實戰案例 2.7 mysql…

前端性能優化:如何讓網頁加載更快?

摘要 想象一下&#xff0c;滿心期待點開一個網頁&#xff0c;卻等了十幾秒還卡在加載界面&#xff0c;你是不是瞬間就想關掉走人&#xff1f;這可不是個別用戶的 “急性子”&#xff0c;數據顯示&#xff0c;網頁每多延遲 1 秒&#xff0c;用戶流失率可能增加 11%&#xff01;…

[論文閱讀]Prompt Injection attack against LLM-integrated Applications

Prompt Injection attack against LLM-integrated Applications [2306.05499] Prompt Injection attack against LLM-integrated Applications 傳統提示注入攻擊效果差&#xff0c;主要原因在于&#xff1a; 不同的應用對待用戶的輸入內容不同&#xff0c;有的將其視為問題&a…

微信小程序進階第2篇__事件類型_冒泡_非冒泡

在小程序中&#xff0c; 事件分為兩種類型&#xff1a; 冒泡事件&#xff0c; 當一個組件上的事件被觸發后&#xff0c;該事件會向父節點傳遞非冒泡事件&#xff0c; 當一個組件上的事件被觸發后&#xff0c; 該事件不會向父節點傳遞。 一 冒泡事件 tap&#xff0c; touchst…

[免費]SpringBoot+Vue在線教育(在線學習)系統(高級版)【論文+源碼+SQL腳本】

大家好&#xff0c;我是java1234_小鋒老師&#xff0c;看到一個不錯的SpringBootVue在線教育(在線學習)系統(高級版)【論文源碼SQL腳本】&#xff0c;分享下哈。 項目視頻演示 【免費】SpringBootVue在線教育(在線學習)系統(高級版) Java畢業設計_嗶哩嗶哩_bilibili 項目介紹…

TypeScript 針對 iOS 不支持 JIT 的優化策略總結

# **TypeScript 針對 iOS 不支持 JIT 的優化策略總結** 由于 iOS 的 **JavaScriptCore (JSC)** 引擎 **禁用 JIT&#xff08;Just-In-Time 編譯&#xff09;**&#xff0c;JavaScript 在 iOS 上的執行性能較差&#xff0c;尤其是涉及動態代碼時。 **TypeScript&#xff08;T…

項目部署一次記錄

鏈路&#xff1a;&#xff08;用戶&#xff09;客戶端 → Nginx:192.168.138.100→ Tomcat &#xff08;程序&#xff09;:192.168.138.101→ MySQL/Redis 打開數據庫&#xff1a;systemctl start mysqld 重啟網絡&#xff1a; systemctl restart NetworkManager 關閉防火墻&am…

C 語言學習筆記

文章目錄 程序設計入門 --- C 語言第一周 程序設計與 C 語言1 計算機與編程語言&#xff1a;計算機怎么做事情的&#xff0c;編程語言是什么&#x1f4d2; 1.1 計算機的普遍應用 —— 離了它&#xff0c;現代人可能不會“活”了**&#x1f310; 科學計算&#xff1a;計算機的“…

服務器修改/home的掛載路徑

寫在前面&#xff1a;前段時間新裝了一臺服務器&#xff0c;/home目錄原本是掛在在系統盤/dev/sda4的分區下&#xff0c;但是系統盤的空間比較小&#xff0c;為了保證后續使用起來&#xff0c;不會遇到磁盤很快就占滿的情況&#xff0c;現在需要將 /home 獨立出來&#xff0c;掛…

刷機維修進階教程-----沒有開啟usb調試 如何在鎖定機型的撥號界面特殊手段來開啟ADB

有時候我們會遇到一些機型被屏幕鎖 賬號鎖等鎖定。無法進入系統界面。也沒有開啟usb調試的情況下如何通過一些操作來開啟adb調試。然后通過adb指令來禁用對應的app順利進入系統。以此來操作保數據等操作. 通過博文了解?????? 1??????----了解一些品牌機型鎖定狀態…

虛擬文件(VFS)

核心知識點&#xff1a;虛擬文件系統&#xff08;VFS&#xff09; 1. 通俗易懂的解釋 想象一下你家里的冰箱。你把食物放進去&#xff0c;不用管它是放在塑料盒里、玻璃罐里還是直接用保鮮膜包著&#xff0c;你只需要知道它在冰箱的哪個位置&#xff08;比如“蔬菜抽屜里”&a…

前后端聯調實戰指南:Axios攔截器、CORS與JWT身份驗證全解析

前言 在現代Web開發中&#xff0c;前后端分離架構已成為主流&#xff0c;而前后端聯調則是開發過程中不可避免的關鍵環節。本文將深入探討前后端聯調中的三大核心技術&#xff1a;Axios攔截器的靈活運用、CORS跨域問題的全面解決方案以及JWT身份驗證的安全實現。通過本文&…

Postman基礎操作

1.Postman是什么&#xff1f; Postman是接口測試的工具&#xff0c;簡單來說它能模擬瀏覽器對服務器的某個接口發起請求并接收響應數據。 1.1 Postman工作原理 2.Postman發送請求 2.1 發送GET請求 我們知道GET請求是沒用請求體的&#xff0c;所以我們需要將請求參數寫在Param…