前言科技改变生活,科技的发展带来了生活方式的巨大变化。随着通信技术的不断演进,5G技术应运而生,随时随地万物互联的时代已经到来。5G技术不仅带来更快的连接速度和前所未有的用户体验,也为制造业、微电子和集成电路的发展带来巨大机遇和挑战。在5G技术商用实施过程中,5G网络芯片面临低功耗、低时延、高可靠、高精度等技术挑战。本文将以大家熟悉的CPU为例,介绍一个基于HT,使用JavaScript、WebGL和HTML5技术开发的CPU监控系统。在大型数据中心,实时监控CPU温度和利用率具有重要意义。服务器级CPU温度监控,实时了解服务器CPU温度,及时发现能效问题,避免业务延迟和服务器宕机,节约成本。实时监控CPU占用率等,可以实时查看服务器CPU占用情况,合理分配服务器资源。系统预览-PC端-移动端Demo中的场景采用2D和3D相结合的方式构建。移动端左上数据框显示手机陀螺仪数据,只有在移动端开启陀螺仪时才会显示。功能实现——判断页面打开的设备移动互联网时代,手机网站建设和PC网站建设同等重要。与PC端相比,移动端可以随时随地实现浏览、宣传和移动营销,因此HT设计开发的系统很好地兼容了移动端的接入和展示。为了给用户带来更好的体验,Demo使用了Navigator对象的userAgent属性来判断用户请求是来自PC还是移动端,并进行不同的动画处理和数据展示。Navigator对象包含有关浏览器的信息,其userAgent属性声明浏览器用于HTTP请求的User-Agent标头的值。下面分别是Windows端和Android端打印的userAgent信息。对应代码,根据userAgent属性信息,使用正则表达式判断请求是否来自移动端(主要考虑Android和IOS端)。isMobile(){return(/(iPhone|iPad|iPod|iOS|Android)/i.test(navigator.userAgent));}-动画原理本Demo使用HT内置的ht.Default.startAnim函数生成animation,这里的函数支持Frame-Based和Time-Based动画。我正在使用基于时间的方法,其中用户使用持续时间指定动画周期(以毫秒为单位)。easing参数用来让用户通过数学公式来定义函数和控制动画,比如匀速变化,先慢后快等。动作函数的第一个参数v表示easing(t)计算出来的值function,t表示当前动画[0,1]的进度,一般的属性变化都是根据v参数进行的。finishFunc参数表示动画结束后的动作。本例startAnim函数采用如下JSON参数结构:ht.Default.startAnim({duration:500,//动画循环缓动毫秒数:function(t){},//动画缓动函数action:function(v,t){...}//动画过程中属性发生变化finishFunc:function(){}//动画结束后调用的函数});-旋转180度,视角升高3D场景下的视角为由眼睛(相机位置)和中心(目标位置)确定,因此视角的变化可以改变这两个参数。本Demo使用HT内置的moveCamera方法实现。动画使用圆的参数方程计算出眼睛的x和z值,完成了180度的旋转。旋转过程中半径和角度都随t变化,角度变化范围为[-Math.PI/2,Math.PI/2]by(t–0.5)*Math.PI。圆的参数方程如下:在旋转过程中,y值也随着t变化,完成了3D场景视角的提升。finishFunc参数用于定义动画结束后继续调用的下一个动画,实现多重动画效果。//旋转180度并提高视角startRotationAnimation(onFinish){letthat=this;letr=849ht.Default.startAnim({duration:6000,easing:function(t){returnt;},action:function(v,t){//圆的参数方程的半径和角度为改变letr1=(1-t)*r;letangle=(t-0.5)*Math.PI;letx=r1*Math.cos(angle);letz=r1*Math.sin(angle);lety=126+(1968-126)*t*t*t;that.g3d.moveCamera([x,y,z]);},finishFunc:function(){if(!onFinish){return;}onFinish。call(that);}});}运行这个动画的时候,需要延时调用另外两个动画来完成CPU扣的抬起和消失。这允许动画交错以获得更好的视觉效果。这部分使用ht.Default.callLater(func,scope,args,delay)来延迟调用动画函数,最后一个参数delay定义了延迟间隔。ht.Default.callLater(()=>{this.startCap1Animation();},this,null,500);ht.Default.callLater(()\=>{this.startCap2Animation();},this,null,1000);-角度切换这部分使用moveCamera方法根据页面是在PC端还是移动端打开切换不同的视角。以PC端视角切换为例,通过getEye()方法获取摄像头位置作为起始位置,结束位置为预定义值。使用action参数定义视角从起始位置到结束位置的切换。//角度切换startMoveAngle3AnimationPC(onFinish){letstartPos=this.g3d.getEye();让endPos=[0,728,661];让那个=这个;ht.Default.startAnim({duration:2000,easing:function(t){returnt*t;},action:function(v,t){letx,y,z;x=startPos[0]+(endPos[0]-startPos[0])*t;y=startPos[1]+(endPos[1]-startPos[1])*t;z=startPos[2]+(endPos[2]-startPos[2])*t;that.g3d.moveCamera([x,y,z]);},finishFunc:function(){…}});}-CPUshell隐藏动画为了带来更好的视觉效果,使用ht.Default.callLater()在视角切换动画时延迟调用CPUshellhide。通过getElevation()获取壳在3D坐标系中的初始y坐标,在动画过程中使用setElevation()方法设置y坐标,动画结束后将其visible属性设置为false。代码如下:easing:function(t){returnt*t;},action:function(v,t){letval=start+(end-start)*t;//开始:开始y坐标;end:终止y坐标that.hide1.setElevation(val);}finishFunc:function(){that.hide1.s('3d.visible',false);}-芯片出现后呼吸光渲染视角切换完成后,CPU外壳被隐藏起来,CPU内部结构逐渐浮出水面。和shell隐藏一样,这部分也是通过setElevation方法完成的。action:function(v,t){lete\=start1Y+(end1Y-start1Y)\*tthat.up1.setElevation(e);}和间隔1s弹出的筹码动画,渲染动画使用shape3d打开呼吸灯。blend和shape3d.opacity分别设置呼吸光着色和透明度。缓动:easing.easeBothStrong,action:function(v,t){letval\=255-(255-endBlend)\*t;val\=val.toFixed(0);让blend\='rgb('+val+','+val+','+val+')';让不透明度\=startOpa+(endOpa-startOpa)\*tthat.blend.s('shape3d.blend',blend);那.不透明度。s('shape3d.opacity',不透明度);}这部分动画采用了easeBothStrong的方式,即开始缓慢减速,t的4次方,代码实现如下:easeBothStrong:function(t){return(t*=2)<1?.5*t*t*t*t:.5*(2-(t-=2)*t*t*t);}-在PC上结束动画当动画结束时,PC重置交互器,并开始线的流动和点地面的旋转动画。startAnimation(){setInterval(()=>{this.uvOffset=this.uvOffset+this.uvSpeed;this.line.s('top.uv.offset',[-this.uvOffset,0]);//行this.rotationAngle=this.rotationSpeed+this.rotationAngle;this.flagReflection.setRotationY(this.rotationAngle);//点地面旋转},16.7);}移动端动画结束后,陀螺仪数据手机的读取和展示,具体原理和实现在手机传感器数据部分。手机传感器数据HTML5提供了几个DOM事件来获取有关移动终端的方向和运动的信息。deviceorientation提供设备的物理方向信息;devicemotion提供设备的加速度信息。-处理orientation(方向)事件要接收设备方向变化信息,需要先注册监听deviceorientation事件:window.addEventListener('deviceorientation',(e)=>{this.onOrientationEvent(e);});3个方向事件重要值:这是事件处理的简单代码:onOrientationEvent(e){letalpha,beta,gamma,compass;让compassFlag=true;阿尔法=e.阿尔法?e.阿尔法:0;beta=e.beta?e.贝塔:0;伽玛=e.伽玛?e.gamma:0;}值得注意的是IOS和Android为手机硬件提供的alpha值并不完全相同,所以需要通过webkitCompassHeading属性来判断是IOS还是Android。当webkitCompassHeading不为空时,表示IOS系统。-处理运动(Motion)事件类似于方向事件处理。motion事件的处理也是先注册监听devicemotion:window.addEventListener('devicemotion',(e)=>{this.dataTextarea.s('2d.visible',true);this.onMotionEvent(e);});运动事件包含4个属性:下面是事件的简单代码:onMotionEvent(e){letMAX1=2;让MAX2=5;this.acceleration=e.acceleration.x?e.acceleration:{x:0,y:0,z:0};this.accGravity=e.accelerationIncludingGravity.x?e.accelerationIncludingGravity:{x:0,y:0,z:0};=e.rotationRate.alpha?e.rotationRate:{alpha:0,beta:0,gamma:0};this.interval=e.interval;}总结芯片强,产业强。随着5G技术、物联网和人工智能的发展,集成电路作为最重要、最基础的技术,必将发展得更快。随着国内信息产业的飞速发展,自主研发出一款优秀的中国“芯片”迫在眉睫。本文以大家熟知的CPU为例,介绍一下HT在微观上的应用。如果您有更深入的需求和更好的想法,欢迎提出。我们可以进行深入的讨论和差异化的业务定制。如果您对工业互联网感兴趣,可以从https://www.hightopo.com/demos/index.html获取更多案例和效果。
