HTML5的垃圾分類系統(tǒng)代碼實(shí)現(xiàn)

這篇文章主要介紹“HTML5的垃圾分類系統(tǒng)代碼實(shí)現(xiàn)”,在日常操作中,相信很多人在HTML5的垃圾分類系統(tǒng)代碼實(shí)現(xiàn)問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”HTML5的垃圾分類系統(tǒng)代碼實(shí)現(xiàn)”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

站在用戶的角度思考問題,與客戶深入溝通,找到北流網(wǎng)站設(shè)計(jì)與北流網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都做網(wǎng)站、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、申請域名、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋北流地區(qū)。

代碼實(shí)現(xiàn)

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

首先,我應(yīng)用已經(jīng)精心布置好的 3D 場景,為了有更好的操作體驗(yàn)感,我們要從它的基本設(shè)置開始:

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

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

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}) // 恢復(fù)視角
    }
    else if (kind === 'doubleClickData') { // 雙擊模型
        gv.flyTo(data, {animation : {duration : 500}, distance : 800}) // 拉近視角
    }
})

HTML5的垃圾分類系統(tǒng)代碼實(shí)現(xiàn)

好了,準(zhǔn)備工作做好了,下面來實(shí)現(xiàn)動(dòng)畫部分,除了了解 垃圾分類 的方式外我還參考了網(wǎng)上很多機(jī)械臂的視頻,學(xué)習(xí)它的運(yùn)動(dòng)模式和動(dòng)作細(xì)節(jié),對每個(gè)結(jié)構(gòu)和部位的動(dòng)畫進(jìn)行步驟的排序和構(gòu)思。這里我挑選幾處動(dòng)畫的實(shí)現(xiàn)方式來展示:

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()
    }
  })
}

HTML5的垃圾分類系統(tǒng)代碼實(shí)現(xiàn)

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

HTML5的垃圾分類系統(tǒng)代碼實(shí)現(xiàn)HTML5的垃圾分類系統(tǒng)代碼實(shí)現(xiàn)

這里面的拾取垃圾步驟還應(yīng)用了我過去介紹過的 吸附 功能,這個(gè)方法非常的適合抓取物體的動(dòng)作,通過 setHost 使節(jié)點(diǎn)吸附于宿主,這樣就相當(dāng)于子節(jié)點(diǎn)跟隨父節(jié)點(diǎn)移動(dòng),此時(shí)只需要對機(jī)械臂進(jìn)行偏移和旋轉(zhuǎn)的操作,垃圾便會隨之一起運(yùn)動(dòng)了,大大減少了工作量!

HTML5的垃圾分類系統(tǒng)代碼實(shí)現(xiàn)

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

最后我們就把陰影的細(xì)節(jié)做下調(diào)整,達(dá)到比較好的效果:

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

到此,關(guān)于“HTML5的垃圾分類系統(tǒng)代碼實(shí)現(xiàn)”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

當(dāng)前標(biāo)題:HTML5的垃圾分類系統(tǒng)代碼實(shí)現(xiàn)
URL地址:http://muchs.cn/article42/pdhohc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊商城網(wǎng)站、靜態(tài)網(wǎng)站移動(dòng)網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、用戶體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)