亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 編程 > HTML > 正文

HTML5 WebGL 實(shí)現(xiàn)民航客機(jī)飛行監(jiān)控系統(tǒng)

2024-08-26 00:21:35
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

前言

前些日子出差,在飛機(jī)上看到頭頂?shù)谋O(jiān)控面板,除了播放電視劇和廣告之外,還會(huì)時(shí)不時(shí)的切換到一個(gè)飛機(jī)航行的監(jiān)控系統(tǒng),不過(guò)整個(gè)監(jiān)控系統(tǒng)讓人感到有一點(diǎn)點(diǎn)的簡(jiǎn)陋,所以我就突發(fā)奇想制作了一個(gè)采用 HT for Web 的升級(jí)版監(jiān)控系統(tǒng),demo 的效果還行,發(fā)出來(lái)大家相互學(xué)習(xí)下。

HTML5,WebGL,飛行監(jiān)控系統(tǒng)
 

demo

實(shí)現(xiàn)過(guò)程

云中穿行效果

為了達(dá)到飛機(jī)云中穿行的效果,最開(kāi)始我遇到的問(wèn)題是飛機(jī)飛行的層次感,也就通常所說(shuō)的透視效果,這里我采用的是云通道和云背景以不同的速度流動(dòng),制造一種飛行的透視效果。

云我采用的是貼圖的方式呈現(xiàn)的,但是僅僅是貼圖會(huì)遮擋天空和飛機(jī),非常影響飛機(jī)飛行的觀感,所以我開(kāi)啟了相應(yīng)圖元的 transparent 和 opacity ,云背景和云通道設(shè)置不同的透明度,不僅增加了層次感,還會(huì)讓人產(chǎn)生云朵從眼前飄過(guò)的錯(cuò)覺(jué)。

云通道采用的是 ht.Polyline 類型,通道縮放拉大了 Y 軸的比例,使云通道有更大的縱向空間,設(shè)置 reverse.flip 背拷貝使云通道內(nèi)部也顯示出貼圖,仿佛讓飛機(jī)置身于云海中穿梭;云背景采用 ht.Node 類型,只設(shè)置一個(gè)面顯示充當(dāng)云背景。

整體的云流動(dòng)效果采用 offset 偏移實(shí)現(xiàn),改變相應(yīng)圖元或相應(yīng)圖元面的貼圖偏移量來(lái)達(dá)到飛機(jī)云中穿行的效果, 代碼如下:
 

var i = 1,     p = 0;setInterval(() => {    i -= 0.1; p += 0.005;    clouds.s('shape3d.uv.offset', [i, 0]);    cloudBackground.s('all.uv.offset', [p, 0]);}, 100);

升降顛簸效果

雖然達(dá)到了飛機(jī)云中穿行的效果,但是如果飛機(jī)只是直直的飛行,那也會(huì)降低飛行的實(shí)感,相信坐過(guò)飛機(jī)的朋友肯定都遇到過(guò)因氣流產(chǎn)生的顛簸,也經(jīng)常感受到飛機(jī)飛行途中的爬升和下降,這其實(shí)是因?yàn)轱w機(jī)的航線并不是一直固定在一個(gè)高度上,有時(shí)會(huì)爬升有時(shí)會(huì)下降,所以我就用 ht-animation.js HT 動(dòng)畫(huà)擴(kuò)展插件去實(shí)現(xiàn)飛機(jī)顛簸效果,代碼如下:

dm.enableAnimation(20);plane.setAnimation({    back1: {        from: 0,        to: 160,        easing: 'Cubic.easeInOut',        duration: 8000,        next: "up1",        onUpdate: function (value) {            value = parseInt(value);            var p3 = this.p3();            this.p3(value, p3[1], p3[2]);        }    },    //...省略相似    start: ["back1"]});

球扇形視角限制

飛行效果完善之后,這時(shí)我就遇到了一個(gè)比較棘手的問(wèn)題,因?yàn)閷?shí)際上雖然看著飛機(jī)是在云海中穿梭,但是僅僅是在通道中飛行,背景其實(shí)也只是平面貼圖,所以當(dāng)視角到達(dá)某種程度的時(shí)候就會(huì)有強(qiáng)烈的違和感和不真實(shí)感,就需要一個(gè)視角限制,使視角的調(diào)整剛剛好在一個(gè)范圍內(nèi)。

視角限制的話一般是限制 g3d 的 eye 和 center ,不太了解的朋友可以去看 hightopo 官網(wǎng)中的 3d 手冊(cè),里面有詳細(xì)的說(shuō)明,這里我就不再贅述了;因?yàn)橐暯欠秶年P(guān)系,所以我決定固定 center 的位置,代碼如下:
 

g3d.addPropertyChangeListener(e => {    // 固定中心點(diǎn)    if (e.property === 'center') {        e.newValue[0] = center[0];        e.newValue[1] = center[1];        e.newValue[2] = center[2];    }}

然后再把 eye 限制在某一個(gè)范圍內(nèi)就大功告成了,然而這里卻并不是那么簡(jiǎn)單,最開(kāi)始我把 eye 限制在一個(gè)立方體的空間內(nèi),但交互效果很不理想,考慮到 g3d 默認(rèn)交互中,鼠標(biāo)拖拽平移視角變換時(shí),實(shí)際上 eye 是在一個(gè)以 center 為球心的球面上運(yùn)動(dòng)的,所以我決定從這個(gè)球中挖出來(lái)一塊作為 eye 的限制空間,也就是球扇形,不太理解的朋友可以參考這個(gè)圖:

HTML5,WebGL,飛行監(jiān)控系統(tǒng)
 

球扇形視角限制,一共需要三個(gè)參數(shù),分別是中心參考軸、中心軸和外邊所成角度、所在球限制半徑,其中中心參考軸可根據(jù)初始 eye 和 center 的連接延長(zhǎng)線確定,所在球限制半徑又分最大限制和最小限制,代碼如下:

 

function limitEye(g3d, eye, center, options) {    var limitMaxL   = options.limitMaxL,        limitMinL   = options.limitMinL,        limitA      = options.limitA;    g3d.addPropertyChangeListener(e => {        // 固定中心點(diǎn)        if (e.property === 'center') {            e.newValue[0] = center[0];            e.newValue[1] = center[1];            e.newValue[2] = center[2];        }        // 限制視角        if (e.property === 'eye') {            var newEyeV = new ht.Math.Vector3(e.newValue),                centerV = new ht.Math.Vector3(center),                refEyeV = new ht.Math.Vector3(eye),                refVector = refEyeV.clone().sub(centerV),                newVector = newEyeV.clone().sub(centerV);            if (centerV.distanceTo(newEyeV) > limitMaxL) {                newVector.setLength(limitMaxL);                e.newValue[0] = newVector.x;                e.newValue[1] = newVector.y;                e.newValue[2] = newVector.z;            }            if (centerV.distanceTo(newEyeV) < limitMinL) {                newVector.setLength(limitMinL);                e.newValue[0] = newVector.x;                e.newValue[1] = newVector.y;                e.newValue[2] = newVector.z;            }            if (newVector.angleTo(refVector) > limitA) {                var oldLength = newVector.length(),                    oldAngle  = newVector.angleTo(refVector),                    refLength = oldLength * Math.cos(oldAngle),                    vertVector,                    realVector,                    realEye;                refVector.setLength(refLength);                newEyeV = newVector.clone().add(centerV);                refEyeV = refVector.clone().add(centerV);                vertVector = newEyeV.clone().sub(refEyeV);                vertLength = refLength * Math.tan(limitA);                vertVector.setLength(vertLength);                realVector = vertVector.clone().add(refEyeV).sub(centerV);                realVector.setLength(oldLength);                realEye = realVector.clone().add(centerV);                // 防止移動(dòng)角度大于 180 度,視角反轉(zhuǎn)                if (oldAngle > Math.PI / 2) {                    realEye.negate();                }                e.newValue[0] = realEye.x;                e.newValue[1] = realEye.y;                e.newValue[2] = realEye.z;            }          }    })}

HTML5,WebGL,飛行監(jiān)控系統(tǒng)

飛機(jī)監(jiān)控系統(tǒng)

當(dāng)然作為監(jiān)控系統(tǒng),自然要有監(jiān)控了,增加右下角的小地圖,并提供三種模式,分別是聚焦飛機(jī),聚焦飛行軌跡和聚焦地圖,并根據(jù)飛機(jī)的飛行方向控制飛行軌跡的流動(dòng)效果,其中聚焦飛機(jī)會(huì)跟隨飛機(jī)移動(dòng)進(jìn)行 fitData ,使飛機(jī)一直處于小地圖的中心,代碼如下:

 

var fitFlowP = function (e) {    if (e.property === 'position' && e.data === plane) {        mapGV.fitData(plane, false);    }};buttonP.s({    'interactive': true,    'onClick': function (event, data, view, point, width, height) {        map.a('fitDataTag', 'plane2D');        mapGV.fitData(plane, false);        mapDM.md(fitFlowP);    }});buttonL.s({    'interactive': true,    'onClick': function (event, data, view, point, width, height) {        mapDM.umd(fitFlowP);        map.a('fitDataTag', 'flyLine');        mapGV.fitData(flyLine, false);    }});// ...省略

HTML5,WebGL,飛行監(jiān)控系統(tǒng)

增加鼠標(biāo)移到飛機(jī)相應(yīng)位置進(jìn)行名稱的提示、雙擊后顯示飛機(jī)相應(yīng)位置的信息面板并將視角聚焦到面板上、點(diǎn)擊飛機(jī)任意地方切換回飛機(jī)飛行模式等效果。

HTML5,WebGL,飛行監(jiān)控系統(tǒng)
 

左側(cè)增加監(jiān)控面板替代上面提到的雙擊相應(yīng)位置這步操作直接聚焦到相應(yīng)位置的信息面板上,這里按鈕開(kāi)啟了交互并添加了相應(yīng)的交互邏輯,代碼如下:

 

button_JC.s({    'interactive': true,    'onClick': function (event, data, view, point, width, height) {        event.preventDefault();        let g3d = G.g3d,            g3dDM = G.g3d.dm();        g3d.fireInteractorEvent({            kind: 'doubleClickData',            data: g3dDM.getDataByTag(data.getTag())        })    }});//...省略

HTML5,WebGL,飛行監(jiān)控系統(tǒng)

天空渲染效果

既然是監(jiān)控系統(tǒng)肯定是 24 小時(shí)無(wú)差別的監(jiān)控,這就涉及到一個(gè)問(wèn)題,我總不可能半夜的時(shí)候飛機(jī)也從瓦藍(lán)瓦藍(lán)的天空上飛過(guò),這就很欠缺真實(shí)性了,所以要有一個(gè)天空從亮到暗再?gòu)陌档搅恋倪^(guò)程,這個(gè)過(guò)程我暫定到 06:00-06:30 和19:00-19:30 這兩個(gè)時(shí)間段。

天空采用的是 shape3d : 'sphere' 球形,包裹整個(gè)場(chǎng)景,然后使用 reverse.flip 背拷貝 和 blend 染色,之后天空就可以渲染成我想要的顏色,如果按照時(shí)間改變天空明暗只要改變?nèi)旧稻涂梢粤恕?/p>

但是由于白天和晚上光照情況的不同,云反射光的強(qiáng)度也不同,就導(dǎo)致了白天和晚上云的差異,所以也要調(diào)整云道和云背景的貼圖的 opacity 透明度,晚間更為透明度,代碼如下:

if ((hour > 6 && hour < 19) || (hour == 6 && minutes >= 30)) {    timePane && timePane.a({        'morning.visible': false,        'day.visible': true,        'dusk.visible': false,        'night.visible': false,        'day.opacity': 1    })    skyBox.s({        "shape3d.blend": 'rgb(127, 200, 240)',    })    cloudBackground.s({        "back.opacity": 0.7,    })    clouds.s({        "shape3d.opacity": 0.7,    })} else if ((hour < 6 || hour > 19) || (hour == 19 && minutes >= 30)) {//...省略} else if (hour == 6 && minutes < 15 ) {//...省略} else if (hour == 6 && minutes >= 15 && minutes < 30) {//...省略} else if (hour == 19 && minutes < 15) {//...省略} else if (hour == 19 && minutes >= 15 && minutes < 30) {//...省略}

HTML5,WebGL,飛行監(jiān)控系統(tǒng)

這里我還增加了對(duì)右上角時(shí)間面板時(shí)間狀態(tài)圖標(biāo)的支持,并增加了圖標(biāo)切換時(shí)的漸隱漸顯效果,同時(shí)給時(shí)間面板狀態(tài)圖標(biāo)位置增加了點(diǎn)擊切換到下一時(shí)間狀態(tài)的功能。

為了演示效果我增加了時(shí)間倍速按鈕,下圖是 500 倍時(shí)間流速下的變化情況:

HTML5,WebGL,飛行監(jiān)控系統(tǒng)
 

總結(jié)

通過(guò)這個(gè) demo ,我發(fā)現(xiàn)生活中有很多沒(méi)有被人所注意到的細(xì)節(jié)都存在數(shù)據(jù)可視化的可能,在這個(gè)大數(shù)據(jù)的時(shí)代更多的可能性值得被人發(fā)掘出來(lái),不要錯(cuò)個(gè)身邊每一個(gè)值得數(shù)據(jù)可視化的細(xì)節(jié),這樣不僅可以更好的挖掘 HT for Web 的潛力,也可以加強(qiáng)自身身為一個(gè)程序員的綜合素質(zhì)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到HTML教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
国产亚洲污的网站| 国产精品久久亚洲不卡| 国产一区二区视频在线免费观看| 九九在线精品| 任你操视频在线观看| 亚洲一区二区三区中文字幕在线| 少妇大叫太大太粗太爽了a片小说| 国产一区在线播放| 91久久国产婷婷一区二区| 欧美大片免费播放器| 久久91超碰青草在哪里看| 喷水一区二区三区| 综合久久国产九一剧情麻豆| h免费在线观看| 亚洲人体偷拍| 91福利国产成人精品播放| 成人做爰69片免网站| 咪咪网在线视频| 亚洲精品网址| 国产国语videosex另类| www.久久99| 国产一级免费大片| 自拍另类欧美| 国产3p露脸普通话对白| 国产二级片在线| 日韩一二三四| 黄色网在线免费观看| av免费在线一区二区三区| 91高清视频在线| 一区二区三区国产视频| 91免费观看网站| 欧美剧在线免费观看网站| av电影在线观看网站| 国产精品日韩在线一区| 国产精品一区二区免费| www深夜成人a√在线| 日韩美女av在线免费观看| 国产精品久久毛片av大全日韩| 麻豆福利视频| 亚洲女人天堂色在线7777| av男人的天堂在线观看| 在线观看视频91| 欧美一区二区成人| 欧美日韩电影在线观看| 日本精品网站| 欧美日韩国产中文| 在线视频欧美日韩| 91av手机在线| 欧美电影免费观看高清完整| 日韩亚洲一区二区| 大陆极品少妇内射aaaaaa| 中文亚洲免费| 好吊色视频在线观看| 国产成人精品免费看在线播放| 亚洲性猛交富婆| 91亚洲精品国产| 九九热精品视频| 国产日韩欧美不卡| 国产精品xx| 九九久久电影| 91精品国产91久久久久久最新| wwwxx日本| 成人在线播放免费观看| 久久久久久久尹人综合网亚洲| 国产精品自在在线| 精品国自产在线观看| 欧美18免费视频| 亚洲性受xxx喷奶水| 久久人妻无码aⅴ毛片a片app| 国产视频精品一区二区三区| 色婷婷粉嫩av| 亚洲国产成人高清精品| 中国字幕a在线看韩国电影| 蜜桃在线一区二区三区精品| 另类ts人妖一区二区三区| 3p视频在线观看| 日韩视频免费在线播放| 亚洲精品狠狠操| 国产成人精品免费久久久久| 国产在线视频你懂的| 免费观看黄网站| 色狠狠桃花综合| 日本在线观看大片免费视频| 中文字幕亚洲日本| 亚洲第一天堂| 人在线成免费视频| 成人成人成人在线视频| 色偷偷噜噜噜亚洲男人| 精品美女视频| 99视频有精品高清视频| 精品亚洲一区二区三区在线播放| 激情中文字幕| 国产精品二区在线观看| 精品人妻一区二区三区视频| 亚洲精品中文字幕乱码三区不卡| 中文字幕免费在线视频| 激情视频免费在线| 56国语精品自产拍在线观看| 国产又粗又黄又爽的视频| 色哟哟网站在线观看| 中文字幕少妇一区二区三区| 极品束缚调教一区二区网站| 成人区人妻精品一区二| 国内精品伊人久久久久av影院| 欧美在线小视频| 国产91精品在线观看| 欧美xxxx14xxxxx性爽| 欧美激情极品| 91成人在线观看喷潮| 九九九在线视频| 3d黄动漫网站| 色国产精品一区在线观看| 欧美与亚洲与日本直播| 99久久婷婷国产综合精品首页| 亚洲免费一在线| 精品国产午夜肉伦伦影院| 国产一区二区三区欧美| 国产高中女学生第一次| 国产精品91一区二区| 天堂av免费看| 国产国语刺激对白av不卡| 国产精品乱码久久久久久| 国模私拍视频在线播放| 午夜婷婷国产麻豆精品| 精品国自产拍在线观看| 色综合视频一区中文字幕| 国产女人18毛片水18精| 精品亚洲va在线va天堂资源站| 人人爽人人爽人人片av| 日韩网站免费观看| 亚洲人成伊人成综合网小说| 成人无码精品1区2区3区免费看| 激情小说网站亚洲综合网| 色猫猫国产区一区二在线视频| 精品国产伦一区二区三区观看方式| 日韩高清不卡在线| 精品日韩在线| 中文字幕免费在线看| 欧美高清视频一区二区三区在线观看| 国产精品亚洲一区二区三区| 国产91精品高潮白浆喷水| 色多多视频网站| 国产美女精品| 日韩女同一区二区三区| 丁香久久综合| caopeng视频| 亚洲美女黄网| 中文字幕人成人乱码亚洲电影| 国产精品国产三级国产专区53| 国产精品成人一区二区三区电影毛片| 99在线视频影院| 动漫一区二区在线| 国产青青视频| 欧美一区二区三区白人| 欧美精品观看| 亚洲人精选亚洲人成在线| 日本中文字幕在线不卡| 久久亚洲一区二区三区四区| 精品深夜福利视频| 久久久免费高清视频| 国产男女猛烈无遮挡在线喷水| 欧美精品一区二区三区蜜桃视频| 91精品国产成人www| 国产suv精品一区二区三区88区| re久久精品视频| 亚洲美女毛片| 日韩在线第二页| 久久一区中文字幕| 无码人妻aⅴ一区二区三区| 欧美经典影片视频网站| 国产午夜精品一区二区理论影院| 欧美一级大片在线视频| 日本一区二区三区久久久久久久久不| 国产91在线亚洲| 日韩av免费在线看| 综合色就爱涩涩涩综合婷婷| 午夜精品一区二区三区在线视| 国产精品美女久久久久av超清| 亚洲精品成人久久久| 国产又黄又爽又色| 亚洲欧美在线不卡| 国产色视频在线播放| 99精品国自产在线| 欧美性生交xxxxx久久久| 色老板在线视频| 精品国产一区二区三区麻豆免费观看完整版| 欧美猛男做受videos| 亚洲午夜精品久久久久久浪潮| 亚洲天堂av线| 亚洲精品欧美二区三区中文字幕| 欧美日韩亚洲一区二区三区| 欧美日韩视频在线一区二区观看视频| 1插菊花综合| 久久精品女人天堂| gogogo影视剧免费观看在线观看| 婷婷激情五月综合| 亚洲www啪成人一区二区麻豆| 欧美人与性动交α欧美精品| 欧美综合在线播放| 在线www天堂网在线| 97超碰国产在线| 成人欧美一区二区三区黑人| 日本va中文字幕| 欧美极品少妇xxxxⅹ免费视频| 国产在线视频你懂| 亚洲国产日韩欧美在线动漫| 国产第一页在线视频| 欧美插天视频在线播放| 黄色影院在线播放| 手机看片福利在线观看| 欧美成人高清电影在线| 久久精品理论片| 国产精品美日韩| 国产视频手机在线| 国产xxxxxx久色视频在| 亚洲ⅴ国产v天堂a无码二区| 红桃一区二区三区| 国产精品99久久久久久有的能看| 最新天堂资源在线| 91视频成人免费| 女人18毛片水真多18精品| 91在线视频18| 色综合久久久久综合一本到桃花网| 亚洲国产欧美91| 爱爱爱爱免费视频| 色偷偷噜噜噜亚洲男人| 久久免费少妇高潮久久精品99| 免费观看成年人视频| 日韩欧美精品免费| 国产区精品区| 国产精品私人自拍| aa在线免费观看| 在线视频尤物| 久久久久久九九九九九| 黄页视频在线91| 插我舔内射18免费视频| 免费观看h片| 亚洲精品国产系列| www.com.av| 天天操天天是| 美女国产一区二区| 欧美日韩一区二区三区不卡视频| 欧美在线一二三| 亚洲人成电影院在线观看| 亚欧精品在线| 日韩精品免费一区二区在线观看| 久草精品在线观看| 黄毛片在线观看| 欧美理论电影在线精品| 奇米亚洲午夜久久精品| 国产91丝袜在线播放0| 国产精品久久久久久久午夜片| 精品福利二区三区| 中文字幕亚洲无线码在线一区| 重囗味另类老妇506070| 国产一级免费| 国产在线精品国自产拍免费| 国产精品试看| 日韩福利电影在线观看| 国产一区二区三区站长工具| 91捆绑美女网站| 91精品二区| 99热这里只有精品66| 91亚洲精华国产精华| 久久久久在线| 日本少妇一区二区| 久久久精品国产sm调教网站| 综合久久99| 三上悠亚作品在线观看| 东方伊人免费在线观看| 色综合天天综合狠狠| 美女av在线免费看| 久久精品人成| 四虎8848精品成人免费网站| 国产精品v日韩精品v欧美精品网站| 日韩欧美在线视频观看| 在线观看av中文| 国产美女三级无套内谢| 国产一级淫片免费| 日本中文字幕在线视频| 可以免费看黄色的网站| 日本三级亚洲精品| 搞黄视频在线观看| 日韩精品极品视频在线观看免费| 色视频线观看在线播放| 国产精品久久久久久人| 国产精品久久久久久久久免费樱桃| 日韩高清免费在线| 国产在线超碰| 视频一区二区三区入口| 韩曰欧美视频免费观看| 97视频免费在线观看| 欧美日韩精选| 欧美日韩在线视频免费观看| 这里视频有精品| 久视频在线观看| 欧美成人亚洲成人日韩成人| 欧美做爰爽爽爽爽爽爽| 亚洲国产精品精华素| 成人久久网站| 久久91精品久久久久久秒播| 精灵使的剑舞无删减版在线观看| 日本视频在线免费| 一女二男一黄一片| 男女啊啊啊视频| 97avcom| 女同另类激情重口| 美女网站视频在线观看| 免费观看欧美成人禁片| 国产精欧美一区二区三区白种人| 久久久噜噜噜久久| 国产黄色片免费看| 九色视频网站入口| 国产制服91一区二区三区制服| 不卡一区综合视频| 国产精品一区二区6| 国产午夜精品一区| 久久久精品综合| 五月精品在线| 99久久久无码国产精品性波多| 在线激情网站| 国产精品视频男人的天堂| 日本中文字幕久久看| 欧美人成免费网站| 亚洲综合影院| 999成人网| 精品一级视频| 国产成人久久精品77777最新版本|