canvas教程

无插件纯Web 3D机房,HTML5+WebGL倾力打造(2)

字号+ 作者:H5之家 来源:H5之家 2017-08-07 15:01 我要评论( )

下一步找了个简单的对象,按要求走廊要放一个接待桌。为了简单,我决定就偷懒做一个立方体表示。 {name: 走廊板凳,type: cube,width: 300,height: 50,depth: 100,translate: [350, 0, -500],} 效果如下: 这里偷懒

下一步找了个简单的对象,按要求走廊要放一个接待桌。为了简单,我决定就偷懒做一个立方体表示。

{ name: '走廊板凳', type: 'cube', width: 300, height: 50, depth: 100, translate: [350, 0, -500], }

效果如下:

这里写图片描述

这里偷懒其实是有原因的。在3D里,最重视的就是效率,千万不要放一些很复杂的模型,尤其是这类非业务对象。就像这个桌子,尽管只是个简单的立方体,但只要和整体风格协调一致,再增加一点配色并启动阴影效果后,看着就好多了:

这里写图片描述

墙体

墙体是机房里很重要的一个部分,有好的光照、阴影的效果才能看起来更加逼真。由于墙体是不规则的路径,一段一段去生成还真挺麻烦的,还好引擎支持这种物体,甚至曲线路径都可以。这里只要在json里面定义一组数字的坐标,让这些数字依次连接,组成一个墙体,最后生成3D对象放入场景中就行啦。

json定义如下:

{ name: '主墙体', type: 'path', width: 20, height: 200, translate: [-500, 0, -500], data:[ [0, 0], [1000, 0], [1000, 500], [500, 500], [500, 1000], [0, 1000], [0,0], ], }

注意这里的类型变成了path,data中定义了一个二维坐标数组来描述墙体。由于墙都是从底面开始的,所以只定义它的平面的x、y坐标就行了。看看效果:

这里写图片描述

不过如前文所说,还是需要上色、上阴影,才能有更好的效果。这里我们启用阴影并咨询设计师美眉几个颜色值,加上去后再看下效果:

这里写图片描述

以及一些细节:

这里写图片描述

看着雪白的墙,是不是觉得少了点什么?对,就是门。在3D机房的监控系统里,门禁是很重要的一块,客户要求门应该与实际位置相对应,并且要有开门关门的动画效果。这样,实际的门禁信息采集上来后,就能在界面实时看到门的状态了。

这里,考虑到门如果直接放上去,会被墙盖住;如果比墙厚,又难看不符合实际。还是应该先定义一个门洞立方体,把门所在的位置挖掉:

{ name: '门洞', type: 'cube', width: 195, height: 170, depth: 30, op: '-', translate:[-350,2,500], }

刚好挖在斜坡的位置,这样设备进屋就方便了:

这里写图片描述

不过这门没有一个门框,感觉不太生动。多一个门框会感觉立体感强一些。门框可以是一个比门洞略大的立方体,在挖门洞之前添加:

{ name: '门框', type: 'cube', width: 205, height: 180, depth: 26, translate: [-350, 0, 500], op: '+', }

加上阴影和光线等综合效果后,还不错,挺有档次的。

这里写图片描述

来张全景图看看:

这里写图片描述

接着,只要把门安上去就行了。门的定义比较简单,就是一个薄的立方体。不过为了做到玻璃效果,需要设置透明度,让它看上去更像一个玻璃,再让设计师美眉弄一张好看一点的门的图,贴上去。尽管有了webGL,复杂的建模工作可以省略了,不过设计师美眉的配合仍然很重要。
先做左边的门:

{ name: '左门', type: 'cube', width: 93, height: 165, depth: 2, translate:[-397,4,500], style:{ 'm.transparent': true, 'm.texture.image': 'images/door_left.png', }

上面增加的style主要透明和贴图两项。看看效果:

这里写图片描述

同样的方法,再把右侧门贴上就搞定了。为了增加体验,也是用户的要求,门上面设置了动画:双击可以自动打开,再双击可以直接关闭。动画功能引擎做好了封装,在json中直接指定动画类型就行了。不过要注意左右门的动画旋转方向要相反,要不然一个向里开一个向外开感觉比较怪异。

项目中,窗本身不需要有任何业务属性,但是美观度的要求可一点都不能少。方法和门类似,先放窗框后挖窗体。不过为了有点变化,这里不做窗框了,做一个窗台,方法和道理与门相同。

{ name: '主窗户洞', type: 'cube', width: 420, height: 150, depth: 50, translate: [200, 30, 500], op: '-', },{ name: '主窗户台', type: 'cube', width: 420, height: 10, depth: 40, translate: [200, 30, 510], op: '+', }

定义了一个窗洞(挖掉)、一个窗台(添加)。一个大窗户就做好了:

这里写图片描述

再添加一个略带颜色的透明玻璃。玻璃设置点高光和反射,增加“玻璃”感觉:

{ name: '主窗户玻璃', type: 'cube', width: 420, height: 150, depth: 2, translate: [200, 30, 500], op: '+', style: { 'm.transparent': true, 'm.opacity':0.4, 'm.color':'#58ACFA', }, }

json中玻璃设置了透明度和颜色。这样一个半透明的茶色玻璃就好了:

这里写图片描述

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • Highcharts中文教程之Highcharts扩展功能(插件制作)

    Highcharts中文教程之Highcharts扩展功能(插件制作)

    2017-07-01 16:01

  • kotlin第一个项目的搭建

    kotlin第一个项目的搭建

    2017-06-10 14:06

  • 使用jquery.qrcode生成二维码

    使用jquery.qrcode生成二维码

    2017-06-08 10:01

  • HTML5 canvas圆形气泡动画背景插件

    HTML5 canvas圆形气泡动画背景插件

    2017-06-04 13:00

网友点评
x