Linux触摸屏动效

触摸拖尾特效

实现原理

参考cocos2d中MotionStreak拖尾特效的实现。MotionStreak 的拖尾效果,原理实际上是:触摸手指在移动的过程中,会动态生成一段段条带段(如图),然后这些条带段会在生命周期Fade秒内,渐渐隐去(慢慢变透明),从而形成了拖尾的效果。

在这里插入图片描述

条带使用的是OpenGL中三角形条带。条带上的关键点并不是触摸点,而是相邻触摸坐标线段的垂直平分线上距离线段中点距离为[条带宽度/2]的点,坐标计算方式如下:
在这里插入图片描述
触摸相邻点的线段的倾斜角α已知,L为 条带的宽度,那么三角形条带相对于线段中点的 ( x m , y m ) (x_m,y_m) (xm,ym) 偏移量 d x , d y dx,dy dx,dy
d x = L ∗ cos ⁡ β 2 , d y = L ∗ sin ⁡ β 2 ,   α + β = Π 4 dx=\frac{L\ast\cos{\beta}}{2}, dy=\frac{L\ast\sin{\beta}}{2}, \ \alpha+\beta=\frac{\mathrm{\Pi}}{4} dx=2Lcosβ,dy=2Lsinβ, α+β=4Π
至此,条带上的所有关键点可以计算得出。条带上内侧的关键点放到顶点数组的奇数位置,外侧的关键点放到顶点数组的偶数位置,最后将顶点数组按照OpenGL中三角形条带(GL_TRIANGLE_STRIP)的方式依次连接,便可得到三角形条带,最后将纹理(如下图)和颜色混合后映射到条带上,便可得到触摸拖尾特效。
在这里插入图片描述

效果

请添加图片描述

触摸点击、长按特效

实现原理

触摸点击的效果是点击位置出现一个圆,手指离开后圆半径逐渐缩小,直至消失。触摸长按的效果是长按位置出现圆环,手指离开后圆环消失。两个动画根本上是进行圆环的绘制,圆其实就是个内径为零的圆环。但在OpenGL中基本图元中并不包含圆,需要用三角形去拟合。圆环的绘制是采用OpenGL的三角形条带进行绘制,难点在顶点数组的计算,如下图:
在这里插入图片描述
建模后:已知当前的坐标 ( x , y ) (x,y) (x,y),偏移角度 α α α, 圆心 ( c x , c y ) (cx,cy) (cx,cy),圆半径为 r r r, 我们需要推导出 ( x ′ , y ′ ) (x\prime,y\prime) (x,y),做辅助角 β β β,以圆心为坐标原点建系,则有
x = r c o s ( α + β ) ; x ′ = r c o s β ; y = r s i n ( α + β ) ; y ′ = r s i n β x=rcos(α+β);x'=rcosβ;y=rsin(α+β);y'=rsinβ x=rcos(α+β);x=rcosβ;y=rsin(α+β);y=rsinβ
最终可推导出:
x ′ = x c o s α − y s i n α ; y ′ = x s i n α + y c o s α x'=xcosα - ysinα;y'=xsinα+ycosα x=xcosαysinα;y=xsinα+ycosα
假设我们用一个N多边形去拟合圆,则有:
α =   2 Π N \alpha=\ \frac{2\mathrm{\Pi}}{N} α= N2Π
至此,圆环上的所有的关键点可以推导得出。然后,将圆环内侧的关键点放入顶点数组的奇数位置,外侧的关键点放到顶点数组的偶数位置,通过OpenGL中的三角形条带(GL_TRIANGLE_STRIP)的方式,进行绘制,便可得到圆环,然后将圆环的纹理贴合上去,最后,通过QAnimation做成渐变的效果。至此,点击、长按动画便大功告成。

效果

  1. 触摸点击动效
    请添加图片描述

  2. 触摸长按动效

请添加图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值