無插件純web 3D機房 (第四季:大型園區、地球儀效果和其他擴展應用)

来源:http://www.cnblogs.com/twaver/archive/2016/06/27/5620432.html
-Advertisement-
Play Games

前幾篇文章,我們介紹瞭如何使用HTML5 + WebGL,從零開始一步一步打造一個基於web的3D機房展示程式,並陸續增加了資產管理和動環等效果。這篇文章是前三篇文章的延伸,進一步把3D機房從房間做了擴展,實現從“地球(地圖)”— “園區”— “樓宇”— “機房”的炫酷效果,以及一些其他3D應用的開... ...


前言

初次見面的朋友們大家好,這篇文章是“無插件純web 3D機房”系列的第四季,感興趣的朋友可從頭開始觀看,以下是正確的閱讀順序:

無插件純web 3D機房(第一季:從零開始搭建Web 3D機房)
無插件純web 3D機房(第二季:機櫃和設備)
無插件純web 3D機房(第三季:資產管理和動環監控)

答一些讀者問

闊別了半年多,哥其實沒閑著,在憋大招來著。期間陸續收到朋友的留言和來信,提了不少特別棒的意見和想法,項目也有了很大的進展,在接下來的文章里,哥會無私和大家分享。

不扯了,進入正題。首先,想說一個最近一直在和大家探討的問題:HTML5好還是插件好?

無論是在學習還是在做項目的一些朋友都提到了這個問題。儘管web3d技術風起雲涌,大體還是分為兩大流派:插件派和HTML5派。插件派的技術路線是,在瀏覽器中安裝一個企業自己做的插件,然後在這個插件上提供3D的開發能力。典型代表例如Flash插件、Unity3D插件(簡稱U3D)。另外一派就是無插件的HTML5路線,它使用H5的WEBGL標準和Canvas技術來實現瀏覽器中的3D/2D技術,而無需安裝插件。

插件的好處是可以適配各種老型號的瀏覽器(例如老版本的IE),效率應該也會好一點。缺點是,需要安裝插件,跨手機平板也麻煩,語言上要使用插件要求的語言。HTML5的好處是不安裝插件,效率也很不錯,語言簡單統一,都是javascript,而且是目前最火的技術方向。

本人相信 “插件必死”的發展趨勢。要是不服,就看看Flash,和那些被坑在Flex技術上現在還爬不出來眼看著別人學HTML5拿高薪恨得吐血的程式猿們吧。誰又能保證Unity3D不會有一天變成另外一個Flash呢?看看現在日新月異每天大量涌現的HTML5技術和應用,我們有時間爭論插件好還是H5好這樣的無聊問題,還不如實實在在地幹起來。達成共識後,我們來開始看此次的一大波更新。

鷹眼

上次的小機房功能已經基本完成了,客戶對演示效果也非常滿意。由於客戶使用過我們之前做的2D系統,看到過鷹眼功能(也就是縮略圖),所以這次毫不猶豫也要求3D機房監控界面增加鷹眼功能。這個把哥難了一陣子。

為了尋找思路,哥首先打開了我們之前做過的2D的拓撲圖,尋找靈感。鷹眼看上去是這樣子的:
圖片描述

上面的界面是同事給客戶做的虛擬機開通、配置的編輯界面,右下角的這塊試圖就是鷹眼縮略圖。咨詢同事,他說鷹眼在2D實現的時候,可以考慮把2D大圖做一個記憶體縮略圖更新到鷹眼視圖,或在大圖發生任何屬性變化時候進行監聽,然後動態生成縮略圖更新鷹眼視圖。不過在3D裡面會有所不同:弄一個小尺寸的webgl的canvas實時刷新,應該負載也不大。所以決定再new一個network放在右下角試試:

var overview = new mono.Overview3D(network);
overview.adjustBounds(200,200);
var rootView = overview.getRootView();
network3d.getRootView().appendChild(rootView);

同時,還要把鏡頭固定到頭頂上方垂直向下看,並去掉滑鼠的交互機制。經過一番折騰,終於把一個鷹眼畫布放在大的場景畫布的右下方,看看效果:
圖片描述

設備編輯器

這次項目中據說有200多種不同的設備,每個設備面板都不一樣,要給每一個設備建模,這不是純體力活嗎?就算丟給美工組做,也得耗費好多個人天呢,而且模型的復用性也不高。考慮再三,項目組緊急開發了設備面板的編輯器,很好地解決了這個問題。我試了一下,以做一個標準的機架設備為例,還是很快的:
圖片描述

編輯器裡面把常見的埠和麵板都做好了,拖拖拽拽、對齊吸附,放上logo,很快一個像模像樣的交換機就出來了,真是個良心產品!點擊按鈕導出json,可以直接在項目裡面用了。當然,我這邊的用法是把設備繼續往機柜上放。機架編輯器是我這裡開發的,效果差不多,可以直接把設計好的設備拖放到機櫃的位置上:
圖片描述

接下來,再把機櫃往房間裡面拖,房間的形狀也要編輯的:
圖片描述

直接點擊3D按鈕可以預覽一下:
圖片描述

對了,這裡要註意的是一排機櫃一般都會配置一個列頭櫃,專門控制電路等信息的,雙擊它會彈出一個電路配置界面:
圖片描述

據說這個界面也有編輯器可以直接拖拽生成,這樣就更方便了。

更多場景

其實對於機櫃場景的編輯,模型稍作變化,就可以應付其他行業的應用。

3D倉庫

例如把機櫃變成貨架,把伺服器變成貨物,簡單拖拽,會是什麼場景呢?可以想象一下。
圖片描述

3D工廠

繼續想象,如果把機櫃變成生產加工車間的機床,簡單拖拽、添加告警信息,又是怎麼樣一番景象呢?
圖片描述

圖片描述

3D變電站

再比如,把場景裡面的模型換為變電站裡面的變壓器、樓房、龍門架等,加上告警和交互,不就是一個戶外變電站監控的應用嗎?
圖片描述

3D加油站

如果把模型換為加油站,就是一個加油站SCADA和監控的應用:

圖片描述

圖片描述

3D工控應用

當然如果跟硬體連上,就可以做工業上各種檢測和控制了:
圖片描述

當然自動控制應用需要數據採集存儲轉發雲平臺組態系統等內容,等以後有機會單獨寫一篇和大家探討。

管線

機房裡有很多物理的或邏輯的鏈路信息,例如網線、光纖,一些業務上的連接關係等。這些管線要顯示在機房中,就需要對管線進行建模、存儲、顯示。顯示的部分,我這裡做了簡單的空間自動路徑,尋找最合適的路線走向,並將A端和Z端設備之外的物體虛化,可以把管線顯示的更清晰:

圖片描述

對於跨樓層的鏈路,也可以清晰的呈現:
圖片描述

會議室

根據客戶要求,會議室場景也應該建模。經過同事現場拍照考察,會議室結構並不複雜,於是依舊讓美工妹妹操刀,很快做完了會議室模型:

圖片描述

當然,這裡面的場景並不是固定不變的,例如雙擊投影儀可以讓他在投影幕布上播放視頻;雙擊門可以打開,等等。這是因為我們對這裡面的模型進行了分拆、動作定義。

例如下麵牆上的電視屏幕,雙擊可以顯示機房的統計信息圖。
圖片描述

繼續雙擊屏幕上的統計圖,可以把2D的統計圖程式界面直接顯示出來,進行交互。
圖片描述

這也是使用HTML5的2D和3D技術的混合優勢。

園區

客戶要求機房所在的園區也要加到場景中,想一想也合理。項目大了後,機房會分佈在好幾個樓宇的不同樓層,要查看必須有一個3D全景場景進去才方便。這個難度倒是不大,找美工妹子幫忙。妹子比開發商還快,用了幾個小時,一個全新樓盤便在3D Max中誕生了。轉obj,導入系統,急忙打開瀏覽器看效果:
圖片描述

這裡的一個經驗是,如果要做到雙擊大樓能夠進去,就要把大樓拆成單獨的模型進行載入、監聽事件。

地球

問題又來了。客戶說北京上海全國各地有多處機房,需要統一顯示和管理。看來園區已經不夠用了,需要一個全國地圖。如果過幾天客戶說美國還有一個機房怎麼辦?乾脆直接整個地球顯示吧,一步到位。等客戶要求火星有機房的時候再說吧。

弄一個地球用3D太簡單方便了,貼圖加光暈,分分鐘出來:
圖片描述

接下來把中國的區域高亮出來,突出我國的地位。這個做法是準備一個透明的中國地圖輪廓,如下圖:
圖片描述

然後把地圖作為貼圖疊加在地球上,調整位置:
圖片描述

接下來做幾個數據中心的節點。用一個小小的球就可以吧!
圖片描述

為了防止看上去枯燥,把數據中心的連線用流動動畫顯示,每個數據中心用一個發光的圖片動畫做成旋轉發光效果,看上去就生動多了。

當然我們項目里最後做成的效果是這樣的:

圖片描述

有沒有瞬間高大上的感覺?這還不算完,另外一個同事把我的代碼拿過去,又增加了一些亂七八糟的效果,變成了這樣:

圖片描述

主要是增加了一些地理位置的熱點,環繞地球的衛星,以及一些彈道導彈的攻擊動畫效果。據說某國防單位需要這樣的顯示方法,具體咱就不瞭解啦,總之有點科幻感了。

說道彈道攻擊效果,想起項目中另外一個網路攻擊的顯示界面,也很有意思,雖然是2D的,但是也有不錯的動畫效果:

圖片描述

這裡面的爆炸效果、彈道效果,都用了HTML5的canvas裡面2D的一些API繪製,例如模糊、漸變等。綜合利用2D+3D來呈現網路攻擊,還是非常直觀的。還可以把網路攻擊的應對流程通過3D化的泳道圖顯示出來進行分析:
圖片描述

至此,一個“從地球到設備埠”的多層次、大型綜合3D機房系統就構建成了。怎麼樣,HTML5的3D技術不是“小玩具”吧?只要認真打造,完全可以支撐各種大型行業應用了。咱們程式猿也不要徘徊等待了,抓緊學習HTML5的2D、3D技術吧!

最後老規矩,覺得圖片不過癮,需要一睹3D機房真容的同學,可以發郵件到[email protected],索取程式代碼,依然真誠歡迎大家各抒已見,共同進步~

圖片描述


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 3.事件和動畫 A. 事件 Aa. DOM載入 1.為什麼使用jQuery載入DOM方法? 以javascript的window.onload()方法載入DOM的先決條件是:必須等待被請求頁面的資源全部載入完成,才會為DOM元素添加事件行為;而jquery只要DOM元素載入完成,就立刻綁定事件 2. ...
  • //獲取到當前時間 Date date=new Date(); DateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String time=format.format(date); ...
  • <!doctype html><html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script type="text/javascript" src="jquery.js"></script> </head> ...
  • <!doctype html><html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script type="text/javascript" src="jquery.js"></script> </head> ...
  • 使用sui mobile做的選擇控制項,其中sm.js有修改,增加自定義api,詳情請看index.html的註釋,不多說了,上代碼 引用文件及demo:http://pan.baidu.com/s/1i5tuuzz ...
  • 1、JS中的記憶體空間分為兩種:棧記憶體、堆記憶體 棧記憶體:提供JS代碼執行的環境;存儲基本數據類型的值; ->全局作用域或者私有的作用域其實都是棧記憶體 堆記憶體:存儲引用數據類型的值(對象是把屬性名和屬性值存儲進去,函數是把函數體中的代碼當做字元串存儲進去) 2、當瀏覽器載入我們HTML頁面的時候,首先會 ...
  • <img class="desc_img" src="http://image.baidu.com/search/detail?ct=503316480&z=0&ipn=d&word=html&step_word=&pn=0&spn=0&di=87025285600&pi=&rn=1&tn=baid... ...
  • 博客近兩個月沒有更新了,沒有時間只是藉口,主要還是沒有養成寫博客的習慣,需自省!把做的東西寫出來,把不會的人教會,這是個知識內化的過程,也是提升自己的過程,so...博客還需繼續,前端的路很遠,還需繼續努力~ 1 線上編輯試題頁面設計 最近在做一個線上編輯試題系統,該系統是基於UEditor做的二次 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...