文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

怎么在HTML5中使用WebGL实现一个垃圾分类系统

2023-06-09 21:05

关注

怎么在HTML5中使用WebGL实现一个垃圾分类系统?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

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.graph4d.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()    }  })}
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     // 深度浮点偏差补足})

看完上述内容,你们掌握怎么在HTML5中使用WebGL实现一个垃圾分类系统的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网行业资讯频道,感谢各位的阅读!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯