一种基于OpenGL嵌入式设备流畅渲染控件动画方法及设备与流程

专利检索2022-05-11  13


一种基于opengl嵌入式设备流畅渲染控件动画方法及设备
技术领域
1.本发明涉及控件渲染动画播放技术领域,具体涉及一种基于opengl嵌入式设备流畅渲染控件动画方法。


背景技术:

2.现有的嵌入式设备很多都是基于arm-l inux系统,其应用领域丰富,应用变得越来越丰富。嵌入式设备界面的图形渲染要求也越来越高,更高清的图片素材可以使动画播放后的观感更为丰富,更高的动画帧率能够营造流畅的播放切换效果。对于嵌入式设备而言,出于成本需求,其芯片通常都以低功耗为主,使得嵌入式设备的图形渲染一般都是交由其cpu处理,当在高分辨率环境下渲染动画,容易出现卡顿等不流畅现象,继而影响用户的视觉效果,给用户不好的体验。针对上述问题,需要一种低功耗实现流畅控件移动渲染播放效果。


技术实现要素:

3.针对现有技术的不足,本发明的目的在于提供一种基于opengl嵌入式设备流畅渲染控件动画方法,其能够解决控件动画渲染效率低、播放效果不平衡的问题。
4.实现本发明的目的的技术方案为:一种基于opengl嵌入式设备流畅渲染控件动画方法,包括如下步骤:
5.步骤1:完成opengl接口初始化,通过opengl加载需要渲染到控件上的纹理贴图;
6.步骤2:预设opengl的顶点着色器和片段着色器的位置属性和纹理属性,顶点着色器用于控制控件动画播放时的位置,片段着色器用于控制控件动画播放时的颜色和纹理显示;
7.步骤3:预设控件在开始动画播放的起始位置和结束动画播放的终点位置,并预设控件开始动画播放时的原始大小和结束动画播放时的目标大小,以及预设控件动画播放总时长和动画移动间隔时长;
8.步骤4:监听动画播放指令,当监听到动画播放指令后,控件从初始位置开始播放,并按动画移动间隔时长进行位置移动,在每个位置属性上,控件显示对应位置上的纹理属性;
9.步骤5:计算出控件当前移动所消耗的总时长,若消耗的总时长大于等于控件动画播放总时长,则将终点位置设置为控件下一个移动位置,控件移动到终点位置,
10.若消耗的总时长小于控件动画播放总时长,则计算出消耗比例因子,消耗比例因子=当前移动所消耗的总时长/控件动画播放总时长,然后按公式

计算出控件下次需要移动到的目标位置l:
11.l=l

*a2 l
′‑‑‑‑‑‑①
12.其中,l

为控件从起始位置到终点位置所需要移动的总距离,a表示所述消耗比例因子,l

表示控件当前所在位置;
13.步骤6:将步骤5中新计算出的目标位置作为位置信息更新到顶点着色器的位置属性,并刷新显示界面;
14.步骤7:重复步骤5和步骤6,直至控件当前移动所消耗的总时长等于控件动画播放总时长,且控件的总位移等于起始位置到终点位置的总距离,则结束处理。
15.进一步地,所述步骤1中,在加载需要渲染到控件上的纹理贴图之前,还包括通过双线性过滤模式对纹理贴图进行预处理,以放大纹理贴图中的纹理。
16.进一步地,所述动画移动间隔时长通过定时器完成。
17.一种嵌入式设备,包括支持opengl的图形加速硬件,图形加速硬件内置有存储器和处理器,
18.存储器,用于存储程序指令;
19.处理器,用于运行所述程序指令,以执行所述基于opengl嵌入式设备流畅渲染控件动画方法的步骤。
20.本发明的有益效果为:本发明能够很好地提供一种通过算法输出非线性的移动速度,提高显示效果的平滑度,进而提高动画美感,流畅地渲染控件动画播放效果,提高用户体验。
附图说明
21.图1为本发明的流程示意图。
具体实施方式
22.下面,结合附图以及具体实施方案,对本发明做进一步描述。
23.如图1所示,一种基于opengl嵌入式设备流畅渲染控件动画方法,所述嵌入式设备内置有图形加速硬件,图形加速硬件支持opengl,包括如下步骤:
24.步骤1:在完成opengl函数接口初始化后,通过opengl从图片库中加载需要渲染到控件上的纹理贴图,纹理贴图是贴合在控件上的图片,以使得控件播放时具有颜色、纹理变化等动画效果。在将纹理贴图加载到控件上之前,还包括通过双线性过滤模式对纹理贴图进行预处理,主要用于放大纹理贴图中的纹理,将预处理后的纹理贴图再加载到控件上。
25.步骤2:预设好opengl的顶点着色器和片段着色器的位置属性和纹理属性,位置属性和纹理属性具有对应映射关系,即不同位置上具有不同的纹理,顶点着色器用于控制控件动画播放时的位置,片段着色器用于控制控件动画播放时的颜色和纹理显示,当改变位置属性和/或纹理属性信息时,并通过渲染即可实现对控件移动播放效果。
26.步骤3:预设控件在嵌入式设备显示器上开始动画播放的起始位置和结束动画播放的终点位置,并预设控件开始动画播放时的原始大小和结束动画播放时的目标大小,以及预设控件动画播放总时长和动画移动间隔时长。
27.控件从开始播放到结束播放时,控件位置会发生移动,即起始位置和终点位置有差异(当然若位置不发生变化,则起始位置和终点位置设置相同即可),在移动的过程中,控件尺寸大小也可能发生变化,也即是控件的原始大小和目标大小可能发生变化,。例如从小变大或从大变小。控件从起始位置移动到终点位置的时间即为控件动画播放总时长,而控件从当前位置移动到下一个位置的时间即是动画移动间隔时长。动画移动间隔时长可通过
定时器完成,也即当定时器每计时到某一时间,则控件进行一次移动。
28.步骤4:监听动画播放指令,当监听到动画播放指令后,控件从初始位置开始播放,并按动画移动间隔时长进行位置移动,在每个位置属性上,控件显示对应位置上的纹理属性。
29.步骤5:计算出控件当前移动所消耗的总时长,若消耗的总时长大于等于控件动画播放总时长,则将终点位置设置为控件下一个移动位置,控件移动到终点位置,也即控件下一个移动位置即是终点位置。
30.若消耗的总时长小于控件动画播放总时长,则计算出消耗比例因子,消耗比例因子=当前移动所消耗的总时长/控件动画播放总时长,可见消耗比例因子的取值范围在0-1之间,然后按公式

计算出控件下次需要移动到的目标位置l:
31.l=l

*a2 l
′‑‑‑‑‑‑①
32.其中,l

为控件从起始位置到终点位置所需要移动的总距离,a表示所述消耗比例因子,l

表示控件当前所在位置,也即是控件移动到下一个位置的起始位置。
33.通过本步骤处理,公式

相当于是控件缓动公式,能够计算出控件单次位移量,从而能够输出非线性位移量,优化空间动画显示效果,得出下次需要渲染的目标位置,从而从视觉效果上实现移动。
34.计算控件下次需要移动到的目标位置可以通过下述函数程序实现,具体如下:
35.static float easeinquad(float start,float distance,
36.float elapsedtime,float duration)
37.{
38.float ratio=(elapsedtime》duration)?1.0f:elapsedtime/duration;
39.return distance*ratio*ratio start;
40.}
41.其中,start为起始位置,即是件当前所在位置,distance为总移动距离,即是控件从起始位置到终点位置所需要移动的总距离,elapsedtime为动画移动已消耗的时间值,即是控件当前移动所消耗的总时长,duration为总时长,即是控件动画播放总时长,ratio即是消耗比例因子。
42.其中,控件每一次移动都是一个二维坐标的转换,也即每一次移动均需要计算出控件横坐标和纵坐标移动目标值,计算出移动目标值后,对应在顶点着色器上修改二维坐标。
43.步骤6:将步骤5中新计算出的目标位置作为位置信息更新到顶点着色器的位置属性,并刷新显示界面。也即控件根据位置属性每移动到一个新位置上时,则在纹理贴图上绘制对应纹理属性。
44.步骤7:重复步骤5和步骤6,直至控件当前移动所消耗的总时长等于控件动画播放总时长,且控件的总位移等于起始位置到终点位置的总距离,即控件的总位移等于目标移动位置,则控件移动完成,控件播放动画全部加载完成,结束处理,并且定时器也停止工作。
45.通过以上步骤处理,本发明能够很好地提供一种通过算法输出非线性的移动速度,提高显示效果的平滑度,进而提高动画美感,流畅地渲染控件动画播放效果,提高用户体验。
46.本说明书所公开的实施例只是对本发明单方面特征的一个例证,本发明的保护范围不限于此实施例,其他任何功能等效的实施例均落入本发明的保护范围内。对于本领域的技术人员来说,可根据以上描述的技术方案以及构思,做出其它各种相应的改变以及变形,而所有的这些改变以及变形都应该属于本发明权利要求的保护范围之内。
转载请注明原文地址:https://win.8miu.com/read-950416.html

最新回复(0)