整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          WebGL+Three.js 入門與實戰,系統學習 Web3D 技術


          /xia仔のke:itzcw.com/8968/

          WebGL與Three.js入門

          WebGL(Web Graphics Library)是一種JavaScript API,它基于OpenGL ES標準,允許開發者在瀏覽器中創建和渲染3D圖形。WebGL與HTML5 Canvas元素緊密結合,使得開發者可以使用JavaScript代碼直接與GPU通信,從而實現高性能的3D渲染。

          Three.js是一個流行的JavaScript庫,它建立在WebGL之上,提供了一個簡潔的API,使得開發者更容易地創建和管理3D場景、模型、動畫等。Three.js簡化了WebGL的使用,使得即使是沒有WebGL經驗的開發者也能快速上手開發3D應用。

          實戰項目

          在學習WebGL和Three.js的過程中,實戰項目是非常重要的一部分。通過實際的項目,你可以將所學的理論知識付諸實踐,解決真實世界的問題。實戰項目通常包括以下幾個方面:

          創建3D場景:設置相機、添加幾何體、設置材質和光源等。

          實現物體的旋轉和移動:通過修改物體的位置和旋轉角度來實現。

          實現交互操作:例如通過鼠標或觸摸屏控制物體的旋轉和移動。

          優化性能:包括減少重繪區域、使用緩沖區等手段優化性能。

          發布應用:將應用打包發布到Web服務器上,供用戶訪問。

          學習資源

          目前網絡上有很多關于WebGL和Three.js的學習資源。例如,有些課程會涵蓋WebGL基礎、Three.js入門、圖形學基礎、模型加載與處理、紋理與材質、光照與陰影、交互與動畫、優化與性能調優等內容。這些課程可能還會提供一些實戰項目,讓學員應用所學知識,開發并部署具有實際應用場景的Web3D應用。

          此外,還有一些書籍、在線教程、視頻課程和社區論壇,如Bilibili、掘金等平臺,也提供了大量的WebGL和Three.js學習資源,可以幫助你更快地上手和深入學習。

          通過這些資源,你可以逐步提升自己的Web3D技術水平,并為開發各種類型的交互式3D應用奠定堅實的基礎。

          WebGL和Three.js在現代Web開發中的地位

          WebGL和Three.js在現代Web開發中扮演著重要的角色,它們極大地推動了3D技術在網頁上的應用和發展。WebGL作為底層的圖形渲染API,為開發者提供了在瀏覽器中渲染三維圖形的可能性。而Three.js作為一個建立在WebGL之上的JavaScript庫,它簡化了使用WebGL創建和展示三維圖形的過程,使得開發者無需深入了解WebGL的復雜性,也能夠輕松地在網頁中集成3D內容。

          對推動3D技術普及的作用

          WebGL和Three.js的出現降低了3D技術在Web開發中的門檻,使得更多的開發者和設計師能夠參與到3D內容的創作中來。Three.js提供的豐富功能,如加載并顯示模型、應用各種材質和紋理、創建燈光和相機、執行動畫等,都大大簡化了3D開發的流程。這不僅促進了3D技術在商業領域的應用,如在線購物、在線教育、游戲等,而且還激發了創新,因為開發者可以用3D技術來解決更多樣化的問題。

          未來趨勢

          隨著技術的發展,WebGL和Three.js將繼續在Web開發中發揮重要作用。隨著5G和物聯網時代的到來,WebGL和Three.js的技術前景將進一步得到發展,預計會有更多的創新和應用出現。同時,隨著WebGL支持的增強和瀏覽器功能的日益強大,WebGL和Three.js也將繼續成為復雜應用和圖形的主要平臺。因此,WebGL和Three.js不僅是當前Web開發的重要組成部分,也是未來發展的關鍵技術之一。

          在進行Web3D應用開發時,以下幾個因素會對應用的性能和用戶體驗產生顯著影響:

          性能優化

          性能優化是提高Web3D應用流暢度的關鍵。這包括但不限于以下幾點:

          JavaScript壓縮和模塊打包:減小文件大小,提高加載速度。

          渲染性能優化:使用高效的渲染技術,快速加載和渲染大規模的3D模型數據。

          數據壓縮與傳輸:采用有效的數據壓縮算法和傳輸優化技術,減少加載時間和網絡帶寬消耗。

          瀏覽器兼容性

          不同的瀏覽器對WebGL的支持程度可能會有所不同,確保應用在主流瀏覽器上都能正常運行,并進行充分的兼容性測試。

          移動設備適配

          移動設備上的WebGL性能可能有限,而且屏幕尺寸較小。確保應用在移動設備上能夠正常運行,并提供良好的用戶體驗。

          用戶體驗設計

          為用戶提供友好的界面和控制方式,確保用戶能夠輕松地與3D場景交互。考慮到不同用戶的設備和技能水平,使界面易于理解和使用。

          網絡加載和優化

          3D模型和紋理文件可能較大,因此需要考慮加載時間和帶寬。使用適當的壓縮技術、資源懶加載和CDN等手段來優化加載性能。

          安全性考慮

          處理用戶上傳的3D模型時需要謹慎,防止潛在的安全風險。確保應用在處理用戶輸入和上傳時具有適當的安全性措施。

          綜上所述,性能優化、瀏覽器兼容性、移動設備適配、用戶體驗設計和網絡加載優化是影響Web3D應用性能和用戶體驗的關鍵因素。在開發過程中,應特別注意這些方面的優化和適應性調整。

          WebGL和Three.js在新興技術領域的應用前景

          WebGL和Three.js作為Web開發中的3D技術,已經在多個新興技術領域展現出了巨大的潛力和應用前景。以下是幾個關鍵點,展示了它們在未來可能扮演的角色:

          增強現實(AR)和混合現實(MR): WebGL和Three.js可以用來創建在現實世界中疊加虛擬元素的體驗,這在增強現實游戲中尤其常見。通過在Web瀏覽器中渲染3D內容,用戶可以直接在他們的物理環境中與數字對象互動,這種無縫集成的體驗對于教育和娛樂領域尤為有價值。

          虛擬現實(VR): WebGL和Three.js也可以用于創建虛擬現實體驗,讓用戶沉浸在一個完全由數字構成的環境中。這種技術可以用于游戲、電影、甚至是遠程工作,提供了一個全新的維度來體驗內容。

          Web3技術融合: Web3技術,特別是區塊鏈,正逐漸與虛擬現實技術融合。這種融合可能會導致去中心化的虛擬世界的誕生,其中用戶可以擁有和交易虛擬資產,并在沒有中介的情況下參與虛擬活動。WebGL和Three.js將是實現這些虛擬世界的重要技術基礎。

          教育和培訓: 在教育領域,WebGL和Three.js可以提供一個更加直觀和互動的學習環境。無論是醫學解剖、地理信息系統還是復雜的科學概念,都可以通過3D模型和模擬來教授,提高學習效率和興趣。

          娛樂和社交: 在娛樂行業,WebGL和Three.js可以用來創建互動式的音樂視頻、在線游戲和社交平臺,讓用戶在虛擬空間中與他人互動,享受沉浸式的娛樂體驗。

          商業和零售: 商家可以使用WebGL和Three.js來創建虛擬的商店或產品展示廳,讓顧客在不受地域限制的情況下探索和體驗產品。這種新型的購物體驗有望改變消費者的購買習慣。

          文化和旅游: 文化機構可以使用WebGL和Three.js來創建虛擬博物館或歷史遺跡的復原,讓公眾在家中就能享受到實地參觀的體驗。旅游業也可能利用這些技術來提供虛擬旅游服務。

          總的來說,WebGL和Three.js在新興技術領域的前景看起來非常廣闊,它們不僅能夠推動3D技術的發展,還能夠為用戶提供更加豐富和沉浸式的體驗。隨著技術的進步和市場的需求,我們可以預見這些工具將在未來幾年內繼續發展和演變,以滿足不斷變化的市場需求

          、什么是3D可視化

          3D可視化也就是三維可視化系統,是基于大數據、物聯網、云計算等技術構建,提供直觀的三維軟件應用服務。

          三維可視是描繪和理解模型的一種手段,是數據體的一種表征形式,并非模擬技術。它能夠利用大量數據,檢查資料的連續性,辨認資料真偽,發現和提出有用異常,為分析、理解及重復數據提供了有用工具,對多學科的交流協作起到橋梁作用。

          二、現狀

          近年以來國家大力推展高新技術的發展,科技的創新,高新的技術通常需要大量的數據支撐,這時候基于大數據云計算下的數據管理就非常有必要落實到各個適用場景。例如打造智慧園區的中臺基礎,同時通過統一監控管理園區內的各種軟硬件系統和設備,通過多維數據展示與管理,為管理者提供直觀、高效、便捷、節能的管理環境。

          再者針對以往的平面圖分析,三維模型更具有嵌入效應且數據更直觀體現在空間部分,在對適用場景下的工作幫助功不可沒,例如場景3D可視化,就是以虛擬現實全景仿真再現,360°旋轉,多角度切換,高空視角、第一人稱視角,自動漫游與巡檢,全方位總覽數據中心全貌及狀態。也可以在日常工作環境中、對各種設備微環境進行有效監測如;壓力、溫度、濕度、位移、加速、人員定位等多種可視化環境監測。當然,這塊是需要強大的數據統計,像廈門邦展數字科技有限公司長期從事計算機信息系統集成的工程建設,在物聯網等網絡工程的硬件集成實施上經驗豐富,對于數據采集有十多年的項目經驗,基于數據模型為管理者提供全面的數據分析,提高信息查詢、處理和交互的及時性和有效性,為智能化企業的軟件打造硬件支持,強強聯合。

          三、政策支持

          根據觀研報告網發布的《中國3D視覺感知行業分析報告-行業供需現狀與發展趨勢分析(2022-2029年)》顯示3D視覺感知行業經過數十年的發展,由早期的工業級成功向消費級拓展,且應用領域仍在不斷拓寬,即將迎來快速增長時期,為促進產業發展,國家先后出臺一系列政策規劃:


          1.應用場景

          1、智慧園區

          園區的管理是全方位、多層次的管理。從項目、公司到各行業、各部門的逐級監控管理問題,專業分工細化帶來的資源整合及協調問題,都是園區在管理中所面臨的挑戰。智慧園區高效快捷負責整個園區的管理,因此建設一個強大的園區服務平臺來進行支持,才能進行園區的管理、安全監測、合作單位的良性互動。

          2、智慧工廠

          智慧工廠連接民有企業、國有企業,通過3D可視化技術,對工業生產廠房進行真實展現,從廠房的外部環境、樓宇到廠房內部結構和視頻監控生產流程均可進行立體仿真展示,并可任意角度調整場景切換。

          3、智慧消防

          智慧消防是利用IoT、紅外線感知等技術,能很好的記錄當前消防設備的位置、狀態,如有損壞系統及時報修,能更好的保障消防設施的完好,提供精準的設備信息,能通過視頻監控等物聯網數據,進行實時動態更新,現場人員更借助數據支持更好的解決現存問題,如安全隱患或者消防演練方案,提升救援效率。

          4、智慧樓宇

          數字孿生概念下的樓宇3D可視化系統,是基于三維場景及IoT數據采集二者集成系統,以直觀動態的形式展示樓宇內所有智能設備的空間分布以及運作情況,以懸浮信息的形式進行智能的實時監測、告警信息。

          5、智慧社區

          以基于數字孿生的三維虛擬化技術為基礎,以數字化、可視化、智能化理念為目標,通過直觀的動態形式展示小區各類建筑以及特定設備的運轉情況空間分布,實現社區從宏觀到微觀的全方位展示和管理,主要包括停車場可視化、人口分布可視化以及安防監控可視化。

          五、核心技術及優勢

          1、技術介紹

          利用WebGL三維圖形技術為企事業單位提供“3D可視化核心技術”的軟件外包服務商,也是國內主要的WebGL三維圖形技術開發服務商,累計為超過1000個3D可視化項目提供了技術支持。

          WebGL是一種3D繪圖協議,這種繪圖技術標準允許把JavaScript和OpenGL ES 2.0結合在一起,通過增加OpenGL ES 2.0的一個JavaScript綁定,WebGL可以為HTML5 Canvas提供硬件3D加速渲染,這樣Web開發人員就可以借助系統顯卡來在瀏覽器里更流暢地展示3D場景和模型了,還能創建復雜的導航和數據視覺化。

          2、產品優勢

          根據數據3D可視化開發庫,可為特定行業用戶定制3D可視化工具,供客戶進行項目的二次開發和擴展。

          行業的服務包括以下方案:

          ①數據3D可視化解決方案包括:三維建模、圖形編程、數據采集、數字孿生交互解決方案

          ②數據中臺前端展示解決方案包括:大數據分析、各類數據展示表(如:餅圖、柱形圖、條形圖折線圖等,根據需求變化)

          提供數據中心的解決方案包括:IoT數據獲取、數據中臺(用戶、內容、應用)、數據庫、可視化展示等軟件整體解決方案

          ③項目整體解決方案又包括:IoT數據采集、網絡工程、數據傳輸、中心機房建設、系統集成

          3、核心優勢:

          3D網頁圖形引擎封裝的標準算法模塊300余個,涵蓋基礎的WebGL渲染器、幾何類目、著色器類目、功能算法類目、人機交互控制、物理力學類目等。

          是國內首家采用draco三維圖形編碼格式,三維數據量只有傳統obj模型數據量的三十分之一,也是國內第一家自主研發WebGL圖形引擎2012年首次發布至目前已迭代115個版本,參與WebGL項目超過1000個,不僅專注3D更專注數據采集,從根本解決軟硬件交互難題。

          專注“數字孿生”建設,在其產品生態上,以“3D可視化”為核心,逐漸完善IoT設備接入標準化,數據中臺建設,GIS平臺建設,加快發展系統集成,保證行業的領先地位,Bestshow在物聯網等網絡工程的硬件集成實施上經驗豐富,對于數據采集有十多年的項目經驗,基于數據模型為管理者提供全面的數據分析,提高信息查詢、處理和交互的及時性和有效性,為智能化企業的軟件打造硬件支持,強強聯合為客戶創造價值,為產業經濟賦能,自主創新。

          工業互聯網,物聯網,可視化等名詞在我們現在信息化的大背景下已經是耳熟能詳,日常生活的交通,出行,吃穿等可能都可以用信息化的方式來為我們表達,在傳統的可視化監控領域,一般都是基于 Web SCADA 的前端技術來實現 2D 可視化監控,本系統采用 Hightopo 的 HT for Web 產品來構造輕量化的 3D 可視化場景,該 3D 場景從正面展示了一個地鐵站的現實場景,包括地鐵的實時運行情況,地鐵上下行情況,視頻監控,煙霧報警,電梯運行情況等等,幫助我們直觀的了解當前的地鐵站。

          系統中為了幫助用戶更直觀友好的瀏覽當前地鐵站,提供了三種交互模式:

          • 第一人稱模式 -- 操作就類似行人或車在行進的效果,可以通過鍵盤鼠標控制前進后退。
          • 自動巡檢模式 -- 該模式下用戶不需要任何操作,場景自動前進后退來巡查當前地鐵站的場景。
          • 鼠標操作模式 -- 左鍵旋轉場景,右鍵平移場景。

          本篇文章通過對地鐵站可視化場景的搭建,動畫代碼的實現,交互模式的原理解析,以及主要功能點的實現進行闡述,幫助我們了解如何使用 HT 實現一個簡單的地鐵站可視化。

          界面簡介及效果預覽

          地鐵運行效果

          地鐵從站外開到站內的效果為透明度逐漸增加,速度逐漸降低。

          漫游效果

          上述為自動巡檢的漫游效果,場景自動進行前進旋轉。

          監控設備交互效果

          當我們點擊場景中的監控設備時可以查看當前設備的運行情況,運行數據等信息。

          場景搭建

          該系統中的大部分模型都是通過 3dMax 建模生成的,該建模工具可以導出 obj 與 mtl 文件,在 HT 中可以通過解析 obj 與 mtl 文件來生成 3d 場景中的所有復雜模型,當然如果是某些簡單的模型可以直接使用 HT 來繪制,這樣會比 obj 模型更輕量化,所以大部分簡單的模型都是采用 HT for Web 產品輕量化 HTML5/WebGL 建模的方案,具體的解析代碼如下:

           1 // 分別為 obj 文件地址,mtl 文件地址
           2 ht.Default.loadObj('obj/metro.obj', 'obj/metro.mtl', {
           3 center: true,
           4 // 模型是否居中,默認為 false,設置為 true 則會移動模型位置使其內容居中
           5 r3: [0, -Math.PI / 2, 0],
           6 // 旋轉變化參數,格式為 [rx, ry, rz]
           7 s3: [0.15, 0.15, 0.15],
           8 // 大小變化參數,格式為 [sx, sy, sz]
           9 finishFunc: function(modelMap, array, rawS3) {
          10 if (modelMap) {
          11 ht.Default.setShape3dModel('metro', array); // 注冊一個名字為 metro 的模型
          12 }
          13 }
          14 });
          

          上面通過加載 obj 模型之后注冊了一個名字為 metro 的模型,之后如果要使用該模型可以通過以下代碼來實現:

          1 var node = new ht.Node();
          2 node.s({
          3 'shape3d': 'metro'
          4 });
          

          上面代碼新建了一個 node 對象,通過設置 style 對象的 shape3d 屬性可以把模型名稱為 metro 用到該 node 對象上去,之后便是我們場景中看到的地鐵列車模型。

          動畫代碼分析

          地鐵動畫代碼的實現分析

          場景中地鐵的運行是通過 HT 提供的調度插件來實現,調度的具體用法可以參考 HT for Web 的調度手冊,該調度主要用于在指定的時間間隔進行函數回調處理,回調函數的第一個參數為 data 圖元,也就是 3D 場景中的模型節點,我們可以判斷當前 data 是否為我們剛才創建的 metro 那個節點來進行后續的操作,場景中模擬了一個左開的地鐵和一個右開的地鐵,兩輛地鐵會交替出現。在 3D 場景中肯定會有坐標系,HT 中是用 x, y, z 來分別表示三個軸,所以地鐵的運動肯定是改變地鐵在坐標系中的位置來實現地鐵的運行,地鐵坐標如下圖所示:

          通過上圖可以知道地鐵在 3D 場景中的坐標系,如果要實現地鐵的移動則只需要將地鐵往圖中所示紅色箭頭的方向進行移動,即 x 軸的方向,通過 setX 這個方法不斷的修改地鐵的位置達到地鐵行進的目的,代碼中通過 getSpeedByX 以及 getOpacityByX 兩個方法來不斷獲取此時的列車速度以及列車透明度,以下為關鍵代碼實現:

           1 let metroTask = {
           2 interval: 50,
           3 // 每五十秒執行一次
           4 action: (data) = >{ // 即上文所提回調函數
           5 // 判斷當時傳進來的節點是否為地鐵列車節點
           6 if (data === currentMetro) {
           7 // 獲取地鐵此時的 X 軸位置以及行進的方向
           8 let currentX = data.getX(),
           9 direction = data.a('direction');
          10 // 根據當前的 X 軸位置獲取當前的列車速度
          11 let speed = this.getSpeedByX(currentX);
          12 // 根據當前的 X 軸位置獲取當前的列車透明度
          13 let opacity = this.getOpacityByX(currentX);
          14 // 判斷此時 X 軸位置是否超過某個值 即地鐵是在某個范圍內移動
          15 if (Math.abs(currentX) <= 5000) {
          16 // 設置當前的透明度
          17 opacity !== 1 ? currentMetro.s({
          18 'shape3d.transparent': true,
          19 'shape3d.opacity': opacity
          20 }) : currentMetro.s({
          21 'shape3d.transparent': false
          22 });
          23 // 設置當前的 X 軸位置
          24 data.setX(currentX + direction * speed);
          25 // 判斷此時地鐵的速度為 0,所以此時應該執行開門的動畫
          26 if (speed === 0) this.doorAnimation(currentMetro, direction);
          27 }
          28 // 右方向地鐵開到頭,進行復位
          29 if (currentX > 5000 && direction === 1) {
          30 currentMetro = leftMetro;
          31 currentMetro.setX(5000);
          32 }
          33 // 左方向地鐵開到頭,進行復位
          34 if (currentX < -5000 && direction === -1) {
          35 currentMetro = rightMetro;
          36 currentMetro.setX( - 5000);
          37 }
          38 }
          39 }
          40 };
          41 dm3d.addScheduleTask(metroTask);
          

          通過以上代碼可以知道地鐵在運行的過程中,主要通過修改地鐵的 x 軸位置來產生前進的動畫,并且需要讓地鐵在某個區間內進行運動,需要判斷邊界,而且為了模擬出真實的效果需要根據地鐵當前的位置不斷獲取當前的列車速度以及列車透明度,以下為流程圖:

          上圖所示的為地鐵進站時候的流程,當地鐵停靠完畢關門后需要進行出站,此時我們只需要把地鐵位置重新設置一下不為 0 即可,以下為部分代碼實現:

          1 currentMetro.setX(direction * 10); // 設置出站列車的位置
          

          當執行上面那句代碼之后上方的 metroTask 調度任務執行到 getSpeedByX 這個方法之后獲取到的 speed 速度不為 0,因此此時會繼續執行地鐵行進的動畫,此時的速度就是由慢至快,透明度由深至淺。以下為開門動畫執行流程:

          自動巡檢代碼的實現分析

          系統中自動巡檢的實現主要是通過修改 3D 場景中的 eye 以及 center 的值,HT 中提供了 rotatewalk 兩個方法來控制視角的旋轉以及視角的行進,rotate 方法在非第一人稱模式時,旋轉是以 center 為中心進行旋轉,也就是圍繞中心物體旋轉,當為第一人稱時旋轉以 eye 為中心進行旋轉,也就是旋轉眼睛朝向方向。walk 函數同時改變 eyecenter 的位置,也就是 eyecenter 在兩點建立的矢量方向上同時移動相同的偏移量。該系統中我沒有采用 rotate 函數而是自己實現了視角的旋轉,因為原本的 rotate 函數旋轉某個角度會馬上旋轉過去而不會有一個旋轉的過程,所以我重新實現了旋轉的方法,該系統中視角旋轉是通過不斷修改 center 的數值來實現,具體實現過程原理如下圖所示:

          部分實現代碼如下:

           1 rotateStep() {
           2 // 即上圖輔助點 C
           3 let fromCenter = this.fromCenter;
           4 // 即上圖 B 點
           5 let toCenter = this.toCenter;
           6 // 每幀轉一度
           7 let rotateValue = this.rotateFrame || Math.PI / 180;
           8 // 輔助點 C 與 B 點之間建立一個方向向量
           9 let centerVector = new ht.Math.Vector2(toCenter.x - fromCenter.x, toCenter.y - fromCenter.y);
          10 let centerVectorLength = centerVector.length();
          11 // 此時旋轉百分比
          12 let rotatePercent = rotateValue * this.stepNum / this.curRotateVal;
          13 if (rotatePercent >= 1) {
          14 rotatePercent = 1;
          15 this.stepNum = -2;
          16 }
          17 let newLength = rotatePercent * centerVectorLength;
          18 centerVector.setLength(newLength);
          19 let newCenterVector = centerVector.add(fromCenter);
          20 // 獲取旋轉過程中 center 的點信息
          21 let newCenterPosition = [newCenterVector.x, this.personHeight, newCenterVector.y];
          22 // 設置當前 center 的大小
          23 this.g3d.setCenter(newCenterPosition);
          24 }
          

          通過上述代碼就實現了場景中的視角旋轉,并且可以通過修改 rotateValue 的值控制旋轉的速度。

          電梯動畫代碼的實現分析

          場景中電梯是一個 obj 模型,3D 模型是由最基礎的三角形面拼接合成,例如 1 個矩形可以由 2 個三角形構成,1 個立方體由 6 個面即 12 個三角形構成,以此類推更復雜的模型可以由許多的小三角形組合合成。因此 3D 模型定義即為對構造模型的所有三角形的描述,而每個三角形由三個頂點 vertex 構成,每個頂點 vertex 由 x, y, z 三維空間坐標決定,HT 中使用 vs 數組記錄構成三角面的所有頂點坐標,所以如果想要讓電梯運行起來,只需要把所有的頂點坐標往電梯運行的方向進行平移,以下為部分關鍵偽代碼:

           1 // vs 指的是構成電梯模型所有的三角面頂點坐標數組
           2 // 由于場景中電梯的運行方向為往對角線右上方運動,所以只需要修改 x 軸以及 y 軸坐標值
           3 // xStep yStep 為每次電梯運動的距離
           4 setInterval(() = >{
           5 // i+3 是因為 vs 數組的順序為 x, y, z 軸 所以每次 i 偏移三個單位大小
           6 for (let i = 0, l = vs.length; i < l; i = i + 3) {
           7 // 該頂點坐標下一個 x 軸坐標的值
           8 let nextX = vs[i] - xStep;
           9 // 該頂點坐標下一個 y 軸坐標的值
          10 let nextY = vs[i + 1] + yStep;
          11 vs[i] = nextX < -0.5 ? 0.5 - (Math.abs(nextX) - 0.5) : nextX;
          12 vs[i + 1] = nextY > 0.5 ? -0.5 + (Math.abs(nextY) - 0.5) : nextY;
          13 }
          14 },
          15 200);
          

          電梯運動動畫如下圖所示:

          監控功能展示及介紹

          視頻監控

          當點擊場景中的攝像頭之后右側頂部會顯示出當前攝像頭的監控畫面,以下為實現效果圖:

          煙霧報警監控

          煙霧報警會根據后臺實時傳遞過來的狀態值來變換當前煙霧報警模型的顏色,紅色為報警狀態,以下為實現效果圖:

          電視列車到站時間監控

          日常地鐵站中會有專門的電視來展示下一班地鐵到站的時間表,該系統中也模擬該效果,不過該系統暫時做了電視的模型,時間暫無對接,以下為效果圖:

          場景監控交互

          3D 場景中交互是比較簡單的,主要是點擊攝像頭展示 2D 監控面板,在 2D 界面中主要是切換三種交互模式,三種交互模式為互斥的關系,以下是 3D 交互注冊事件代碼:

           1 g3d.mi((e) = >{
           2 let {
           3 g2d,
           4 dm2d
           5 } = this;
           6 // 為點擊類型
           7 if (e.kind === 'clickData') {
           8 // data 為當前點擊的圖元
           9 let data = e.data;
          10 // 當前圖元的 shape3d 類型
          11 let shape3d = data.s('shape3d');
          12 // 判斷當前 shape3d 類型是否為攝像頭
          13 if (shape3d && shape3d.indexOf('攝像頭') > 0) {
          14 let cameraPanel = dm2d.getDataByTag('cameraPanel');
          15 // toggle 切換攝像頭 2d 面板
          16 g2d.isVisible(cameraPanel) ? cameraPanel.s('2d.visible', false) : cameraPanel.s('2d.visible', true);
          17 }
          18 }
          19 // 為點擊 3d 場景背景類型
          20 if (e.kind === 'clickBackground') {
          21 let cameraPanel = dm2d.getDataByTag('cameraPanel');
          22 // 隱藏攝像頭 2d 面板
          23 g2d.isVisible(cameraPanel) && cameraPanel.s('2d.visible', false);
          24 }
          25 });
          

          總結

          工業互聯網將人,數據和機器連接起來,地鐵站 3D 可視化系統則是一個很好的展現,HT 的輕量化,數據的可視化,機器的可視化,資產的管理化幫助我們更好的監控。而物聯網將通過各種信息傳感設備,實時采集任何需要監控、連接、互動的物體或過程等各種需要的信息,通過與 HT 的結合更好的展現出可視化的優勢,當然地鐵站還可以與 VR 進行結合,在各地科技展會中我們可以見到各種 VR 場景操作,HT 中也可以結合 VR 設備進行操作,可以戴上設備在地鐵站中漫游,讓人有身臨其境的感覺,由于場景本身的輕量化,所以 VR 場景下的流暢性也是十分的高,讓用戶不會有頭暈的感覺。當然系統本身也可以在移動端運行,以下為移動端運行截圖:

          程序運行截圖:


          主站蜘蛛池模板: 国产成人久久精品区一区二区| 亚洲熟女少妇一区二区| 亚洲av日韩综合一区久热| 国产一区二区在线看| 久久婷婷久久一区二区三区| 国产AV一区二区三区无码野战| 另类免费视频一区二区在线观看| 少妇激情一区二区三区视频| 高清一区二区三区日本久| 国产电影一区二区| 日韩一区二区三区在线观看| 熟女少妇精品一区二区| 欧美日韩精品一区二区在线观看 | 亚洲一区中文字幕在线观看| 日韩一区二区三区在线| 91一区二区三区| 国产福利微拍精品一区二区| 日本在线视频一区| 一区二区三区观看免费中文视频在线播放 | 国产色综合一区二区三区| 久久无码人妻一区二区三区午夜| 国产精品一区二区毛卡片| 好看的电影网站亚洲一区| 国产福利在线观看一区二区 | 久久久久国产一区二区三区| 国产精品揄拍一区二区久久| 成人精品视频一区二区三区| 在线免费视频一区| 精品成人乱色一区二区| 亚洲综合色自拍一区| 午夜在线视频一区二区三区| 久久精品无码一区二区无码 | 国产激情一区二区三区四区| 亚洲成AV人片一区二区密柚| 亚洲日本一区二区三区在线不卡 | 成人区人妻精品一区二区不卡视频| 日韩成人无码一区二区三区 | 亚洲福利视频一区二区| 精品国产高清自在线一区二区三区| 蜜臀AV一区二区| 一区二区亚洲精品精华液|