2010-11-12 11 views
1

Je veux faire un tel effet: objet semi-transparent draggable (appelons-le 'bande de plastique') sur la fenêtre avec des objets arbitraires. La bande de plastique doit être trouble, c'est-à-dire qu'elle estompe le contenu (pas floue). Quelle est la meilleure façon de le faire avec PixelBender shader sur Flex?Effets Flex Shader: Rendre un objet dans un autre

Répondre

1

Il s'est avéré être simple, en fait. Pour mettre à jour la bande de plastique, je dessine le contenu de la fenêtre en bitmap, puis à alimenter Shader à tirer la bande (appelé ici blurred):

private function onBlurredUpdate():void { 
    matrix.identity(); 
    matrix.translate(-blurred.x, -blurred.y); 
    clipRect.width = blurred.width; 
    clipRect.height = blurred.height; 

    body.removeChild(blurred); 
    bitmapData.draw(body, matrix, null, null, clipRect); 
    body.addChild(blurred); 

    shader.data.src.input = bitmapData; 

    var graphics:Graphics = blurred.graphics; 
    graphics.clear(); 
    graphics.lineStyle(2, 0xC0C0C0); 
    graphics.beginShaderFill(shader); 
    graphics.drawRoundRect(0, 0, blurred.width, blurred.height, 10, 10); 
    graphics.endFill(); 
} 

shader est simple filtre de boîte à partir d'échantillons PixelBender. Si je saute le retrait de la fenêtre avant le tirage, cela donne un effet de rétroaction amusant - les pixels flous continuent de flouter comme de l'encre.

Questions connexes