| 
UID:176218
注册时间2016-10-15最后登录2019-12-19在线时间19小时
发帖52搜Ta的帖子精华0
金钱577威望64贡献值0好评度54
访问TA的空间加好友用道具
     | 
 
Qml特效6-进场动画-方盒 目录(放个目录方便预览。这个目录是从博客复制过来的,点击会跳转到博客) 简介 这是《Qml特效-进场动画》系列文章的第6篇,涛哥将会教大家一些Qml进场动画相关的知识。进场动画效果 参考了WPS版ppt的动画,基本效果已经全部实现,可以到github TaoQuick项目中预览:进场动画预览  关于文章 文章主要发布在涛哥的博客 和 涛哥的知乎专栏-Qt进阶之路  方盒效果预览 方盒效果,支持由内到外、由外到内两种实现原理 通过数值动画,控制百分比属性percent从0 到100变化
 在Shader中,使用glsl片段着色器实现像素的控制:import QtQuick 2.12import QtQuick.Controls 2.12ShaderEffect {    ...    enum Direct {        FromInner = 0,        FromOuter = 1    }    property int dir: ASquare.Direct.FromLeft    property int percent: 0    opacity: percent > 0 ? 1 : 0    NumberAnimation {        id: animation        target: r        property: "percent"        from: 0        to: 100        alwaysRunToEnd: true        loops: 1        duration: 1000    }    ...}
fragmentShader: TCommon.fragmentShaderCommon + (dir === ASquare.Direct.FromInner ? "       in vec2 qt_TexCoord0;       uniform float qt_Opacity;       uniform sampler2D effectSource;       uniform int dir;       uniform int percent;       out vec4 fragColor;       void main()       {           vec4 color = texture2D(effectSource, qt_TexCoord0);           float p = float(percent) / 200.0;           float alpha = step(0.5 - p, qt_TexCoord0.x) * (1.0 - step(0.5 + p, qt_TexCoord0.x)) * step(0.5 - p, qt_TexCoord0.y) * (1.0 - step(0.5 + p, qt_TexCoord0.y)) * qt_Opacity;           fragColor = vec4(color.rgb * alpha, alpha);       }" : "        in vec2 qt_TexCoord0;        uniform float qt_Opacity;        uniform sampler2D effectSource;        uniform int dir;        uniform int percent;        out vec4 fragColor;        void main()        {            vec4 color = texture2D(effectSource, qt_TexCoord0);            float p = float(percent) / 200.0;            float alpha = 0.0;            if (qt_TexCoord0.x <= p || qt_TexCoord0.x >= 1.0 - p) {                alpha = 1.0;            } else if (qt_TexCoord0.y <= p || qt_TexCoord0.y >= 1.0 - p) {                alpha = 1.0;            }            alpha = alpha * qt_Opacity;            fragColor = vec4(color.rgb * alpha, alpha);        }")
 |