以下代码通过使用正弦波公式为图像创建连续波动画 。
Image {
id: sourceImg
anchors.fill: parent
source: "../images/src.png"
visible: false
}
ShaderEffect {
anchors.fill: parent
property variant source: sourceImg
property real frequency: 1
property real amplitude: 0.1
property real time: 0.0
NumberAnimation on time {
from: 0; to: Math.PI*2; duration: 10000; loops: Animation.Infinite
}
fragmentShader: "
varying highp vec2 qt_TexCoord0;
uniform sampler2D source;
uniform lowp float qt_Opacity;
uniform highp float frequency;
uniform highp float amplitude;
uniform highp float time;
void main() {
highp vec2 texCoord = qt_TexCoord0;
texCoord.y = amplitude * sin(time * frequency + texCoord.x * 6.283185) + texCoord.y;
gl_FragColor = texture2D(source, texCoord) * qt_Opacity;
}"
}
Run Code Online (Sandbox Code Playgroud)