2014-11-25 69 views
2

在我的QML游戏中,我有一些水面上方有波浪。我需要一个想法如何动画波浪。当波浪起伏时,我只需要一些简单的动画。我试过动画SVGImageAnimatedImage。什么都没有由于颜色限制,GIF看起来不太好。可能是一些图形效果或精灵?任何想法将不胜感激!QML - 需要想法如何动画波

回答

4

以下代码通过使用 sine wave公式为图像创建连续波动画。

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; 
        }" 
} 
+0

谢谢@Blastings,这是接近我的目标。我只需要采用它来平铺图像,它仍然不适合我。你不觉得着色器会导致CPU过载吗? – folibis 2014-11-25 23:01:14

+0

所以你有几个图像排列在瓷砖网格? 据我所知,QML着色器代码应该在GPU上运行,而不是在CPU上运行。 – Blastings 2014-11-26 07:58:01