2014-11-25 2 views
2

В моей игре QML у меня есть водное пространство с волнами над ним. Мне нужна идея, как оживить волны. Мне просто нужна простая анимация, когда волна идет вверх и вниз. Я пробовал анимировать SVG как с Image, так и с AnimatedImage. Ничего не работает. 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, что близко к моей цели. Мне просто нужно перенести его на черепичный образ, он по-прежнему не работает для меня. Не кажется ли вам, что шейдер вызовет перегрузку процессора? – folibis

+0

Итак, у вас есть несколько изображений, расположенных в сетке из плитки? Насколько я знаю, шейдерный код QML должен работать на графическом процессоре, а не на процессоре. – Blastings

Смежные вопросы