Cesium 快速入門(七)材質詳解

Cesium 快速入門(七)材質詳解

看過的知識不等于學會。唯有用心總結、系統記錄,并通過溫故知新反復實踐,才能真正掌握一二
作為一名摸爬滾打三年的前端開發,開源社區給了我飯碗,我也將所學的知識體系回饋給大家,助你少走彎路!
OpenLayers、Leaflet 快速入門 ,每周保持更新 2 個案例
Cesium 快速入門,每周保持更新 4 個案例

Cesium 快速入門(一)快速搭建項目
Cesium 快速入門(二)底圖更換
Cesium 快速入門(三)Viewer:三維場景的“外殼”
Cesium 快速入門(四)相機控制完全指南
Cesium 快速入門(五)坐標系
Cesium 快速入門(六)實體類型介紹
Cesium 快速入門(七)材質詳解
Cesium 快速入門(八)Primitive(圖元)系統深度解析
Cesium 快速入門(九)Appearance(外觀)系統深度解析
Cesium 快速入門(十) JulianDate(儒略日期)詳解
Cesium 快速入門(十一)3D Tiles 大規模三維地理空間數據
Cesium 快速入門(十二)數據加載詳解
Cesium 快速入門(十三)事件系統

Cesium 材質詳解

在上一章實體的學習中,材質屬性只填充了顏色,這一章將介紹更多的材質屬性。材質一共包括以下幾種

  1. 基礎材質
    • ColorMaterialProperty:顏色,所有支持材質的幾何體(Polygon/Ellipse/Rectangle 等)
    • ImageMaterialProperty:圖片
  2. 幾何圖案材質
    • CheckerboardMaterialProperty:棋盤格
    • StripeMaterialProperty:條紋
    • GridMaterialProperty:網格
  3. 折線專用材質
    • PolylineGlowMaterialProperty:發光材質
    • PolylineOutlineMaterialProperty:輪廓材質
    • PolylineDashMaterialProperty:虛線材質
    • PolylineArrowMaterialProperty:箭頭材質

基礎材質

顏色(ColorMaterialProperty)

純色填充材質,適用于所有支持材質的幾何體,是最基礎也最常用的材質類型。

new Cesium.ColorMaterialProperty(color);
顏色創建方式

Cesium 提供多種顏色創建方法:

方法示例說明
預定義顏色Cesium.Color.RED直接使用內置顏色常量
CSS 顏色字符串Cesium.Color.fromCssColorString("#ff0000")支持所有 CSS 顏色格式
RGBA 值Cesium.Color.fromBytes(255, 0, 0)字節表示法(0-255)
HSLA 值Cesium.Color.fromHsl(0, 1, 0.5, 0.5)色相(0-1)、飽和度(0-1)、亮度(0-1)、透明度(0-1)
隨機顏色Cesium.Color.fromRandom({alpha: 0.5})生成隨機顏色,可指定透明度范圍
基礎實例
<template><div ref="cesiumContainer" class="container"></div>
</template><script setup>
import { ref, onMounted } from "vue";
import * as Cesium from "cesium";
const cesiumContainer = ref(null);
let viewer = null;// 天地圖TOKEN
const token = "05be06461004055923091de7f3e51aa6";onMounted(() => {// 初始化Viewerviewer = new Cesium.Viewer(cesiumContainer.value, {geocoder: false, // 關閉地理編碼搜索homeButton: false, // 關閉主頁按鈕sceneModePicker: false, // 關閉場景模式選擇器baseLayerPicker: false, // 關閉底圖選擇器navigationHelpButton: false, // 關閉導航幫助animation: false, // 關閉動畫控件timeline: false, // 關閉時間軸fullscreenButton: false, // 關閉全屏按鈕baseLayer: false, // 關閉默認地圖});// 清空logoviewer.cesiumWidget.creditContainer.style.display = "none";// 創建半透明紅色材質const redMaterial = new Cesium.ColorMaterialProperty(Cesium.Color.RED.withAlpha(0.5) // 50%透明度);// 應用到多邊形viewer.entities.add({polygon: {hierarchy: Cesium.Cartesian3.fromDegreesArray([116.3975, 39.9075, 116.4075, 39.9075, 116.4075, 39.9175, 116.3975,39.9175,]),material: redMaterial,height: 0,extrudedHeight: 100,},});// 縮放到多邊形viewer.zoomTo(viewer.entities);initMap();
});// 加載天地圖
const initMap = () => {// 以下為天地圖及天地圖標注加載const tiandituProvider = new Cesium.WebMapTileServiceImageryProvider({url:"http://{s}.tianditu.gov.cn/img_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=img&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default&format=tiles&tk=" +token,layer: "img",style: "default",format: "tiles",tileMatrixSetID: "w", // 天地圖使用 Web 墨卡托投影(EPSG:3857),需確保 tileMatrixSetID: "w"subdomains: ["t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7"], // 子域名maximumLevel: 18,credit: new Cesium.Credit("天地圖影像"),});// 添加地理標注const labelProvider = new Cesium.WebMapTileServiceImageryProvider({url:"http://{s}.tianditu.gov.cn/cia_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=cia&tileMatrixSet=w&tileMatrix={TileMatrix}&tileRow={TileRow}&tileCol={TileCol}&style=default&format=tiles&tk=" +token,layer: "img",style: "default",format: "tiles",tileMatrixSetID: "w",subdomains: ["t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7"], // 子域名輪詢maximumLevel: 18,credit: new Cesium.Credit("天地圖影像"),});// 天地圖影像添加到viewer實例的影像圖層集合中viewer.imageryLayers.addImageryProvider(tiandituProvider);// 天地圖地理標注(后添加的會覆蓋前面的)viewer.imageryLayers.addImageryProvider(labelProvider);
};
</script>
<style scoped>
.container {width: 100vw;height: 100vh;
}
</style>

在這里插入圖片描述

顏色操作方法
const baseColor = Cesium.Color.RED;
const modifiedColor = baseColor.withAlpha(0.5) // 設置透明度.brighten(0.2) // 增加亮度.darken(0.1); // 降低亮度

圖片(ImageMaterialProperty)

使用圖片紋理作為材質,支持重復、旋轉和顏色混合,適用于創建具有真實感的表面效果。

new Cesium.ImageMaterialProperty(options);
  • options:
    • image:圖片路徑
    • repeat:紋理重復次數 (x, y),默認 new Cartesian2(1.0, 1.0)
    • color:顏色,默認 Cesium.Color.WHITE
    • transparent:是否透明,默認 false
material: new Cesium.ImageMaterialProperty({image: new URL("../assets/vue.svg", import.meta.url).href, // 圖片路徑repeat: new Cesium.Cartesian2(4, 4), // 平鋪次數// color: Cesium.Color.RED, // 圖片顏色// transparent: true, // 當圖像具有透明度時設置為true
}),

在這里插入圖片描述

幾何圖案材質

棋盤格材質(CheckerboardMaterialProperty)

new Cesium.CheckerboardMaterialProperty(options);
  • options:
    • evenColor:偶數條紋顏色
    • oddColor:奇數條紋顏色
    • repeat:棋盤格重復次數,默認 new Cartesian2(2.0, 2.0)
material: new Cesium.CheckerboardMaterialProperty({evenColor: Cesium.Color.WHITE, // 偶數格顏色oddColor: Cesium.Color.BLACK, // 奇數格顏色repeat: new Cesium.Cartesian2(10, 10), // 交替頻率
}),

在這里插入圖片描述

條紋材質(StripeMaterialProperty)

new Cesium.StripeMaterialProperty(options);
  • options:
    • evenColor:偶數條紋顏色
    • oddColor:奇數條紋顏色
    • repeat:條紋重復次數,默認 1.0
    • orientation:方向 (“HORIZONTAL” 或 “VERTICAL”),默認’HORIZONTAL’
    • offset:偏移量,默認 0
 material: new Cesium.StripeMaterialProperty({evenColor: Cesium.Color.YELLOW,oddColor: Cesium.Color.BLACK,orientation: Cesium.StripeOrientation.HORIZONTAL, // 條紋方向repeat: 20, // 條紋密度
}),

在這里插入圖片描述

網格材質(GridMaterialProperty)

new Cesium.GridMaterialProperty(options);
  • options:
    • color:網格顏色
    • cellAlpha:單元格透明度 (0.0-1.0),默認 0.1
    • lineCount:行列數量 (x, y),默認值:new Cartesian2(8, 8)
    • lineThickness:線寬 (x, y),默認值:new Cartesian2(1.0, 1.0)
    • lineOffset:線偏移 (x, y),默認值:new Cartesian2(0.0, 0.0)
material: new Cesium.GridMaterialProperty({color: Cesium.Color.YELLOW, // 網格線顏色cellAlpha: 0.6, // 單元格透明度lineCount: new Cesium.Cartesian2(5, 5), // 網格密度lineThickness: new Cesium.Cartesian2(3, 3), // 網格線寬度
}),

在這里插入圖片描述

折線專用材質

折線發光材質(PolylineGlowMaterialProperty)

new Cesium.PolylineGlowMaterialProperty(options);
  • options:
    • color:顏色
    • glowPower:發光強度 (0.0-1.0),默認值:0.25
    • taperPower:漸細效果強度 (0.0-1.0),默認值:1.0
<template><div ref="cesiumContainer" class="container"></div>
</template><script setup>
import { ref, onMounted } from "vue";
import * as Cesium from "cesium";
const cesiumContainer = ref(null);
let viewer = null;// 天地圖TOKEN
const token = "05be06461004055923091de7f3e51aa6";onMounted(() => {// 初始化Viewerviewer = new Cesium.Viewer(cesiumContainer.value, {geocoder: false, // 關閉地理編碼搜索homeButton: false, // 關閉主頁按鈕sceneModePicker: false, // 關閉場景模式選擇器baseLayerPicker: false, // 關閉底圖選擇器navigationHelpButton: false, // 關閉導航幫助animation: false, // 關閉動畫控件timeline: false, // 關閉時間軸fullscreenButton: false, // 關閉全屏按鈕baseLayer: false, // 關閉默認地圖});// 清空logoviewer.cesiumWidget.creditContainer.style.display = "none";const polyline = viewer.entities.add({polyline: {positions: Cesium.Cartesian3.fromDegreesArray([116.39, 39.9, 116.41, 39.9, 116.41, 39.92, 116.39, 39.92,]),width: 16,// 發光材質material: new Cesium.PolylineGlowMaterialProperty({color: Cesium.Color.CYAN, // 顏色glowPower: 0.3, // 亮度taperPower: 0.7, // 衰減率}),},});// 定位到線viewer.zoomTo(polyline); // 縮放到實體位置initMap();
});// 加載天地圖
const initMap = () => {// 以下為天地圖及天地圖標注加載const tiandituProvider = new Cesium.WebMapTileServiceImageryProvider({url:"http://{s}.tianditu.gov.cn/img_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=img&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default&format=tiles&tk=" +token,layer: "img",style: "default",format: "tiles",tileMatrixSetID: "w", // 天地圖使用 Web 墨卡托投影(EPSG:3857),需確保 tileMatrixSetID: "w"subdomains: ["t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7"], // 子域名maximumLevel: 18,credit: new Cesium.Credit("天地圖影像"),});// 添加地理標注const labelProvider = new Cesium.WebMapTileServiceImageryProvider({url:"http://{s}.tianditu.gov.cn/cia_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=cia&tileMatrixSet=w&tileMatrix={TileMatrix}&tileRow={TileRow}&tileCol={TileCol}&style=default&format=tiles&tk=" +token,layer: "img",style: "default",format: "tiles",tileMatrixSetID: "w",subdomains: ["t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7"], // 子域名輪詢maximumLevel: 18,credit: new Cesium.Credit("天地圖影像"),});// 天地圖影像添加到viewer實例的影像圖層集合中viewer.imageryLayers.addImageryProvider(tiandituProvider);// 天地圖地理標注(后添加的會覆蓋前面的)viewer.imageryLayers.addImageryProvider(labelProvider);
};
</script>
<style scoped>
.container {width: 100vw;height: 100vh;
}
</style>

在這里插入圖片描述

折線輪廓材質(PolylineOutlineMaterialProperty)

new Cesium.PolylineOutlineMaterialProperty(options);
  • options:
    • color:顏色
    • outlineColor:輪廓顏色,默認 Color.BLACK
    • outlineWidth:輪廓寬度(像素),默認 1.0
material: new Cesium.PolylineOutlineMaterialProperty({color: Cesium.Color.RED, // 顏色outlineColor: Cesium.Color.YELLOW, // 輪廓顏色outlineWidth: 5, // 輪廓寬度
});

在這里插入圖片描述

折線虛線材質(PolylineDashMaterialProperty)

new Cesium.PolylineDashMaterialProperty(options);
  • options:
    • color:顏色
    • gapColor:間隙顏色,默認 Color.TRANSPARENT
    • dashLength:虛線長度(像素),默認 16.0
    • dashPattern:虛線模式 (16 位二進制),默認 255 (11111111)
material: new Cesium.PolylineDashMaterialProperty({color: Cesium.Color.BLUE,// gapColor: Cesium.Color.WHITE,dashLength: 24,// dashPattern: parseInt("11110000", 2), // 長虛線
}),

在這里插入圖片描述

折線箭頭材質(PolylineArrowMaterialProperty)

new Cesium.PolylineArrowMaterialProperty(color);
material: new Cesium.PolylineArrowMaterialProperty(Cesium.Color.YELLOW),

在這里插入圖片描述

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

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

相關文章

C++:結構體(Structure)

目錄 第一性原理出發&#xff1a;我們要解決什么問題&#xff1f; 定義結構體&#xff08;Defining Structures&#xff09; 問題&#xff1a;名字太長怎么辦&#xff1f; 如何定義結構體變量&#xff1f; 結構體的大小&#xff08;Size of Structures&#xff09; 初始化…

化學結構式解讀指南:從基礎認知到InDraw智能識別

中文名稱&#xff1a;3-[2-(二甲基氨基)乙基]-1H-吲哚英文名稱&#xff1a;3-[2-(dimethylamino)ethyl]-1H-indole分子式: C12H16N2分子量: 188.2740這是什么結構式&#xff1f;怎么繪制呢&#xff1f;可以用InDraw里的AI圖像識別這個結構式&#xff0c;也可以手動繪圖&#xf…

如何使用一臺電腦adb調試多個Android設備

目錄 一、臨時斷開其中一個設備連接 二、指定調試設備 總結 當我們使用Android調試工具調試多個設備&#xff0c;例如一開始使用adb連接了一臺Android真機進行調試&#xff0c;此時又在Android studio中打開了一個模擬機&#xff0c;此時我們在adb命令窗口中使用adb命令的…

ChatGPT的下一站:從“答案引擎”到“思維教練”

摘要&#xff1a;我們正處在一個“萬物皆可ChatGPT”的時代&#xff0c;但當它淪為最高效的“代碼搬運工”和“作業速成器”時&#xff0c;我們得到的究竟是效率的提升還是思維的退化&#xff1f;本文深入探討一個引人深思的概念——“導師模式”的AI。它不再直接提供答案&…

SpringBoot集成Flyway

SpringBoot集成Flyway_springboot flyway-CSDN博客 Flyway 本質上是一個開源的數據庫遷移工具&#xff0c;它能夠以自動化、可重復且可靠的方式管理數據庫的變更。無論是小型項目還是大型企業級應用&#xff0c;Flyway 都能助力開發者輕松應對數據庫架構的演進。它支持多種數據…

【實時Linux實戰系列】實時圖像處理應用開發

在當今快速發展的技術領域&#xff0c;實時圖像處理應用在眾多領域發揮著至關重要的作用。從自動駕駛汽車、工業自動化檢測到醫療影像診斷&#xff0c;實時圖像處理技術的應用場景無處不在。通過在實時Linux系統中開發圖像處理應用&#xff0c;開發者能夠充分利用Linux的穩定性…

Caterpillar Fungus Optimizer, CFO

核心算法解析1. 算法框架與初始化class EnhancedCFO: def __init__(self, objective_func, dim10, pop_size30, max_iter200, lb-10, ub10):??改進點??&#xff1a;針對傳統優化算法后期易停滯的問題&#xff0c;結合了精英策略、多樣性控制和自適應參數??關鍵特性??&a…

c++設計模式編程練習

一、運用觀察者模式原理編寫鳥類模型運行結果&#xff1a;二、運用簡單工廠模式編寫打怪掉裝備模型運行結果

FastMCP本地構建Server和Clinet交互

1. MCP Server介紹 MCP Server 是實現模型上下文協議&#xff08;MCP&#xff09;的服務器&#xff0c;旨在為 AI 模型提供一個標準化接口&#xff0c;連接外部數據源和工具&#xff0c;例如文件系統、數據庫或 API。 相比之下&#xff0c;在MCP出現前&#xff0c;AI調用工具…

工業企業與清潔生產匹配數據庫(1998-2015年)

1484工業企業與清潔生產匹配數據庫&#xff08;1998-2015年&#xff09;“清潔生產”近年發文趨勢及主題分布數據來源中華人民共和國生態環境部以及中國工業企業數據庫&#xff0c;由數據皮皮俠團隊整理時間跨度1998-2015年數據范圍各工業企業數據指標參考文獻孫博文,鄭世林.環…

第13屆藍橋杯C++青少組中/高級組選拔賽2022年1月22日真題

第13屆藍橋杯C青少組中/高級組選拔賽2022年1月22日真題 更多內容請查看網站&#xff1a;【試卷中心 -----> 藍橋杯----> C ----> 選拔賽】 網站鏈接 青少年軟件編程歷年真題模擬題實時更新 編程題 第 1 題 比大小 題目描述&#xff1a; 給出兩個不同的整數&#…

從0到1學PHP(七):PHP 與 HTML 表單:實現數據交互

目錄一、表單的創建與提交方式1.1 HTML 表單的基本結構1.2 GET 和 POST 提交方式的區別及適用場景二、表單數據的接收與處理2.1 使用\$_GET、\$_POST 超全局變量獲取表單數據2.2 對接收的數據進行驗證三、表單安全處理3.1 防止 XSS 攻擊的方法3.2 防止 CSRF 攻擊的措施一、表單…

Docker compose和Docker-compose的區別

Docker Compose 的兩個命令形式 docker compose&#xff08;空格連接&#xff09;與 docker-compose&#xff08;短橫線連接&#xff09;核心區別如下&#xff1a;一、技術本質docker-compose&#xff08;短橫線&#xff09;獨立可執行文件&#xff1a;早期實現方式&#xff0c…

自定心深凹槽參數檢測裝置及檢測方法 - 激光頻率梳 3D 輪廓檢測

一、引言在機械零件深凹槽檢測中&#xff0c;傳統方法常因定心不準導致檢測誤差。如平臺推表檢測時零件基準面與測量平臺難以精準對齊&#xff0c;三坐標測量需人工找正&#xff0c;效率低且誤差大。激光頻率梳 3D 輪廓檢測雖精度高&#xff0c;但缺乏自定心機制會影響深凹槽軸…

C語言---結構體(格式、用法、嵌套、初始化)、共用體、枚舉類型、typedef類型

目錄 結構體與共用體 1、結構體(struct) (1) 格式與用法 (2) 結構體允許嵌套 (3) 結構體成員初始化 (4) 指針替換變量 (5) 求結構體在內存空間所占字節 2、共用體(union) (1) 格式與概念 (2) 應用 3、枚舉類型(enum) (1) 格式與概念 (2) 應用 4、typedef 類型 結構體與共用…

輻射源定位方法簡述

文章目錄 前言 一、按照信息建模分類 1.1.時間參數 1.1.1.到達時間&#xff08;TOA, Time of Arrival&#xff09;定位 1.1.2.到達時間差&#xff08;TDOA, Time Difference of Arrival&#xff09;定位 1.2.角度參數 1.2.1.到達角度&#xff08;AOA, Angle of Arrival&a…

CamX-設置SceneMode:CONTROL_SCENE_MODE_FACE_PRIORITY不生效問題解決

應用設置CONTROL_SCENE_MODE_FACE_PRIORITY設置不生效 問題&#xff1a;app 代碼 CaptureRequest.Builder captureRequestBuilder mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);builder.set(CaptureRequest.CONTROL_SCENE_MODE, CameraMetadata.CONTRO…

MFC CChartCtrl編程

重點&#xff1a;創建CChartCtrl控件有2種方式1、直接創建CChartCtrl2、窗體上添加Custom Control&#xff08;切記一定不能是Static Text或者Picture Control&#xff0c;否則無法響應鼠標消息&#xff09;&#xff0c;然后根據ID關聯CChartCtrl控件&#xff0c;初始化代碼如下…

從0到1了解熱部署

熱部署&#xff08;Hot Deployment&#xff09;是軟件開發中一種提高開發效率的技術&#xff0c;指的是在應用程序不停止運行的情況下&#xff0c;動態更新代碼、配置或資源&#xff08;如頁面、圖片等&#xff09;&#xff0c;并讓這些修改立即生效的過程。熱部署主要用于開發…

[12月考試] E

[12月考試] E 題目描述 給定 nnn 個正整數 a1,a2,…,ana_1,a_2,\ldots,a_na1?,a2?,…,an?&#xff0c;小 E 可以進行若干次交換&#xff0c;每一次可以交換兩個相鄰的整數。 求小 E 至少要交換多少次&#xff0c;才可以讓 a1a_1a1? 是 nnn 個數里的最小值&#xff0c;ana_n…