1.一种实现图像雨滴滴落、划动波纹特效的方法,其特征在于,包括:
s1、从图像或视频中选取任意图像作为初始水面纹理图;
s2、定义水波高度网格模拟水面,初始化每个顶点的水波高度值为0,模拟平静的水面;
s3、当用户选择雨滴滴落特效类型时,检测屏幕是否发生点击操作,若是,在随机位置滴落雨滴,以点的形式存储各雨滴位置和时间,各雨滴的初始位置作为中心点;当用户选择划动波纹特效类型时,检测屏幕是否发生滑动操作,若是,以点的形式存储滑动位置和时间,各滑动触摸初始位置作为中心点;
s4、在水波在传导过程中,所有点随时间推移而改变,根据波的传播公式计算下一帧图像每个顶点的水波高度值;
s5、根据水波高度值,获取相应像素偏移量,将原图像各像素按照像素偏移量发生形变,从而得到下一帧图像。
2.根据权利要求1所述的实现图像雨滴滴落、划动波纹特效的方法,其特征在于,所述水波高度值为:
h(x)=f(x)/(k1/time)/(radius*k2)2
其中,k1和k2分别为调节系数,time为水波传播时间,randius为水波半径,具体为:
randius=len(positionhit-positon)
len为两点之间欧式距离函数,positionhit为中心点的坐标位置,position为采样点坐标位置;f(x)为:
f(x)=-a*cos(x*b+c)+d
其中,系数a控制振幅,系数b控制周期|频率,系数c控制x轴方向位移,系数d控制控制y轴方向位移。
3.根据权利要求2所述的实现图像雨滴滴落、划动波纹特效的方法,其特征在于,对于雨滴滴落特效,所述步骤s5具体为:
采样上下左右四个点计算水平和垂直方向的高度值计算该点所在三角面的法线向量,采上下左右四个点的位置具体为:
left=position(x-offset,y)
right=position(x+offset,y)
up=position(x,y+offset)
down=position(x,y-offset)
其中,x和y分别为该顶点的横纵坐标,offset为偏移量;
假设平行光垂直射入水面,法线的计算公式如下:
normal=cross((right-left),(up-down))
其中,cross(·,·)为向量叉积计算;
通过向量叉积计算法线向量normal后,根据法向量计算光的折射向量,根据折射向量对顶点位置作相应的偏移。
4.根据权利要求2所述的实现图像雨滴滴落、划动波纹特效的方法,其特征在于,对于划动波纹特效,所述步骤s5具体为:
将每个顶点的左右两个顶点的水波高度值的差值右移指定位,作为水平偏移量,上下两个顶点的水波高度值的差值右移指定位,作为垂直偏移量,下一帧图像中,每个顶点都由该顶点的坐标加上相应的水平偏移量和垂直偏移量后,所对应的原图像上的顶点填充。
5.根据权利要求2所述的实现图像雨滴滴落、划动波纹特效的方法,其特征在于,所述步骤s3还包括:
当出现多个滴落位置或多个触摸位置时,通过h(x)依次叠加每个中心点在当前顶点产生的水波高度值,作为该顶点的最终高度值。
6.根据权利要求2所述的实现图像雨滴滴落、划动波纹特效的方法,其特征在于,所述方法还包括:
用户对水波的大小参数进行设置;
将特效化后的图像保存或分享到社交平台。
7.一种实现图像雨滴滴落、划动波纹特效的系统,其特征在于,包括:
加载模块,用于从图像或视频中选取任意图像作为初始水面纹理图;
初始化模块,用于定义水波高度网格模拟水面,初始化每个顶点的水波高度值为0,模拟平静的水面;
触发检测模块,用于当用户选择雨滴滴落特效类型时,检测屏幕是否发生点击操作,若是,在随机位置滴落雨滴,以点的形式存储各雨滴位置和时间,各雨滴的初始位置作为中心点;当用户选择划动波纹特效类型时,检测屏幕是否发生划动操作,若是,以点的形式存储滑动位置和时间,各滑动触摸初始位置作为中心点;
水波高度计算模块,用于在水波在传导过程中,所有点随时间推移而改变,根据波的传播公式计算下一帧图像每个顶点的水波高度值;
偏移处理模块,用于根据水波高度值,获取相应像素偏移量,将原图像各像素按照像素偏移量发生形变,从而得到下一帧图像。
8.根据权利要求7所述的实现图像雨滴滴落、划动波纹特效的系统,其特征在于,所述水波高度值为:
h(x)=f(x)/(k1/time)/(radius*k2)2
其中,k1和k2分别为调节系数,time为水波传播时间,randius为水波半径,具体为:
randius=len(positionhit-positon)
len为两点之间欧式距离函数,positionhit为中心点的坐标位置,position为采样点坐标位置;f(x)为:
f(x)=-a*cos(x*b+c)+d
其中,系数a控制振幅,系数b控制周期|频率,系数c控制x轴方向位移,系数d控制控制y轴方向位移。
9.根据权利要求8所述的实现图像雨滴滴落、划动波纹特效的系统,其特征在于,对于雨滴滴落特效,所述偏移处理模块包括:
采样上下左右四个点计算水平和垂直方向的高度值计算该点所在三角面的法线向量,采上下左右四个点的位置具体为:
left=position(x-offset,y)
right=position(x+offset,y)
up=position(x,y+offset)
down=position(x,y-offset)
其中,x和y分别为该顶点的横纵坐标,offset为偏移量;
假设平行光垂直射入水面,法线的计算公式如下:
normal=cross((right-left),(up-down))
其中,cross(·,·)为向量叉积计算;
通过向量叉积计算法线向量normal后,根据法向量计算光的折射向量,根据折射向量对顶点位置作相应的偏移。
10.根据权利要求8所述的实现图像雨滴滴落、划动波纹特效的系统,其特征在于,对于划动波纹特效,所述偏移处理模块包括:
将每个顶点的左右两个顶点的水波高度值的差值右移指定位,作为水平偏移量,上下两个顶点的水波高度值的差值右移指定位,作为垂直偏移量,下一帧图像中,每个顶点都由该顶点的坐标加上相应的水平偏移量和垂直偏移量后,所对应的原图像上的顶点填充。