一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种采用Qt实现雷达屏显的方法与流程

2022-03-23 00:14:45 来源:中国专利 TAG:

一种采用qt实现雷达屏显的方法
技术领域
1.本技术属于雷达屏显技术领域,尤其涉及一种采用qt实现雷达屏显的方法。


背景技术:

2.雷达显示器是用于自动实时显示雷达信息的终端设备。传统的雷达图像是接收机直接输出的原始雷达视频或者经过信号处理的雷达视频图像,这称为一次显示。经计算机处理的雷达数据或综合视频显示的雷达图像,称为二次显示。雷达显示器的类型很多,常见的画面格式有十余种,按显示的坐标数目分为一度空间显示器、二度空间显示器和三度空间显示器三类。二度空间显示器采用亮度调制,其基本型式有极坐标的p型显示器和直角坐标的b型显示器。p型显示器又称平面位置显示器(ppi)或环视显示器,属于径向圆扫描显示。
3.随着计算机软硬件的发展,有效利用gpu进行渲染已是大势所趋。目前,最常用的技术莫过于opengl。opengl由于其高效、与平台无关等特点,绝大部分显卡厂商都为其提供支持。使用opengl只是将原本在cpu上进行的运算转移至gpu。目前,使用opengl实现p显图的方案,并没有有效利用opengl缓冲区的特性,导致每一次变动都会清空缓冲区,致使opengl完成一帧绘制,需要消耗更多资源。qt是一套完善的gui框架,它具有完善的事件机制和信号槽机制。并且,qt框架对计算机底层的绘制系统进行了抽象,添加了对opengl的支持。在使用opengl绘制的过程中,可以通过qt的事件机制,有效的捕捉用户的交互行为,并存入缓冲区。
4.现有技术方案,使用opengl开发的p显图频繁刷新缓冲区,大量占用资源。并且p显图没有针对用户交互行为的时序控制,没有使用多线程方式处理图元的计算,导致交互时界面存在卡顿。


技术实现要素:

5.本技术的目的是提供一种采用qt实现雷达屏显的方法,解决p显图绘制占用资源过多,以及p显图用户交互过程中存在卡顿的问题。
6.为了实现上述目的,本技术技术方案如下:
7.一种采用qt实现雷达屏显的方法,用于绘制雷达的p显图,所述采用qt实现雷达屏显的方法,包括:
8.将雷达上报的点航迹存储在点航迹数据缓冲区,将用户交互行为提交给行为缓冲区;
9.图元计算线程按照预设的点航迹数据缓冲区读取周期,读取点航迹数据缓冲区,更新图形树中的基本图元;
10.在触发用户交互行为计算时,图元计算线程从行为缓冲区读取用户交互行为,进行行为计算,更新图形树中的基本图元;
11.在绘制线程的绘制周期达到后,所述图元计算线程读取图形树,将图形树中的基
本图元转换为绘制图元,写入到绘制缓冲区中,由绘制线程进行绘制送显。
12.进一步的,所述图元计算线程按照预设的点航迹数据缓冲区读取周期,读取点航迹数据缓冲区,更新图形树中的基本图元,包括:
13.读取点航迹数据缓冲区后,如果发现有新增点航迹,则生成新的基本图元,将新的基本图元加入到图形树中,并向绘制缓冲区申请缓冲;
14.读取点航迹数据缓冲区后,如果未发现新增点航迹,则根据从点航迹数据缓冲区读取的点航迹数据,更新图形树中对应的基本图元。
15.进一步的,所述触发用户交互行为计算,包括:
16.行为缓冲区读取周期到达,或用户交互行为完成。
17.进一步的,所述在触发用户交互行为计算时,图元计算线程从行为缓冲区读取用户交互行为,进行行为计算,更新图形树中的基本图元,包括:
18.基本图元以队列的形式存储交互行为类;
19.当触发用户交互行为计算时,图形树中的基本图元按照存储的交互行为类,执行行为计算结果。
20.进一步的,所述采用qt实现雷达屏显的方法,还包括:
21.在绘制缓冲区不足时,重新申请更大的绘制缓冲区。
22.进一步的,所述采用qt实现雷达屏显的方法,还包括:
23.在基本图元生命周期超时后,则将绘制缓冲区中对应的缓冲段的归属权清空,在预设的时间之后,如果依然没有新的基本图元申请该缓冲段,则将该缓冲段彻底删除。
24.本技术提供的一种采用qt实现雷达屏显的方法,为了更进一步的降低cpu和gpu的利用率,使用qt这一框架,使用其事件机制和信号槽,能够在保障线程安全和性能的基础上,根据opengl的特性进行优化,可以达成这一目的。融合了opengl和qt,有效使用gpu,提高了p显图的帧率,并降低cpu资源占用;在qt框架的基础上,对p显图进行抽象,对绘制流程进行了优化,避免了无必要的绘制与计算;对用户的交互行为进行控制,优化了用户的交互体验。
附图说明
25.图1为本技术采用qt实现雷达屏显的方法流程图;
26.图2为本技术实施例一种图元计算线程具体的实现方式。
具体实施方式
27.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本技术进行进一步详细说明。应当理解,此处描述的具体实施例仅用以解释本技术,并不用于限定本技术。
28.导致p显图占用大量cpu资源和gpu资源,并在用户交互时卡顿的根本原因在于三点:对图形的计算消耗cpu资源;频繁无序的绘制消耗gpu资源;用户交互行为触发的绘制。优化这三个问题最为基本的是对p显图图元和可能的用户交互行为进行抽象,在此基础上则是对外部行为(如雷达上报的点航迹数据、用户交互行为)和绘制时序的控制,最终将数据提交给opengl的缓冲区进行绘制。
29.在一个实施例中,如图1所示,提供了一种采用qt实现雷达屏显的方法,包括:
30.步骤s1、将雷达上报的点航迹存储在点航迹数据缓冲区,将用户交互行为提交给行为缓冲区。
31.p显图图元封装的形式,最终决定于如何以最小代价提交给opengl绘制。图元根据在绘制过程中的功能,可以分为两种:基本图元和绘制图元。基本图元用于存储图元本身的数据信息,如位置、颜色等信息,而绘制图元则是将基本图元的数据以opengl缓冲区格式存储,方便于opengl绘制。每一次图元的绘制,都会将基本图元转换为绘制图元,然后再将绘制图元传递给opengl绘制。
32.p显图的外部行为包括雷达数据输入和用户交互行为,本技术分别建立点航迹数据缓冲区和行为缓冲区。雷达数据输入是指雷达上报的点航迹,其关键性信息便是经纬高。考虑到雷达探测范围有限,可以直接视为平面处理,可以采用相似三角形的办法,将点航迹的经纬高转换为屏幕坐标,生成基本图元。
33.考虑到雷达上报的点航迹存在周期性规律,通过建立点航迹数据缓冲区的方式,存储雷达上报的点航迹,并按照设定的点航迹数据缓冲区读取周期从点航迹数据缓冲区中读取数据进行后续处理。
34.同样的,用户交互行为则是指用户使用鼠标、键盘等外部设备与p显图的交互,如鼠标组合行为等,用户交互行为是不可预测的。不可预测体现在两点:无法预测发生时间和无法预测发生规模。其中,无法预测发生时间,那么一旦用户交互行为发生在某一帧绘制之后,那么p显图就必须立刻重新绘制,从而体现交互的效果;无法预测发生规模,则意味着交互行为会导致大量的重复计算。因此,针对与用户交互行为,建立行为缓冲区。用户交互行为会首先提交给行为缓冲区,然后经过统一的计算后,如缩小与放大的抵消等,最后才将行为计算结果交由图元计算线程进行后续处理,减少了图元计算的次数。
35.由于雷达数据输入和用户交互行为对用户需要展示的效果不同,对点航迹数据缓冲区和行为缓冲区处理的周期要求并不相同,如雷达数据输入要求的实时性不高,那么每30ms处理一次点航迹数据缓冲区足以,而用户交互行为需要尽快看到效果,那么每10ms处理一次行为缓冲区才能满足要求。
36.步骤s2、图元计算线程按照预设的点航迹数据缓冲区读取周期,读取点航迹数据缓冲区,更新图形树中的基本图元。
37.本技术在传统只有一个绘制线程(opengl绘制线程)的基础上,增加了一个图元计算线程,用于图元的计算。opengl绘制线程对应设置有绘制缓冲区。图元计算线程在初始化时会申请存储空间,并在存储空间内以树的形式管理从点航迹数据缓冲区中读取的基本图元,简称图形树。
38.图元计算线程根据设定的点航迹数据缓冲区读取周期,周期性从点航迹数据缓冲区读取点航迹数据,并按照如下方式更新图形树中的基本图元:
39.读取点航迹数据缓冲区后,如果发现有新增点航迹,则生成新的基本图元,并将图元加入到图形树中,然后向绘制缓冲区申请缓冲;
40.读取点航迹数据缓冲区后,如果未发现新增点航迹,则根据从点航迹数据缓冲区读取的点航迹数据,更新图形树中对应的基本图元。
41.具体的,如果有新增点航迹,则需要生成新的基本图元,然后向绘制缓冲区申请缓
冲,申请到缓冲后,暂时不对绘制缓冲区进行操作。即在收到新的点航迹数据时,图元计算线程会向opengl的绘制缓冲区申请一段缓冲区,绘制缓冲区则对应的将这段被申请的缓冲区标记好归属权。当点航迹数量过多,导致opengl绘制缓冲区大小不足时,会申请一个更大的缓冲区。
42.如果读取点航迹数据缓冲区后,未发现新增点航迹,这时一般原来的点航迹中数据发生变更,例如位置变化,则需要更新到图形树中对应的基本图元中。
43.步骤s3、在触发用户交互行为计算时,图元计算线程从行为缓冲区读取用户交互行为,进行行为计算,更新图形树中的基本图元。
44.对于行为缓冲区,同样预设有对应的行为缓冲区读取周期。触发用户交互行为计算的方式包括:行为缓冲区读取周期到达,或用户交互行为完成。即在行为缓冲区读取周期到达后,立即进行行为计算。或,在用户交互行为完成时,亦可触发进行行为计算。
45.对于用户交互行为(如鼠标行为、键盘行为等),通常是在交互行为所触发的鼠标事件或键盘事件中对所有图元处理,计算图元的变化。但这种办法容易导致界面的卡顿。因此,本技术对用户交互行为进行封装,构成交互行为类,基本图元以队列的形式存储交互行为类。
46.当触发用户交互行为计算时,绘制缓冲区中的基本图元按照存储的交互行为类,执行行为计算结果,计算基本图元本身数据的变化,如位置的改变。
47.步骤s4、在绘制线程的绘制周期达到后,所述图元计算线程读取图形树,将基本图元转换为绘制图元,写入到绘制缓冲区中,由绘制线程进行绘制送显。
48.当基本图元计算完毕后,最后一步便是使用opengl绘制线程进行绘制,这其中涉及到基本图元到绘制图元的转换。绘制图元本质上是opengl缓冲区中的某一个片段。在p显图初始化的过程中,opengl绘制线程将会初始化一个比较大的绘制缓冲区。
49.在绘制线程的绘制周期达到后,图元计算线程会读取图形树中的基本图元,将基本图元转换为绘制图元,写入到绘制缓冲区中。然后由绘制线程进行绘制送显,关于绘制送显,为本领域比较成熟的技术,这里不再赘述。
50.需要说明的是,对于绘制缓冲区,本技术还包括如下的一些具体实施例:
51.在一个具体实施例中,所述采用qt实现雷达屏显的方法,还包括:
52.在绘制缓冲区不足时,重新申请更大的绘制缓冲区。
53.具体的,本技术可以设置一个绘制缓冲区管理器,当发现向绘制缓冲区申请缓冲,得不到响应,或反馈绘制缓冲区不足时,向绘制缓冲区管理发出请求,重新规划一个更大的绘制缓冲区,以满足缓冲需求。
54.在一个具体的实施例中,所述采用qt实现雷达屏显的方法,还包括:
55.在基本图元生命周期超时后,则将绘制缓冲区中对应的缓冲段的归属权清空,在预设的时间之后,如果依然没有新的基本图元申请该缓冲段,则将该缓冲段彻底删除。
56.对于p显图而言,基本图元是存在生命周期的,当基本图元超过生命周期后,就应当清除该基本图元,这一部分功能也是在图元计算线程中执行的。例如,当基本图元超时后,需要清除对应的点航迹,缓冲区管理器收到删除点航迹图元的请求,并不会立刻删除缓冲区中该图元对应的片段,也不会立刻整理缓冲区,而只是将该段缓冲区的归属权清空,一段时间后,如果依然没有新的图元申请该缓冲区片段,那么才会整理缓冲区,从而将该段缓
冲区片段彻底删除。频繁的整理缓冲区将会占用大量的cpu资源,累积多次后再整理缓冲区可以避免缓冲区整理过程中的重复行为,从而降低cpu资源的占用。
57.本技术为避免界面卡顿,另启一个图元计算线程,专门用于处理基本图元的数据变化。在数据量较大时,p显图中存在大量的基本图元计算,如果所有的计算都集中在一个线程中,则会导致界面卡顿(用于处理ui界面的线程,如果某一环节未执行完毕,主线程不会进行界面的刷新,这就会使界面卡住)。因此,本技术将用户交互行为触发的事件转交给图元计算线程处理,可以有效防止p显图的卡顿现象。
58.图2给出了一个图元计算线程具体的实现方法,启动图元计算线程后,读取点航迹数据缓冲区,判断是否有新增的点航迹数据,如果有则生成点航迹基本图元,将基本图元放入图形树,并向opengl缓冲区申请缓冲。
59.如果没有新增的点航迹,则将点航迹的一些变化也更新到图形树中。在有新增的点航迹也有原来的点航迹数据变化时,也需要更新到图形树中基本图元中,这里不再赘述。
60.在行为缓冲区读取周期到达时,读取行为缓冲区,在有行为时,对行为进行计算,并计算行为对基本图元的影响,更新图形树中的基本图元。
61.最后,在绘制周期达到后,读取图形树,将基本图元转换为绘制图元,写入到绘制缓冲区,以便opengl绘制线程进行绘制送显。
62.以上所述实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术专利的保护范围应以所附权利要求为准。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献