<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    TWaver - 專注UI技術(shù)

    http://twaver.servasoft.com/
    posts - 171, comments - 191, trackbacks - 0, articles - 2
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理


    自TWaver 3D產(chǎn)品發(fā)布以來,TWaver 3D的定位一直在于為企業(yè)提供3D應(yīng)用的快速開發(fā)工具,方便企業(yè)開發(fā)適合自己的高效、實(shí)時(shí)的監(jiān)控系統(tǒng)。

    基于這樣的產(chǎn)品定位,我們在過去的一年多時(shí)間里,一直將重心放在提升引擎效率,增加可視化工具上。對于我們的優(yōu)勢應(yīng)用行業(yè)——電信行業(yè),我們在3D機(jī)房應(yīng)用上做了比較多的優(yōu)化和定制。近期,有不少客戶向我們提出,總覺用TWaver 3D開發(fā)出來的界面,不像主流的3D效果那么精美。首先,我們想說,效果圖終歸是效果圖,和實(shí)際的系統(tǒng)一般來說還是有一些差異。其次,3D Max這些專業(yè)3D建模工具,和TWaver并不是對立的,而是相輔相成的工具。我們已經(jīng)支持將3D max的文件導(dǎo)入TWaver進(jìn)行展示,也正在研究使得TWaver能對接更多的模型類型。大家可以一起討論,如何讓TWaver的3D模型做得更好。最后,我們始終相信,作為開發(fā)工具的我們,是前途無限的,因此我們決定挑戰(zhàn)一下效果圖,看看TWaver的3D效果,到底有多強(qiáng)。

    首先我們先找來一張效果圖,真的是效果圖哦~~

    HTML5 3D機(jī)房3

    這張效果圖和TWaver 3D以往的demo風(fēng)格都大不相同,我們就來按圖索個(gè)機(jī)房吧~


    地板

    第一個(gè)要做,也是應(yīng)該比較簡單的,就是地板。這個(gè)地板應(yīng)該是一個(gè)有點(diǎn)厚度、有格子貼圖的薄薄立方體平面。還好經(jīng)過封裝,就寫一段json對象就能定義了:


    {
    name: 
    '地板',
    type: 
    'cube',
    width: 
    1600,
    height: 
    10,
    depth: 
    1300,
     
    style: {
    'm.color''#BEC9BE',
    'm.ambient''#BEC9BE',
    }
    }

    通過定義,創(chuàng)建了一個(gè)13米*16米的地板塊:
    HTML5 3D機(jī)房4

    調(diào)整到合適的角度看,效果還不錯(cuò),但顏色欠缺了些,需要找一個(gè)材質(zhì)紋理圖。紋理圖的尺寸都需要是寬和高都是2的冪,例如128×128、256*256等,這樣出來效果才會好。這也是3D軟件一般所要求的。另外紋理要能連續(xù)拼接不露破綻,這樣才好。例如下面我google出來的圖:

    HTML5 3D機(jī)房5


    在style里面添加:


    'top.m.texture.image''images/floor.png',
    'top.m.texture.repeat'new mono.Vec2(10,10),

    效果如下:
    HTML5 3D機(jī)房6

    雖然不是很華麗,但作為機(jī)房的地板,也綽綽有余了。好像有點(diǎn)so easy,決定加大難度,給地板加一個(gè)方便運(yùn)送設(shè)備的斜坡!

    HTML5 3D機(jī)房7

    這里就給大家普及下TWaver的好處了。Twaver里面的對象可以支持運(yùn)算,這個(gè)斜坡,可以定義一個(gè)斜的立方體,讓地板剪掉立方體,應(yīng)該可以做到。于是繼續(xù)定義json:


    {
        name: 
    '地板切坡',
        type: 
    'cube',
        width: 
    200,
        height: 
    20,
        depth: 
    260,
        translate: [
    -348,0,530],
        rotate: [Math.PI
    /180*300],
        op: 
    '-',
        style: {
          …,
        }
      }

    這里定義的一個(gè)傾斜的立方體,通過translate定義位置,通過rotate定義旋轉(zhuǎn)角度,然后再通過op定義運(yùn)算符,這里是“減去”,就用“-”。被剪掉的立方體也可以設(shè)置材質(zhì)、紋理、貼圖、顏色….等等。看看效果:
    HTML5 3D機(jī)房8

    走廊桌

    效果圖的房間有點(diǎn)狹窄,決定加一條寬敞的走廊,并在走廊上放一個(gè)接待桌。對于桌子這種沒有業(yè)務(wù)屬性的對象,為了簡單就偷懶做一個(gè)立方體表示吧!這個(gè)簡單,繼續(xù)使用上述辦法:


    {
        name: 
    '走廊板凳',
        type: 
    'cube',
        width: 
    300,
        height: 
    50,
        depth: 
    100,
        translate: [
    3500-500],
      }

    HTML5 3D機(jī)房9

    有點(diǎn)簡單,再加點(diǎn)陰影效果:
    HTML5 3D機(jī)房10

    簡簡單單一個(gè)接待桌就做好啦!下面繼續(xù)造房子,蓋墻體。


    墻體


    墻體是一個(gè)不規(guī)則的路徑,不過放心,TWaver的引擎不光支持不規(guī)則路徑,連曲線路徑都可以噢。所以看上去挺麻煩實(shí)際還是比較簡單的。在json里面定義一組數(shù)字的坐標(biāo),讓這些數(shù)字依次連接,組成一個(gè)墻體,最后生成3D對象放入場景中。
    Json定義大致如下:


    {
        name: 
    '主墻體',
        type: 
    'path',
        width: 
    20,
        height: 
    200,
        translate: [
    -5000-500],
        data:[
          [
    00],
          [
    10000],
          [
    1000500],
          [
    500500],
          [
    5001000],
          [
    01000],
          [
    0,0],
        ],
    }

    注意這里的類型變成了path,data中定義了一個(gè)二維坐標(biāo)數(shù)組來描述墻體。由于墻都是從底面開始的,所以只定義它的平面的x、y坐標(biāo)就行了。吸取剛才的經(jīng)驗(yàn)教訓(xùn),啟用陰影并咨詢設(shè)計(jì)師美眉幾個(gè)顏色值加上,看看效果:
    HTML5 3D機(jī)房12

    再瞅瞅細(xì)節(jié),好像缺點(diǎn)啥,沒門!

    HTML5 3D機(jī)房13




    門如果直接放上去,會被墻蓋住;如果比墻厚,又難看不符合實(shí)際。還是應(yīng)該先定義一個(gè)門洞立方體,把門所在的位置挖掉:

    {
        name: 
    '門洞',
        type: 
    'cube',
        width: 
    195,
        height: 
    170,
        depth: 
    30,
        op: 
    '-',
        translate:[
    -350,2,500],
    }

    剛好挖在斜坡的位置,這樣設(shè)備進(jìn)屋就方便了:

    HTML5 3D機(jī)房14


    不過這門沒有一個(gè)門框,感覺不太生動。多一個(gè)門框會感覺立體感強(qiáng)一些。門框可以是一個(gè)比門洞略大的立方體,在挖門洞之前添加:


    {
        name: 
    '門框',
        type: 
    'cube',
        width: 
    205,
        height: 
    180,
        depth: 
    26,
        translate: [
    -3500500],
        op: 
    '+',
      }

    加上陰影和光線等綜合效果,還不錯(cuò),挺有檔次的。

    HTML5 3D機(jī)房15


    還少點(diǎn)東西,對,門還沒裝上去。作為機(jī)房,應(yīng)該來個(gè)清爽透亮的玻璃門。門體較大,就來個(gè)雙開門吧。門的定義比較簡單,就是一個(gè)薄的立方體。不過為了做到玻璃效果,要設(shè)置透明度,讓他看上去更像一個(gè)玻璃,再讓設(shè)計(jì)師美眉弄一張好看一點(diǎn)的門的圖,貼上去。先做左邊的門:


    {
        name: 
    '左門',
        type: 
    'cube',
        width: 
    93,
        height: 
    165,
        depth: 
    2,
        translate:[
    -397,4,500],
        style:{
          
    'm.transparent'true,
          
    'm.texture.image''images/door_left.png',          
        }

    上面增加的style主要是透明和貼圖兩項(xiàng)。看看效果:

    HTML5 3D機(jī)房17


    再把右邊的也加上,位置對稱而已,json就不貼了。為了增加體驗(yàn),門上再設(shè)置動畫:雙擊可以自動打開,再雙擊可以直接關(guān)閉。TWaver的動畫功能引擎做好了封裝,在json中直接指定動畫類型就行了。不過要注意左右門的動畫旋轉(zhuǎn)方向要相反,要不然一個(gè)向里開一個(gè)向外開感覺比較怪異。

    HTML5 3D機(jī)房18



    有門就要有窗。有窗才有“窗明幾凈”的清爽干凈的趕腳。就在門的旁邊開一扇大窗戶吧!誰不喜歡大窗戶呢?方法和門類似,先放窗框后挖窗體。不過為了有點(diǎn)變化,這里不做窗框了,做一個(gè)窗臺,方法和道理與門相同。


    {
     name: ‘主窗戶洞’,
     type: ‘cube’,
     width: 
    420,
     height: 
    150,
     depth: 
    50,
     translate: [
    20030500],
     op: ‘
    -‘,
     },{
     name: ‘主窗戶臺’,
     type: ‘cube’,
     width: 
    420,
     height: 
    10,
     depth: 
    40,
     translate: [
    20030510],
     op: ‘
    +’,
     }

    定義了一個(gè)窗洞(挖掉)、一個(gè)窗臺(添加)。一個(gè)大窗戶就做好了:

    HTML5 3D機(jī)房20


    再添加一個(gè)略帶顏色的透明玻璃。玻璃設(shè)置點(diǎn)高光和反射,增加“玻璃”感覺:


    {
        name: 
    '主窗戶玻璃',
        type: 
    'cube',
        width: 
    420,
        height: 
    150,
        depth: 
    2,
        translate: [
    20030500],
        op: 
    '+',
        style: {
          
    'm.transparent'true,
          
    'm.opacity':0.4,
          
    'm.color':'#58ACFA',
        },      
      }

    Json中玻璃設(shè)置了透明度和顏色。這樣一個(gè)半透明的茶色玻璃就好了:

    HTML5 3D機(jī)房21


    到這里突然在想:蓋房子如果像寫程序一樣簡單就好了,所有的程序猿就不會是無房一族單身狗了。當(dāng)然寫程序和蓋房子一樣:該封裝好的要封裝好,最后就是搭積木組裝就行了。如果蓋房子都是從挖土活泥巴開始,那就杯具了。寫程序也是一樣,如果從webgl的main開始寫….這3D機(jī)房的系統(tǒng)要幾個(gè)月甚至幾年才能做出來呢?


    外側(cè)墻


    房間外側(cè)的兩道走廊隔墻,由于是直線墻,沒有復(fù)雜走向,直接用立方體定義便可:


    {
        name: 
    '左外墻',
        type: 
    'cube',
        width: 
    20,
        height: 
    200,
        depth: 
    1300,
        translate: [
    -79000],
        op: 
    '+',
    }

    HTML5 3D機(jī)房22

    再繼續(xù)挖掉中間的窗戶部分,并添加玻璃:

    {
        name: 
    '左外墻洞',
        type: 
    'cube',
        width: 
    30,
        height: 
    110,
        depth: 
    1300,
        translate: [
    -790600],
        op: 
    '-',
    }
    [
    /javacsript]
    添加玻璃:
     
    {
        name: 
    '左外墻玻璃',
        type: 
    'cube',
        width: 
    4,
        height: 
    110,
        depth: 
    1300,
        translate: [
    -790600],
        op: 
    '+',
        style: {
          
    'm.transparent'true,
          
    'm.opacity':0.6,
        },
    }

    機(jī)柜

    最后再來點(diǎn)重點(diǎn)的內(nèi)容:機(jī)柜,以及其中的服務(wù)器設(shè)備。這才是3D機(jī)房里面最終要管理的內(nèi)容。在我們的實(shí)際項(xiàng)目中,這些資產(chǎn)都是在數(shù)據(jù)庫中存儲,并通過json接口加載到瀏覽器中顯示。這里為了演示方便,直接寫幾個(gè)機(jī)柜的片段,看一下顯示效果。


    機(jī)柜對象在項(xiàng)目中是這樣封裝的:用一個(gè)立方體來表示機(jī)柜,并加上貼圖。項(xiàng)目中,為了提高顯示速度,機(jī)柜一開始并不加載內(nèi)部服務(wù)器內(nèi)容,而是只顯示自身一個(gè)立方體。當(dāng)用戶雙擊后,會觸發(fā)一個(gè)延遲加載器,從服務(wù)器端加載機(jī)柜內(nèi)部服務(wù)器,并加載到對應(yīng)的位置上。此時(shí),機(jī)柜會被挖空成一個(gè)空心的立方體,以便視覺上更像一個(gè)機(jī)柜。


    定義機(jī)柜的json如下:


    {
        name: 
    '機(jī)柜',
        type: 
    'rack',
        lazy: 
    true,
        width: 
    70,
        depth: 
    100,
        height: 
    220,
        translate: [
    -3700-250],
        severity: CRITICAL,
      }

    上面的機(jī)柜定義中,有一個(gè)lazy標(biāo)記,標(biāo)記它是否延遲加載其內(nèi)容。如果延遲加載,則雙擊觸發(fā),否則程序顯示時(shí)直接加載其內(nèi)容。Severity是定義了機(jī)柜的告警信息,它是否有業(yè)務(wù)告警。如果有告警,會用一個(gè)氣泡顯示在機(jī)柜的上方,同時(shí)機(jī)柜也會被染色成告警對應(yīng)的顏色。

    HTML5 3D機(jī)房30

    繼續(xù)添加更多的機(jī)柜:

    HTML5 3D機(jī)房31

    HTML5 3D機(jī)房32


    設(shè)備

    簡單起見,這里管理的設(shè)備假設(shè)都是機(jī)架設(shè)備,尺寸規(guī)格比較規(guī)整,因此比較容易在機(jī)柜中組織。一個(gè)設(shè)備的外觀確定后,在數(shù)據(jù)庫中定義好模板,加載時(shí)根據(jù)其所在機(jī)柜的位置放置即可。這里只是隨機(jī)生成了幾個(gè)服務(wù)器設(shè)備,并按位置擺放。在實(shí)際應(yīng)用中,可以通過手工錄入或者智能機(jī)架報(bào)送的信息來確定服務(wù)器的類型和位置。

    HTML5 3D機(jī)房33

    如果需要監(jiān)控到端口級別,還可以在服務(wù)器彈出后,再進(jìn)一步延遲加載設(shè)備商的板卡、端口對象,并點(diǎn)擊后進(jìn)一步進(jìn)行配置、監(jiān)控等操作。當(dāng)然加載的數(shù)據(jù)越細(xì),對3D引擎和瀏覽器的壓力會越大。可以通過動態(tài)延遲加載/卸載策略,獲取一些平衡折中。

    到這里,機(jī)房就基本搭建完成了,看下效果,比起效果圖,是不是有過之而無不及呢?

    HTML5 3D機(jī)房35


    從顯示效果來看,基本不輸前面看到的廣告公司的效果圖,但和它和一張死圖片太不一樣了,我們這是一個(gè)能操作、能漫游、能縮放、有動畫、顯示流暢、瀏覽器無需插件就能直接打開的3D機(jī)房小程序,就一個(gè)json文件和一百多行代碼和一天的時(shí)間就搞定了,還是讓人有點(diǎn)驚訝的。不用插件、不用3Dmax,不用模型庫,我喜歡這樣干干凈凈純粹的小程序。小而美、干凈而純粹。手機(jī)和平板也能用哦,而且還很流暢!經(jīng)過優(yōu)化,場景加載已經(jīng)控制在600毫秒以內(nèi),縮放漫游也很流暢。當(dāng)然技術(shù)和美化永無止境,用戶的需求也千變?nèi)f化綿綿不絕。但只要我們選擇好了技術(shù)和工具,就能事半功倍。Html5就是極佳的一個(gè)選擇。

    TWaver 3D 機(jī)房 完勝效果圖


    需要相關(guān)代碼的同學(xué)可以發(fā)郵件到:tw-service@servasoft.com

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 日本中文字幕免费看| 国产亚洲福利一区二区免费看| 国产精品亚洲综合天堂夜夜| 久久丫精品国产亚洲av不卡| 婷婷亚洲天堂影院| 啦啦啦高清视频在线观看免费| 免费人成在线观看网站| 日韩精品无码免费视频| 亚洲欧美日韩国产精品一区| 亚洲成人网在线播放| 久久精品亚洲中文字幕无码网站 | 亚洲国产精品一区二区第四页| 成人免费观看一区二区| 性色午夜视频免费男人的天堂| 中文字幕a∨在线乱码免费看| 免费无码又爽又黄又刺激网站| 亚洲国产精品美女久久久久| 亚洲国产日韩在线| 18gay台湾男同亚洲男同| 亚洲AV无码成人专区片在线观看| 久久久久久a亚洲欧洲aⅴ| 国产偷窥女洗浴在线观看亚洲| 免费国产美女爽到喷出水来视频| 香蕉视频在线观看免费国产婷婷| 日韩一区二区a片免费观看| 日韩不卡免费视频| 丁香花免费完整高清观看| 日韩免费无码一区二区三区 | 国产最新凸凹视频免费| 免费无码看av的网站| 国外成人免费高清激情视频| 成人免费看片又大又黄| 一二三四在线播放免费观看中文版视频| 国内精自视频品线六区免费| 国产一卡二卡四卡免费| 国国内清清草原免费视频99| 无码人妻久久一区二区三区免费丨| 免费大片黄在线观看yw| 扒开双腿猛进入爽爽免费视频 | 亚洲精品伦理熟女国产一区二区| 2020国产精品亚洲综合网|