Cesium圓錐漸變色實現:融合頂點著色器、Canvas動態貼圖與靜態紋理的多方案整合

?????在Cesium中渲染圓錐體時,無論采用頂點著色器Canvas動態貼圖還是靜態圖片貼圖,其漸變色均需滿足以下條件:

  1. 圓形結構:漸變范圍限定在圓錐底面的圓形區域內。
  2. 徑向擴散:顏色從圓心向外逐步變化(如紅→黃→藍)。
  3. 一致性:三種方案均基于“圓形中心→邊緣”的漸變邏輯。

方案一:頂點著色器動態計算(實時性最高)

特點:通過GLSL代碼直接計算圓心到邊緣的距離,實現純圓形漸變

// 創建圓錐幾何體(底面為圓形)
const coneGeometry = Cesium.CylinderGeometry.createGeometry(new Cesium.CylinderGeometry({length: 200000,topRadius: 0,bottomRadius: 100000, // 底面半徑vertexFormat: Cesium.PerInstanceColorAppearance.VERTEX_FORMAT,})
);// 自定義著色器:基于UV距離計算圓形漸變
const material = new Cesium.Material({fabric: {type: 'RadialGradientCone',source: `czm_material czm_getMaterial(czm_materialInput materialInput) {czm_material material = czm_getDefaultMaterial(materialInput);// 計算當前像素到圓心的距離(UV坐標系中)vec2 st = materialInput.st;vec2 center = vec2(0.5, 0.5); // 圓心位置float distance = length(st - center); // 徑向距離// 歸一化到 [0,1],確保漸變從中心向外擴展float normalizedDistance = clamp(distance / 0.5, 0.0, 1.0);// 圓形漸變邏輯(紅→黃→藍)if (normalizedDistance < 0.33) {material.diffuse = vec3(1.0, 0.0, 0.0); // 紅色} else if (normalizedDistance < 0.66) {material.diffuse = vec3(1.0, 1.0, 0.0); // 黃色} else {material.diffuse = vec3(0.0, 0.0, 1.0); // 藍色}// 透明度隨距離增加而降低material.alpha = 1.0 - normalizedDistance * 0.5;return material;}`,uniforms: {},},
});// 應用到Primitive
const geometryInstance = new Cesium.GeometryInstance({ geometry: coneGeometry });
const primitive = new Cesium.Primitive({geometryInstances: geometryInstance,appearance: new Cesium.MaterialAppearance({material: material,closed: true,}),
});
viewer.scene.primitives.add(primitive);

關鍵點

  • length(st - center):確保漸變方向從圓心向外。
  • clamp(distance / 0.5, 0.0, 1.0):限制漸變范圍在圓形區域內。
  • 實時性:適合動態屬性(如風速、溫度)驅動的漸變。

方案二:Canvas動態生成徑向漸變貼圖(靈活性高)

特點:通過Canvas繪制徑向漸變圓形紋理,貼合圓錐底面。

// 1. 創建Canvas并繪制圓形徑向漸變
const canvas = document.createElement('canvas');
canvas.width = 256;
canvas.height = 256;
const ctx = canvas.getContext('2d');// 定義徑向漸變(圓心→邊緣)
const gradient = ctx.createRadialGradient(128, 128, 0, 128, 128, 128);
gradient.addColorStop(0, 'red');
gradient.addColorStop(0.5, 'yellow');
gradient.addColorStop(1, 'blue');
ctx.fillStyle = gradient;
ctx.fillRect(0, 0, 256, 256);// 2. 將Canvas轉換為ImageResource
const imageResource = new Cesium.ImageResource({source: canvas,
});// 3. 創建貼圖材質(圓形漸變)
const imageMaterial = new Cesium.Material({fabric: {type: 'ImageRadialGradient',source: `czm_material czm_getMaterial(czm_materialInput materialInput) {czm_material material = czm_getDefaultMaterial(materialInput);vec2 st = materialInput.st;vec4 color = texture(imageMap, st);material.diffuse = color.rgb;material.alpha = color.a;return material;}`,uniforms: {imageMap: imageResource,},},
});// 應用到Primitive
const geometryInstance = new Cesium.GeometryInstance({ geometry: coneGeometry });
const primitive = new Cesium.Primitive({geometryInstances: geometryInstance,appearance: new Cesium.MaterialAppearance({material: imageMaterial,closed: true,}),
});
viewer.scene.primitives.add(primitive);

關鍵點

  • createRadialGradient:Canvas API原生支持徑向漸變。
  • 貼圖適配:需確保圓錐底面UV映射為正方形區域(避免拉伸)。
  • 靈活性:可動態調整Canvas漸變參數(如顏色分段)。

方案三:靜態圖片貼圖(性能最優)

特點:預加載圓形漸變圖片,適合固定漸變邏輯。

// 1. 準備靜態圓形漸變圖片(如 gradient.png)
const imageMaterial = new Cesium.Material({fabric: {type: 'StaticRadialGradient',source: `czm_material czm_getMaterial(czm_materialInput materialInput) {czm_material material = czm_getDefaultMaterial(materialInput);vec2 st = materialInput.st;vec4 color = texture(staticMap, st);material.diffuse = color.rgb;material.alpha = color.a;return material;}`,uniforms: {staticMap: 'path/to/gradient.png', // 需預先繪制圓形漸變},},
});// 應用到Primitive
const geometryInstance = new Cesium.GeometryInstance({ geometry: coneGeometry });
const primitive = new Cesium.Primitive({geometryInstances: geometryInstance,appearance: new Cesium.MaterialAppearance({material: imageMaterial,closed: true,}),
});
viewer.scene.primitives.add(primitive);

關鍵點

  • 圖片設計:需手動繪制或生成圓形徑向漸變(如Photoshop或程序生成)。
  • 性能優勢:無需運行時計算,適合大規模渲染。

三種方案對比與選擇建議
方案漸變類型實時性靈活性性能適用場景
頂點著色器? 圓形徑向? 高? 高? 高動態屬性驅動、實時變化
Canvas動態貼圖? 圓形徑向? 中? 高? 中復雜漸變、交互式調整
靜態圖片貼圖? 圓形徑向? 低? 低? 高固定漸變、大規模渲染

總結

三種方案均通過圓形結構+徑向擴散實現漸變色,區別在于:

  • 頂點著色器:實時計算,適合動態數據。
  • Canvas貼圖:靈活定制,適合復雜漸變。
  • 靜態貼圖:性能最佳,適合固定邏輯。

最終選擇建議

  • 需要實時響應屬性變化?→ 使用頂點著色器。
  • 需要復雜漸變設計?→ 使用Canvas動態生成貼圖。
  • 需要極致性能?→ 使用靜態圖片貼圖。

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

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

相關文章

周末復習1

質量管理包括質量規劃&#xff0c;質量保證&#xff0c;質量控制。質量管理體系要定期執行內部審核和管理評審。二者都屬于質量保證過程。 實施質量保證的方法很多&#xff0c;過程分析屬于實施質量保證的常用方法。 采購管理過程包括編制采購計劃,實施采購,控制采購和結束采購…

英飛凌亮相SEMICON China 2025:以SiC、GaN技術引領低碳化與數字化未來

在剛剛落幕的SEMICON China 2025上&#xff0c;全球半導體行業再度匯聚上海&#xff0c;共同探討產業未來。本屆展會以“跨界全球?心芯相聯”為主題&#xff0c;覆蓋芯片設計、制造、封測、設備及材料等全產業鏈&#xff0c;充分展現了半導體技術的最新突破與創新趨勢。 作為…

工業路由器賦能倉庫消防預警,智慧消防物聯網解決方案

在現代物流與倉儲行業蓬勃發展的當下&#xff0c;倉庫的規模與存儲密度不斷攀升&#xff0c;消防預警的重要性愈發凸顯。傳統消防系統在應對復雜倉庫環境時&#xff0c;預警滯后、設備聯動不暢、數據管理困難等弊端逐漸暴露。為了有效解決這些問題&#xff0c;工業路由器作為物…

【開發常用命令】:服務器與本地之間的數據傳輸

服務器與本地之間的數據傳輸 本地給服務器上傳數據 scp /path/to/local_file usernameremotehost:/path/to/remote_directory例如 scp test.txt root192.168.1.xxx:/test # test.txt 需要上傳到服務器的文件&#xff0c;如果非當前路徑&#xff0c;使用文件的相對路徑或絕對…

springboot + nacos + k8s 優雅停機

1 概念 優雅停機是什么&#xff1f;網上說的優雅下線、無損下線&#xff0c;都是一個意思。 優雅停機&#xff0c;通常是指在設備、系統或應用程序中止運作前&#xff0c;先執行一定的流程或動作&#xff0c;以確保數據的安全、預防錯誤并保證系統的整體穩定。 一般來說&…

Python 標準庫之 math 模塊

1. 前言 math 模塊中包含了各種浮點運算函數&#xff0c;包括&#xff1a; 函數功能floor向下取整ceil向上取整pow指數運算fabs絕對值sqrt開平方modf拆分小數和整數fsum計算列表中所有元素的累加和copysign復制符號pi圓周率e自然對數 2. math.floor(n) 函數 math.floor(n) 的…

6.14星期六休息一天

Hey guys, Today’s Saturday, and I didn’t have to go to work, so I let myself sleep in a bit — didn’t get up until 8 a.m. My cousin invited me over to his place. He lives in a nearby city, about 80 kilometers away. But honestly, after a long week, I …

event.target 詳解:理解事件目標對象

event.target 詳解&#xff1a;理解事件目標對象 在 JavaScript 事件處理中&#xff0c;event.target 是一個關鍵屬性&#xff0c;它表示最初觸發事件的 DOM 元素。下面我將通過一個可視化示例詳細解釋其工作原理和使用場景。 <!DOCTYPE html> <html lang"zh-C…

Flutter 小技巧之:實現 iOS 26 的 “液態玻璃”

隨著 iOS 26 發布&#xff0c;「液態玻璃」無疑是熱度最高的標簽&#xff0c;不僅僅是因為設計風格大變&#xff0c;更是因為 iOS 26 beta1 的各種 bug 帶來的毛坯感讓 iOS 26 沖上熱搜&#xff0c;比如通知中心和控制中心看起來就像是一個半成品&#xff1a; 當然&#xff0c;…

Android工程中FTP加密傳輸與非加密傳輸的深度解析

詳細的FTP傳輸實現方案&#xff0c;包括完整代碼、安全實踐、性能優化和實際應用場景分析。 一、FTP傳輸類型對比表&#xff08;增強版&#xff09; 特性非加密FTPFTPS (FTP over SSL/TLS)SFTP (SSH File Transfer Protocol)協議基礎FTP (RFC 959)FTP SSL/TLS (RFC 4217)SSH…

C# 枚 舉(枚舉)

枚舉 枚舉是由程序員定義的類型&#xff0c;與類或結構一樣。 與結構一樣&#xff0c;枚舉是值類型&#xff1a;因此直接存儲它們的數據&#xff0c;而不是分開存儲成引用和數據。枚舉只有一種類型的成員&#xff1a;命名的整數值常量。 下面的代碼展示了一個示例&#xff0c…

一文詳解前綴和:從一維到二維的高效算法應用

文章目錄 一、一維前綴和?1. 基本概念?2. C 代碼實現?3. 應用場景? 二、二維前綴和1. 基本概念?2. C 代碼實現?3. 應用場景? 三、總結? 在算法競賽和日常的數據處理工作中&#xff0c;前綴和是一種極其重要的預處理技術。它能夠在常數時間內回答多次區間查詢&#xff0…

windows 開發

文章目錄 環境搭建數據庫關鍵修改說明&#xff1a;在代碼中使用該連接字符串&#xff1a;注意事項&#xff1a;實際使用 都說幾天創造一個奇跡&#xff0c;現在是真的這樣了&#xff0c;Just do it! 環境搭建 數據庫 需要下載這個SQL Server數據庫&#xff0c;然后每次Visua…

免費OCPP協議測試工具

免費OCPP 1.6J協議測試工具&#xff0c;簡單實用。除加密功能外&#xff08;后續版本支持&#xff09;&#xff0c;支持所有消息調試。 后續將添加2.01和和2.1協議支持. 歡迎使用 Charge-Test

高等數學基礎(行列式和矩陣的秩)

行列式主要用于判斷矩陣是否可逆及計算特征方程 初見行列式 行列式起源于線性方程組求解 { a 11 x 1 a 12 x 2 b 1 a 21 x 1 a 22 x 2 b 2 \begin{cases} a_{11}x_1 a_{12}x_2 b_1 \\ a_{21}x_1 a_{22}x_2 b_2 \end{cases} {a11?x1?a12?x2?b1?a21?x1?a22?x2…

開心燦爛go開發面試題

1.給你單鏈表的頭節點 head &#xff0c;請你反轉鏈表&#xff0c;并返回反轉后的鏈表。 示例1: 輸入&#xff1a;head [1,2,3,4,5] 輸出&#xff1a;[5,4,3,2,1] package main import “fmt” type ListNode struct { Val int Next *ListNode } func main() { l1 : &…

【Flutter】程序報錯導致的灰屏總結

【Flutter】程序報錯導致的灰屏總結 一、前言 在 Flutter 中&#xff0c;出現“灰屏”&#xff08;grey screen&#xff09;通常意味著 應用發生了未捕獲的錯誤&#xff0c;導致框架無法正確構建 UI。 這也是在面試過程中常常問到的。 二、錯誤分類 常見的會導致灰屏的錯誤…

基于物聯網設計的智慧家庭健康醫療系統

1. 項目開發背景 隨著物聯網&#xff08;IoT&#xff09;技術的發展&#xff0c;智能家居系統逐漸融入到我們的日常生活中&#xff0c;成為提高生活質量、增強家庭安全、提升健康管理的重要工具。特別是在健康醫療領域&#xff0c;借助物聯網技術&#xff0c;智能家居不僅能夠…

設計模式精講 Day 1:單例模式(Singleton Pattern)

【設計模式精講 Day 1】單例模式&#xff08;Singleton Pattern&#xff09; 文章內容 開篇 在軟件開發中&#xff0c;設計模式是解決常見問題的通用解決方案。作為“設計模式精講”系列的第一天&#xff0c;我們將深入講解單例模式&#xff08;Singleton Pattern&#xff09…

【衛星通信】3GPP標準提案:面向NB-IoT(GEO)場景的IMS信令優化方案-降低衛星通信場景下的語音呼叫建立時延

一、引言 隨著5G非地面網絡&#xff08;NTN&#xff09;技術的演進&#xff0c;基于NB-IoT的衛星通信&#xff08;如GEO地球同步軌道衛星&#xff09;逐漸成為偏遠地區語音服務的重要補充。然而&#xff0c;傳統IP多媒體子系統&#xff08;IMS&#xff09;的信令流程在帶寬受限…