前言飞机在飞行过程中,除了在机舱内座位上方的屏幕上播放电视剧和广告外,还会切换到飞机飞行时时监控系统。这个监控系统的主要目的是让乘客了解飞机在飞行过程中的整体状态,从目的地出发的航线进度,以及一些可能出现的紧急情况。飞机导航监控系统在一定程度上可以让乘客在旅途中获得准确的信息来源,最重要的是可以让乘客在旅途中安心。飞机飞行监控系统在保证旅客能够获得实际信息来源的同时,还能将采集到的数据及时反馈给机组人员,并保存数据记录,供飞机停飞和监控后的乘务员和维修人员使用。和维护。在2D配置和3D配置之间,Hightopo的HTforWeb产品(以下简称HT)拥有丰富的配置选项。本文将介绍如何利用HT丰富的2/3D组态构建飞行器导航监控系统的解决方案。预览地址:flight-monitorsystemanalysis飞行器导航监测是衡量和跟踪飞行器性能趋势的一种简单实用的方法。在日常飞行中,利用机载仪表记录飞机在巡航时的相关参数,并与原来的性能进行比较。监测的主要参数有:单位飞行时间的油耗量、飞机的巡航飞行速度、飞机飞越单位油耗的水平距离。它们分别代表了发动机、飞机和航空发动机的综合性能。它们分别代表了发动机、飞机和航空发动机的综合性能。性能监测结果不仅可以为飞机维修提供可能的故障信息,还可以为制定飞行计划提供可靠的性能依据。目前,先进的喷气式运输机都安装了飞行状态监测系统,记录相关参数值并存储在数据管理装置中。这些数据可以在飞行器着陆后发送或发送到地面站,并用专门的计算机程序进行计算。及校正,实现性能监控数据采集、传输、计算和分析的自动化,节省人力,提高准确性。1、飞行数据记录仪:飞行数据记录仪FDR(FlightDataRecorder)“俗称黑匣子”自诞生以来,所提供的详细准确的飞行数据,为事故调查、维修保障、和安全运行监控。航空安全运行的重要管理工具。2.ACMS(AireraftConditionMonitoringSystem)系统概述:ACMS系统是一种安装在飞机上的先进机载数据采集和处理系统。可实时采集数据,监测发动机状态和飞行性能,进行专项工程勘察。飞机通信寻址和报告系统(ACARS)通过地空数据链将其发送到地面接收站,最后传送到航空公司的终端。数据记录也可以通过快速访问记录器(QAR)保存。供航空和维修人员在车站或飞行后使用。HT实现的业务功能可以通过ACMS系统采集的数据进行展示,连接显示终端,实时监控数据准确显示,可以监控飞行器状态,实时反馈关于信息数据的变化。为了达到飞过云层的效果,一开始我遇到的问题是飞行飞机的层次感,也就是通常所说的透视效果。这里我使用云通道和云背景以不同的速度高速流动,营造出飞行的透视效果。我以贴图的形式呈现云朵,但是只有贴图会遮挡天空和飞机,极大的影响了飞机飞行的观感,所以我开启了对应图元的透明和不透明,并设置了不同的透明度云背景和云通道。不仅增加了层次感,还给人一种云朵飘过的错觉。云通道采用ht.Polyline类型。通道缩放增加了Y轴的比例,使云通道有更大的垂直空间。设置reverse.flipbackcopy使得云通道内部也显示纹理,仿佛飞机在云海中穿梭;云背景采用ht.Node类型,只设置一个面显示为云背景。整体云流效果是通过offset偏移实现的,改变对应图元或对应图元表面的纹理偏移量,实现飞过云朵的效果,代码如下:vari=1,p=0;setInterval(()=>{i-=0.1;p+=0.005;clouds.s('shape3d.uv.offset',[i,0]);cloudBackground.s('all.uv.offset',[p,0]);},100);虽然升降和颠簸效果已经达到了飞机穿过云层的效果,但是如果飞机只是直线飞行,也会降低飞行的真实感。我也经常在飞行过程中感受到飞机的爬升和下降。这其实是因为飞机的飞行路线并不总是固定在一个高度上。有时爬升有时下降,所以我使用ht-animation.jsHT动画扩展插件来实现平面颠簸效果,代码如下:dm.enableAnimation(20);plane.setAnimation({back1:{from:0,to:160,easing:'Cubic.easeInOut',duration:8000,next:"up1",onUpdate:function(value){value=parseInt(value);varp3=this.p3();这个。p3(value,p3[1],p3[2]);}},//...省略类似start:["back1"]});飞行效果受到球扇形视角限制后,这时候遇到了一个难题,因为实际上飞机虽然穿梭在云海中,但也只是在通道中飞行,背景其实只是一个平面纹理,所以当视角达到一定程度时,会有强烈的不协调感和不真实感,需要一个视角限制,让视角的调整刚好在一定范围内。如果视角受限,一般会限制g3d的眼睛和中心。不太了解的朋友可以去hightopo官网看3d手册。里面有详细的说明,这里就不赘述了;因为视角范围,我决定固定中心点的位置,代码如下:g3d.addPropertyChangeListener(e=>{//固定中心点if(e.property==='center'){e.newValue[0]=center[0];e.newValue[1]=center[1];e.newValue[2]=center[2];}}然后将眼睛限制在一定范围内就大功告成了,不过这里没那么简单,一开始我把眼睛限制在一个立方体的空间里,但是交互效果并不理想。考虑到g3d默认的交互方式,当鼠标拖动和平移改变视角时,眼睛实际上是在一个以球心为圆心的球面上运动,所以我决定先从球体上挖出一块作为眼睛的限制空间,也就是球扇区。不懂的朋友可以参考到这张图:球面扇形的视角限制一共需要三个参数,分别是中心参考轴,中心轴和外边角,中心参考轴所在的球体的限制半径可以根据初始眼与中心的延长线确定,将其所在球体的极限半径分为最大极限和最小极限。代码如下:g3d.addPropertyChangeListener(e=>{//固定中心点if(e.property==='center'){e.newValue[0]=center[0];e.newValue[1]=center[1];e.newValue[2]=center[2];}//限制视角if(e.property==='eye'){varnewEyeV=newht.Math.Vector3(e.newValue),centerV=newht.Math.Vector3(center),refEyeV=newht.Math.Vector3(eye),refVector=refEyeV.clone().sub(centerV),newVector=newEyeV.clone().sub(centerV);如果(centerV.distanceTo(newEyeV)>limitMaxL){newVector.setLength(limitMaxL);e.newValue[0]=newVector.x;e.newValue[1]=newVector.y;e.newValue[2]=newVector.z;}if(centerV.distanceTo(newEyeV)
