打造最美HTML5 3D机房 —— 第二季重磅回归

本文延续前文,介绍如何使用HTML5和WebGL创建3D机房的高级功能,包括机柜标签的透明文字渲染、机柜门的动画、复杂电信设备的展示、线缆与走线架的模拟,以及路径规划与人物模型加载。
摘要由CSDN通过智能技术生成

前情提要

前阵子写了一篇打造最美html5 3d机房,介绍了如何用html5在网页上创建无插件的精美3d机房场景。这两个月以来,陆续收到很多朋友的鼓(膝)励(盖),受宠若惊之余,对索要源代码的朋友都已经尽力邮件回复。由于精力所限,未能收到的朋友请留言或给我发送邮件:tw-service@servasoft.com。最近项目第二期又要紧锣密鼓地开始了,所以想抓紧把一些新增的内容补充上,进一步完善这个html5 3d机房的呈现效果。

上一篇中主要介绍的是如何从最基础的webgl封装到创建3d物体对象,再通过3d物体对象“搭积木”式的组建整个3d机房场景。这一篇主要介绍一些如何在这个场景上进一步丰富更多的功能和呈现效果,以及实现这些功能在技术上的思路。

首先我们来看看第一季已经实现的纯天然无添加无PS的HTML5 3D机房效果:
这里写图片描述

已经拿到过代码的朋友应该知道,这一场景是通过一个json文件进行组装和加载,可以很方便地进行修改和维护。在此基础上,这一次我又增加了机柜标签、机柜门、复杂设备、机房走线、人员轨迹等效果,下面我就把第二季的干货一一为大家奉上。

机柜标签

机房中最重要的物理资源——机柜——是机房管理、规划、监控人员最关注的对象之一。对于规模在几十个、上百个甚至上千个机柜的机房,每个机柜必然会进行资产编号,方便检索和管理。这个在多数资产管理系统中,都是最基本的。但是在3d场景中,如何显示这些机柜编号,才能让用户更直观的看到每个机柜的位置呢?

传统的方式是用标签显示资产编号,例如可以用“告警冒泡”那样的方式显示一个文字气泡。不过当机柜产生告警时,两个气泡会有所冲突。而且过多的气泡会产生相互遮挡覆盖,有点混乱,比如像这样:
这里写图片描述

因此我尝试了一种不同的思路:把文字渲染到一个内存图片,“溶解”到机柜的上方贴图中。

想要生成一个内存的图片文字,可以通过下面的函数实现:

    generateAssetImage: function(text){         
        var width=512, height=256;

        var canvas = document.createElement('canvas');
        canvas.width  = width;
        canvas.height = height;

        var ctx = canvas.getContext('2d');      
        ctx.fillStyle='white';
        ctx.fillRect(0,0,width,height);

        ctx.font = 150+'px "Microsoft Yahei" bold';
        ctx.fillStyle = 'black';
        ctx.textAlign = 'center';
        ctx.textBaseline = 'middle';
        ctx.fillText(text, width/2,height/2);
        ctx.strokeStyle='black';
        ctx.lineWidth=15;
        ctx.strokeText(text, width/2,height/2);

        return canvas;   
    }

需要留意的是:

  1. 生成的图片宽高数值最好是2的幂,例如128、256、512等,这样在3d中渲染不容易出现闪烁和锯齿。相关原理请查阅google。
  2. 文字绘制尽量居中、充满整个图,不要太小,否则看上去比较奇怪。
  3. 空白处保持透明,不必填充色,方便和机柜本身贴图的“溶解”。
  4. 直接返回canvas对象即可,不必生成图片点阵数组。

生成canvas后,可以这样直接贴图使用:


                
  • 13
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 53
    评论
评论 53
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值