加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

基于 HTML5 WebGL 实现的垃圾分类体系

发布时间:2020-05-11 21:18:06 所属栏目:编程 来源:站长网
导读:副问题#e# 垃圾分类,一样平常是指按必然划定或尺度将垃圾分类储存、分类投放和分类搬运,从而转酿成民众资源的一系列勾当的总称。分类的目标是进步垃圾的资源代价和经济代价,力图物尽其用。垃圾在分类储存阶段属于公家的私有品,垃圾经公家分类投放后成为公家
副问题[/!--empirenews.page--]

垃圾分类,一样平常是指按必然划定或尺度将垃圾分类储存、分类投放和分类搬运,从而转酿成民众资源的一系列勾当的总称。分类的目标是进步垃圾的资源代价和经济代价,力图物尽其用。垃圾在分类储存阶段属于公家的私有品,垃圾经公家分类投放后成为公家地址小区或社区的地区性准民众资源,垃圾分类搬运到垃圾齐集点或转运站后成为没有解除性的民众资源。从海表里各都市对糊口垃圾分类的要领来看,大抵都是按照垃圾的因素、发生量,团结当地垃圾的资源操作和处理赏罚方法来举办分类的。到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()     }   }) }

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读