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

首頁 > 開發 > HTML5 > 正文

基于 HTML5 WebGL 實現的垃圾分類系統

2024-09-05 07:19:30
字體:
來源:轉載
供稿:網友

前言

垃圾分類,一般是指按一定規定或標準將垃圾分類儲存、分類投放和分類搬運,從而轉變成公共資源的一系列活動的總稱。分類的目的是提高垃圾的資源價值和經濟價值,力爭物盡其用。垃圾在分類儲存階段屬于公眾的私有品,垃圾經公眾分類投放后成為公眾所在小區或社區的區域性準公共資源,垃圾分類搬運到垃圾集中點或轉運站后成為沒有排除性的公共資源。從國內外各城市對生活垃圾分類的方法來看,大致都是根據垃圾的成分、產生量,結合本地垃圾的資源利用和處理方式來進行分類的。到2019年6月25日,生活垃圾分類制度將入法。一套應用于工業物聯網的智能一體化的垃圾分類機械臂將隨之而來,由此,我應用 HT for Web  的圖型化編輯工具打造了一款形象生動的例子:Garbage classification,也借此機會與大家一起分享和學習。

代碼實現

(注:gif 的上傳大小有限,實際效果與還請參考 demo 鏈接)

首先,我應用已經精心布置好的 3D 場景,為了有更好的操作體驗感,我們要從它的基本設置開始:

gv.setMovableFunc(() => { return false }) // 禁止拖動gv.getWireframe = (d) => { d.s('wf.visible', false) }  // 隱藏選中邊框gv.setEye([583, -212, -789]) // 設置眼睛gv.setCenter([-76, -654, -133]) // 設置中心點gv.setFar(100000) // 設置遠端位置gv.setNear(10) // 設置近端位置gv.setInteractors([ new ht.graph3d.MapInteractor(gv) ]) // 設置交互限制gv.setSkyBox(dm.getDataByTag('skyBox')) // 設置天空球window.document.oncontextmenu = () => { return false } // 全局設置右鍵菜單禁用gv.scene = { // 復制初始位置    eye: ht.Default.clone(gv.getEye()),    center: ht.Default.clone(gv.getCenter()),    far: ht.Default.clone(gv.getFar()),    near: ht.Default.clone(gv.getNear()),}

 

我復制了一下整個場景的初始視角情況方便我做稍后的處理,我監聽了部分鼠標事件來形成自己的操作風格(比如雙擊背景還原視角以及雙擊模型拉近視角):

gv.mi(e => {    let data = e.data    let kind = e.kind    if (kind === 'doubleClickBackground') { // 雙擊背景        gv.moveCamera(this.gv.scene.eye, this.gv.scene.center, {duration : 1000}) // 恢復視角    }    else if (kind === 'doubleClickData') { // 雙擊模型        gv.flyTo(data, {animation : {duration : 500}, distance : 800}) // 拉近視角    }})

 

好了,準備工作做好了,下面來實現動畫部分,除了了解 垃圾分類 的方式外我還參考了網上很多機械臂的視頻,學習它的運動模式和動作細節,對每個結構和部位的動畫進行步驟的排序和構思。這里我挑選幾處動畫的實現方式來展示:

 

function mechanicalArmAnim1() {  ht.Default.startAnim({    duration: 1000,    easing: (t) => { return t },    action: (v, t) => {      postbrachium.r3(degrees(0) + (degrees(20) - degrees(0)) * v, postbrachium.r3()[1], postbrachium.r3()[2]) // 后臂向下移    },    finishFunc: () => {      setTimeout(() => {        mechanicalArmAnim2()      }, 300)    }  })}function mechanicalArmAnim2() {  ht.Default.startAnim({    duration: 1000,    easing: (t) => { return t },    action: (v, t) => {      postbrachium.p3(-208 + (-184 + 208) * v, postbrachium.p3()[1], postbrachium.p3()[2]) // 后臂前伸      hydraulicRod1.r3(degrees(0) + (degrees(8) - degrees(0)) * v, hydraulicRod1.r3()[1], hydraulicRod1.r3()[2]) // 液壓桿1傾斜      extensionRod1.r3(degrees(0) + (degrees(8) - degrees(0)) * v, extensionRod1.r3()[1], extensionRod1.r3()[2]) // 伸長桿1傾斜      extensionRod1.p3(-169 + (-185 + 169) * v, -516 + (-511 + 516) * v, extensionRod1.p3()[2]) // 伸長桿1伸長      hydraulicRod2.r3(degrees(0) + (degrees(-8) - degrees(0)) * v, hydraulicRod2.r3()[1], hydraulicRod2.r3()[2]) // 液壓桿2傾斜      extensionRod2.r3(degrees(0) + (degrees(-8) - degrees(0)) * v, extensionRod2.r3()[1], extensionRod2.r3()[2]) // 伸長桿2傾斜      extensionRod2.p3(-169 + (-185 + 169) * v, -516 + (-511 + 516) * v, extensionRod2.p3()[2]) // 伸長桿2伸長    },    finishFunc: () => {      setTimeout(() => {        mechanicalArmAnim3()      }, 300)    }  })}function mechanicalArmAnim3() {  let oldValue = antebrachium.r3()[0]  ht.Default.startAnim({    duration: 1000,    easing: (t) => { return t },    action: (v, t) => {      hydraulicRod1.r3(degrees(8) + (degrees(7) - degrees(8)) * v, hydraulicRod1.r3()[1], hydraulicRod1.r3()[2]) // 液壓桿1傾斜      extensionRod1.r3(degrees(8) + (degrees(7) - degrees(8)) * v, extensionRod1.r3()[1], extensionRod1.r3()[2]) // 伸長桿1傾斜      extensionRod1.p3(-185 + (-186 + 185) * v, -511 + (-507 + 511) * v, extensionRod1.p3()[2]) // 伸長桿1伸長      hydraulicRod2.r3(degrees(-8) + (degrees(-7) - degrees(-8)) * v, hydraulicRod2.r3()[1], hydraulicRod2.r3()[2]) // 液壓桿2傾斜      extensionRod2.r3(degrees(-8) + (degrees(-7) - degrees(-8)) * v, extensionRod2.r3()[1], extensionRod2.r3()[2]) // 伸長桿2傾斜      extensionRod2.p3(-185 + (-186 + 185) * v, -511 + (-507 + 511) * v, extensionRod2.p3()[2]) // 伸長桿2伸長      postbrachium.r3(degrees(20) + (degrees(25) - degrees(20)) * v, postbrachium.r3()[1], postbrachium.r3()[2]) // 后臂向下移      antebrachium.r3(oldValue + (degrees(-40) - oldValue) * v, antebrachium.r3()[1], antebrachium.r3()[2]) // 前臂向下移      claw1.r3(degrees(-20) + (degrees(-60) - degrees(-20)) * v, claw1.r3()[1], claw1.r3()[2]) // 上爪抓取      claw2.r3(degrees(-60) + (degrees(-30) - degrees(-60)) * v, claw2.r3()[1], claw2.r3()[2]) // 下爪抓取    },    finishFunc: () => {      mechanicalArmAnim4()    }  })}

 

這一段動畫是機械臂從初始化狀態到向下抓取的一個過程,我將每段動畫分成函數來寫比較方便后續管理,每一處也代表了一個步驟。這其中最復雜且細微的步驟要數液壓桿的運動了,為了讓動畫看起來更加真實,我除了將手臂單獨運動的過程中加入了延時執行下一段動畫以體現機器運動的特點外,也把液壓桿的部分也做了動畫,如果不做處理,那么機械臂在上下移動的時候就會有不科學的效果出現。動畫函數 在這種 demo 中應用的最廣,而且里面也包含了一些緩動函數,有興趣的博友們可以 點此處 自己親自動手玩一玩~

這里面的拾取垃圾步驟還應用了我過去介紹過的 吸附 功能,這個方法非常的適合抓取物體的動作,通過 setHost 使節點吸附于宿主,這樣就相當于子節點跟隨父節點移動,此時只需要對機械臂進行偏移和旋轉的操作,垃圾便會隨之一起運動了,大大減少了工作量!

還有一部分更酷的屬性設置給大家展示一下,可以讓 3D 場景整體有更真實的陰影處理效果。首先我們要注意將無關的節點陰影通過 node.s('shadow.cast', false) 關閉,比如編組用的box,背景,地板和面板等。

最后我們就把陰影的細節做下調整,達到比較好的效果:

 

gv.enableShadow(true, {  degreeX : 0,       // 投影 x 軸角度  degreeZ : -25,      // 投影 z 軸角度  intensity : 0.3,    // 陰影強度, 1 為黑色  quality : 'high',  // low / medium / high / ultra / 4096數值, 質量  type : 'soft',     // none / hard / soft  radius : 0.2,      // type 為 hard / soft 時,補充的邊緣厚度,用來提供更柔和的邊緣  bias : -0.003     // 深度浮點偏差補足})

總結

更多動畫 demo 以及工業化領域的文章請繼續關注我的博客,感謝大家的支持!

醫療站(https://www.cnblogs.com/htdaydayup/p/11558748.html)

在工業物聯網從嬰兒走到青年的成熟道路上,一定會有更多的潛力和挑戰在等著我們,等待我們去開發,等待我們去創造!相信我們的技術成為國際水準會指日可待!同時在十一國慶后的第一個工作日祝大家精神飽滿,工作順利!

總結

以上所述是小編給大家介紹的基于 HTML5 WebGL 實現的垃圾分類系統,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美性少妇18aaaa视频| 亚洲精品一区在线观看香蕉| 久久久久久亚洲| 国产精品日日做人人爱| 精品网站999www| 精品视频在线观看日韩| 亚洲综合日韩在线| 欧美激情国产精品| 精品久久久久久中文字幕一区奶水| 亚洲精品之草原avav久久| 国产精品aaaa| 久久97久久97精品免视看| 久久精品在线播放| 欧美精品www在线观看| 国产成人拍精品视频午夜网站| 日韩极品精品视频免费观看| 欧美小视频在线| 国产精品扒开腿做| 欧美中在线观看| 国产成人欧美在线观看| 成人av.网址在线网站| 亚洲精品欧美日韩| 日韩不卡中文字幕| 综合国产在线视频| 国产成人鲁鲁免费视频a| 日韩美女毛茸茸| 日韩中文字幕网站| 欧美夫妻性生活视频| 成人免费视频网址| 亚洲电影免费观看| 欧美超级免费视 在线| 国产美女直播视频一区| 一本一本久久a久久精品牛牛影视| 国产精品羞羞答答| 国产亚洲精品成人av久久ww| 色哟哟入口国产精品| 日韩电影在线观看中文字幕| 青青精品视频播放| 国产在线视频2019最新视频| 久操成人在线视频| 欧美精品18videosex性欧美| 日韩高清电影好看的电视剧电影| 亚洲综合视频1区| 国产精品永久免费在线| 国产精品对白刺激| 国产欧美在线看| 夜夜嗨av一区二区三区四区| 国产专区欧美专区| 中文字幕在线亚洲| 理论片在线不卡免费观看| 国产日韩欧美综合| 性金发美女69hd大尺寸| 欧美一区二区三区免费视| 国外色69视频在线观看| 欧美疯狂性受xxxxx另类| 亚洲国产另类久久精品| 成人免费观看网址| 色系列之999| 久久久久久久久爱| 亚洲曰本av电影| 欧美电影免费观看| 欧美激情综合色| 正在播放欧美一区| 久久精品亚洲热| 在线观看中文字幕亚洲| 国产精品丝袜久久久久久不卡| 久久久久久久久久久人体| 国模私拍一区二区三区| 黄色一区二区在线观看| 国产精品视频在线观看| 51午夜精品视频| 毛片精品免费在线观看| 日韩精品视频免费专区在线播放| 日韩国产一区三区| 欧美日韩久久久久| 国产精品扒开腿爽爽爽视频| xxxxx成人.com| 成人黄色免费看| 久久久伊人欧美| 日韩在线www| 国产精品久久久久秋霞鲁丝| 欧美猛交免费看| 国产精品国产三级国产aⅴ浪潮| 国产精品老牛影院在线观看| 久久久亚洲网站| 亚洲剧情一区二区| 色哟哟入口国产精品| 2024亚洲男人天堂| 久久久久国产精品一区| 久久久久999| 亚洲人成网站777色婷婷| 国产精品久久久久久久久久新婚| 成人免费网站在线| 久久99久久久久久久噜噜| 国产日韩欧美电影在线观看| 日韩在线观看电影| 国产日本欧美一区| 亚洲毛片在线免费观看| 亚洲999一在线观看www| 欧美日韩成人精品| 亚洲最大福利视频网站| 美女福利视频一区| 久久午夜a级毛片| 国产欧美日韩中文字幕在线| 宅男66日本亚洲欧美视频| 国产精品久久一区| 8050国产精品久久久久久| 久久精品夜夜夜夜夜久久| 精品国产乱码久久久久久虫虫漫画| 亚洲福利小视频| 亚洲成人激情小说| 国产欧美日韩丝袜精品一区| 亚洲欧美日本精品| 国产成人中文字幕| 国产主播欧美精品| 欧美日韩国产在线| 欧美专区在线播放| 久久久精品久久久| 92福利视频午夜1000合集在线观看| 热久久美女精品天天吊色| 久久久久久91香蕉国产| 欧美精品精品精品精品免费| 成人网址在线观看| 日韩经典一区二区三区| 欧美乱人伦中文字幕在线| 精品国产一区二区三区四区在线观看| 亚洲日本中文字幕| 国产精品欧美一区二区三区奶水| 92裸体在线视频网站| 国产一区二区激情| 色偷偷亚洲男人天堂| 欧美性猛交xxx| 视频直播国产精品| 日韩中文字幕在线看| 精品久久久999| www日韩欧美| 久久久久久久久久久av| 美女啪啪无遮挡免费久久网站| 日韩av三级在线观看| 欧美极品少妇xxxxⅹ裸体艺术| 国产成人福利夜色影视| 国产精品自拍偷拍| 精品久久久久久久久久久久久久| 国产大片精品免费永久看nba| 91精品久久久久久久久不口人| 欧美老肥婆性猛交视频| 国产精品私拍pans大尺度在线| 欧美丰满少妇xxxxx| 国产精品亚发布| 亚洲激情免费观看| 国产日韩在线一区| 久久这里只有精品视频首页| 亚洲香蕉成视频在线观看| 91精品国产91久久久久福利| 国产精品直播网红| 91亚洲va在线va天堂va国| 日韩av在线一区| 91在线视频一区| 欧美亚洲国产日韩2020| 久久天堂电影网| 欧美激情xxxxx| 国产亚洲精品日韩| 日韩欧美国产一区二区| 亚洲成色777777女色窝|