2010-11-12 1 views
1

Я хочу сделать такой эффект: перетаскиваемый полупрозрачный объект (назовем его «пластиковой лентой») над окном с произвольными объектами. Пластиковая полоска должна быть мутной, т. Е. Она размывает содержимое под ней (не размывается). Каков наилучший способ сделать это с помощью PixelBender shader на Flex?Flex shader effects: визуализируйте один объект в другой

ответ

1

Это оказалось простым, на самом деле. Чтобы обновить пластиковую полоску, я рисую содержимое окна в растровое изображение, а затем кормить его шейдеру рисовать полосы (так называемых 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 просто коробка фильтр из образцов PixelBender. Если я пропускаю удаление полосы из окна перед рисованием, это дает эффект смешной обратной связи - размытые пиксели продолжают размываться, как чернила.

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