基于 HTML5 WebGL 实现的医疗物流系统

来源:脚本之家  责任编辑:小易  

其实三者是有联系的canvas是html5新定义的一个标签webgl要依赖canvas运行

前言

物联网( IoT ),简单的理解就是物体之间通过互联网进行链接。世界上的万事万物,都可以通过数据的改变进行智能化管理。IoT 的兴起在医疗行业中具有拯救生命的潜在作用。

调用webgl的方法是canvasObject.getContext("webgl&quo

不断的收集用户信息并且实时的进行诊断,所以未来  IoT 肯定在医疗行业的应用会呈覆盖性。下面是我最近做的一个医疗物流系统,用来观察医疗物流过程。

scene.remove(mesh);

ht官网链接:http://www.hightopo.com/cn-index.html

首先可以明确的是,房产登记在孩子名下,父母无权随意处置。父母或因夫妻感情问题,或为孩子将来着想,或担心将来遗产税,登记在孩子名下的购房行为屡见不鲜。不少父母认为,作为孩子的监护人,孩子的财产也是自己的,如果父母有需要,当然可以自行处置,但实际上并非如此。我国《民法通则》明确规定,除为了被监护人利益外,不得处理被监护人的财产。那么应如何证明“为了孩子利益”呢?一般情况下,房管部门要求采取由父母双方共同到场,以声明保证的方式说明是为孩子的利益处理该房产。有些时候可能会要求由街道、居委会等出具相关证明材料,也可以采取公证的办法,证明确实是为孩子的利益处理财产。同理,在用未成年子女名下的房屋作抵押贷款

demo链接: https://www.hightopo.com/demo/pivas/

每个行业有每个行业的赚钱门道,既然这么多人在摆地摊回收旧手机,肯定有利可图。回收旧手机,赚钱的门路有以下几个:一、手机翻新。很多人手机更新换代快,七八成新的手机就换代了,这样的手机翻新一下,刷个机之后又在市场上流通了。再次售卖的价格可比当初收旧手机的时候贵了不止3倍。二、拆零部件卖。直接把手机拆了,单独把零部件拿出去卖。“手机内件里包含多种有价值的材料,手机的各部件——电路板、液晶显示屏、电池、摄像头、振动组件、麦克风、扬声器、外壳等,总质量的30%—40%为各类贵金属材料,如金、银、钯等。而电路板中的贵金属含量,甚至比其他电子废物都高。包括0.01%的黄金,20%~25%的铜,40%~50%

 

其实大多数情况下,还是品牌附加价值的原因。在同样都是保证纯酿酿造的基础上(这个是一切的基础),白酒的口感和风味不会有太大的偏差。而对白酒的口感区分,需要长期和大量的饮酒后,才能有所心得。而我们所说的好的酒,除了价格因素外,可能会在品牌文化、产品故事以及包装设计,甚至勾调技艺上有所讲究。毕竟白酒的饮用更多的是一种心理上的体会,带着很强的个人情感因素,这是白酒的社交功能所致。对于个人来说,选择纯酿酒,并且找到合适自己消费水平定位的产品就可以了。

实现过程

有质感的皮裙是冬天姑娘们的最佳选择,不过说实话皮裙春夏穿还真有点热,冬天穿就显得尤为合适了,搭配毛衣或者大衣,都能穿的很有型哦。杨幂穿衣搭配技巧示范毛衣配皮裙怎么穿都有型毛衣+皮裙杨幂出席电影《我是证人》首映记者会。她身穿黑色金属配饰毛衣,下配曲别针配饰皮裙,脚踩红色丝绒尖头鞋。杨幂估计是最喜欢穿短裙的女明星了,当然冬天也不会错过一展大长腿的好机会,毛衣配短款皮裙不仅显腿长,这种搭配也非常的显年轻哦。【搭配Tips】Tips:V领毛衣+皮裙有质感的皮裙是冬天姑娘们的最佳选择,这条裙子春夏穿就有点热,但是冬天穿绝对非常合适,搭配毛衣或者大衣,都能穿的很有型。如果你是sexy范儿,可以尝试V领配皮

增加光源

 整个原场景其实是非常暗的,所以需要使用灯光的效果照亮整个场景,使其接近真实世界的场景。

 我们看下对比。

light 的一些属性:

type 代表灯光的类型

color 代表灯光的颜色

intensity 代表灯光的强度(1是最大值)

range 代表范围

addLight() { const skyBox = this.dm.getDataByTag('skyBox') // 限制视野在天空球之内 this.gv.setSkyBox(skyBox) const light = new ht.Light() const lightSource = this.dm.getDataByTag('sunlight').p3() const config = { 'light.type': 'point', 'light.color': 'white', 'light.intensity': 0.3, 'light.range': 10000 } light.s(config) light.p3(lightSource)this.dm.add(light) }

 

看向物体

 看到左下角的一个小窗口,其实是另一个3d场景,把它定位到左下角的,两个场景都使用了反序列化( deserialize )。

 因为要定位医疗箱移动,所以这里使用到了 flyTo 方法 。

var renderCanvas = function (medical, duration) { ht.Default.startAnim({ duration, easing(v, t) { return t }, action(v, t) { outScreenG3d.flyTo(medical, { direction: [-5, 3, 5], distance: 300 }) } }) }

 

封装动画

如果要实现这么多的动画,首先想到的是一个个物体进行移动的过程。医疗箱的行走、电梯的升降、传送带运送医疗箱等我们都可以对它们的动作进行封装。

如图可以看到医疗箱总是在动,所以定义了一个行走的动画,每次医疗箱行走的距离、行走方向、动画的配置都进行传参。

这里要说明的参数:

1.node(对应的元素)

2.fn(动画执行完进行回调的函数)

3.config(动画配置)

4.coord(方向轴)

// 行走动画 walkAnim(node, fn, config, coord) {   const { duration, space } = config   const positionArray = node.p3()   let isShadow = false   let ShadowNode = null // 如果移动的元素是icu车或者供应车的话 获取它的阴影跟随元素移动 if (node.getTag() === 'supply' || node.getTag() === 'icuCar') {   isShadow = true   ShadowNode = this.dm.getDataByTag(`${node.getTag()}Shadow`) } ht.Default.startAnim({   duration,   easing: function (t) {   return t }, action(v, t) {   if (coord === 'x') {   node.p3(positionArray[0] + t * space, positionArray[1], positionArray[2])   isShadow && ShadowNode.p3(positionArray[0] + t * space, positionArray[1], positionArray[2])   } else if (coord === 'y') {   node.p3(positionArray[0], positionArray[1] + t * space, positionArray[2])   isShadow && ShadowNode.p3(positionArray[0], positionArray[1] + t * space, positionArray[2]) } else {   node.p3(positionArray[0], positionArray[1], positionArray[2] + t * space)   isShadow && ShadowNode.p3(positionArray[0], positionArray[1], positionArray[2] + t * space) } }, finishFunc() { typeof fn === 'function' && fn(node) } }) }

物体之间的影响

电梯的升降会影响很多东西,比如频台的移动会带着传送带和医疗箱,这里我用到了 sethost 吸附方法(吸附:节点指定宿主,宿主进行改变会影响节点)。

很多场景下非常合适,我需要电梯升降的过程中带用医疗箱和频台一起上升,还有医疗箱放到传送带的时候,医疗箱要动起来,感觉是这真的传送带在带动医疗箱进行运动。

这里要说明的参数:

1.node(操作的电梯元素)

2.medicalKit(医疗箱)

3.fn(动画执行完进行回调的函数)

4.status (电梯上升和下降的状态)

5.config(动画配置)

 

// 电梯升降动画 elevatorAnim(node, medicalKit, fn, status, config) { const self = this // 获取电梯的index 让对应的频台也跟着动 const elevatorIndex = node.getTag().replace(/[^0-9]/ig, '') - 0 // 获取医疗箱的index 控制电梯升降的距离 const medicalKitIndex = medicalKit.getTag().replace(/[^0-9]/ig, '') - 0 const positionArray = node.p3() const station = self.dm.getDataByTag(`station${elevatorIndex}`) //吸附宿主 station.setHost(node) medicalKit.setHost(node) // 设置升降状态 if (elevatorIndex === 3) self.elevatorRunning = true // 升降距离 status 为 0 的时候是下降 最低部位的距离是固定的 所以只需要控制上升的距离 const medicalKitLevel = self.returnMedicalKitLevel(medicalKitIndex) // 电梯的属性 // 最低点的位置 Lowest // 如果有轨道的话 就去轨道的位置 否则就按照层数 orbitalP // 第一层的位置 distance let space const addSpace = medicalKitIndex === 7 ? 100 : 0 if (status == 1) { space = config.orbitalP ? config.orbitalP : config.distance + addSpace + (400 * medicalKitLevel) } else { space = config.Lowest } // 下降状态时 医疗箱不会做动作 if (status === 0) { medicalKit.setHost() } return ht.Default.startAnim({ duration: config.orbitalP ? 2000 : (medicalKitLevel === 0 && elevatorIndex == 3 ? 700 : 2500 + (medicalKitLevel * 1000)), action(v, t) { node.p3( positionArray[0], positionArray[1] + ((space - positionArray[1]) * t), positionArray[2] ) }, finishFunc() { station.setHost() typeof fn === 'function' && fn(node) } }) }

 

动画方法

 动画的过程中有个问题需要处理就是等待电梯的动画,医疗箱在动画过程中,需要判断电梯是否在上升,如果不在地面的话,需要等待。

 我的思路是,当医疗箱走到离电梯一点距离的时候,需要判断电梯是否在上升状态,如果是的话,需要调用动画暂停的方法。

 当 elevatorRunning 为 false 的时候代表电梯没有运动,否则在运动中。

 电梯动画开始的时候设置为 true,结束后设置变量为 false,  就可以监控它的状态了。

 ht.Default.startAnim 方法返回一个实例,利用 action 方法, 实现轮询监听动画状态,然后进行操作。

 当 elevatorRunning 为 true 的话, 使用 anim.pause() 暂停当前动画。

 当 elevatorRunning 为 false 的话, 使用 anim.resume() 继续当前动画。

const anim = ht.Default.startAnim({   duration,   action(v, t) {     node.p3(     positionArray[0],     positionArray[1],     positionArray[2] - (tpMax - positionArray[2]) * t   );   if (index > 1 && self.elevatorRunning === true) {   if (node.p3()[2] <= stopMax) {     anim.pause();     const t = setInterval(() => {       if (self.elevatorRunning === false) {       anim.resume();       clearInterval(t);     }     }, 100);     }    } }, finishFunc() {   typeof fn === "function" && fn(); } });

 

事件监听(发布、订阅)

 因为需要监听某个当前动画的结束,然后进行相机位移。

 如图,我需要监听第一个 3d 场景中显示提示文字动画结束,然后执行第二个 3d 场景的显示。因为2个是不同的场景,是不能用回调的方法监听到的,所以这里就用到了 eventBus 事件总线。

 下面是 eventBus 的使用,第一个参数代表要监听的注册函数名,第二个是回调函数。

// 事件总线 监听事件 eventbus.on('animation1', _ => { const medical = dm.getDataByTag('medicalKit1') renderView(medical, dm, gv) })

 

下面是 eventBus 发射的使用,第一个参数代表要触发的函数名,第二个是发射给函数的参数。

// 触发事件 eventbus.emit("animation1", null);

总结

 做完这个 demo 之后,除了对 HT for Web 更加熟练之外,对物联网也有了更深刻的概念。

 我身为一名前端工作者,在这个时代感觉非常的自豪,因为我能通过自己的技能创造出许多能造福和改善人们生活的东西。

 希望大家看到我的 demo 能够得到一些启发,同时也要相信自己能够创造不可能,为社会做出贡献。

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

HTML5 和 WebGL 技术可用于三维可视化开发吗?

1、首先答案是肯定的,html5和webgl技术可以用于三维可视化开发。

2、但是你需要考虑到不是所有浏览器都支持h5和webgl技术的。

3、然后你还需要考虑性能方面的消耗。使用体验等。

4、都考虑清楚了就可以动手开发了。希望对你有帮助。

Flash中HTML5 Canvas和WebGL的发布设置怎么调整?

在Flash Pro中,我们可以使用传统的Flash时间轴、工作区及工具来创建Flash文档,从而快速生成网页(HTML)内容。WebGL可以通过HTML脚本本身实现Web交互式三维动画的制作,无需任何浏览器插件支持。二者的区别在于,HTML5是用于描述网页文档的一种标记语言,而WebGL是一种3D绘图标准。具体的你还可以去百度搜索一下秒秒学,里面的Flash的HTML5开发教程,就有教如何预设文档和发布选项以便生成网页(HTML5)和WebGL输出。

求JS代码:如果浏览器不支持HTML5(WebGL) 就跳转到另外一个HTML页面

<script type="text/javascript">

    window.onload = function() {

        if (!window.applicationCache)

            window.location.href = "http://www.baidu.com/";

        else

            window.location.href = "http://google.com.hk/";

    }

</script>本回答被提问者采纳

如何使用HTML5和webgl在网页上绘制一个点

   //顶点着色器源码

       var vertexShaderSource = '' +

          'void main(){' +

           //给内置变量gl_PointSize赋值像素大小

           '   gl_PointSize=20.0;' +

          //顶点位置,位于坐标原点

           '   gl_Position =vec4(0.0,0.0,0.0,1.0);' +

           '}';

      //片元着色器源码

      var fragShaderSource = '' +

         'void main(){' +

        //定义片元颜色

          '   gl_FragColor = vec4(1.0,0.0,0.0,1.0);' +

           '}';

代码60多行就不贴了,具体完整源码,你可以百度“郭隆邦技术博客”,查看WebGL教程里面有一节

html5 canvas和webgl和three.js有什么区别?

其实三者是有联系的,canvas是html5新定义的一个标签,webgl要依赖canvas运行,而three.js是webgl的一个库。

  • 本文相关:
  • 基于 html5 webgl 实现的垃圾分类系统
  • html5 webgl 实现民航客机飞行监控系统
  • 基于 html5 的 webgl 3d 版俄罗斯方块的示例代码
  • HTML5 和 WebGL 技术可用于三维可视化开发吗?
  • Flash中HTML5 Canvas和WebGL的发布设置怎么调整?
  • 求JS代码:如果浏览器不支持HTML5(WebGL) 就跳转到另外一个HTML页面
  • 如何使用HTML5和webgl在网页上绘制一个点
  • html5 canvas和webgl和three.js有什么区别?
  • html5 canvas和webgl和three.js有什么区别
  • html5的3d模式,如何把webGL改成canvas模式
  • 谁用过HTML5和WEBGL来绘制3D图形
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved