Pixel Bender Filtrelerinin Kullanımı

14 Ekim 2008 – 18:47

Pixel Bender tarafından hazırlanan filtreleri hem Flash hem de Affter Effect içerisinde kullanabiliyoruz. Bu makalede hazırlanan .pbj  uzantılı dosyaları Flash içerisine ekleyip filtreyi nasıl kullanabileceğimize değineceğim. Tabii unutmadan değinmek istediğim herhangi bir filtreyi kullanmak için filtreyi sizin yapmış olmanız gerekmez. Başkaları tarafından yapılan veya açık kaynak olan filtreleri de kullanabilirsiniz.

Başlamadan önce değinmek istediğim nokta eğer filtreyi Flash içerisinde kullanacaksanız filtre dosyasını Flash için export etmeniz gereklidir. Pixel Bender içerisinde “File” menüsü altındaki “Export Kernel Filter For Flash Player” seçeneği ile dosyayı ByteCode olarak kayıt etmeniz gerekiyor. Bunu yaptığınız varsayarak Flash içerisinde kullanılacak koda geçiyorum.

Filtrenin Kullanımı

Filtre dosyalarını kullanmak için ilk olarak filtre dosyasını Flash Player içerisine yüklemeniz gerekiyor. Bunun için ise URLLoader sınıfını kullanmamız gerekiyor. İlk olarak yeni bir URLLoader objesi oluşturuyoruz. Daha sonra loader sınıfının load metodu ile yüklenecek dosyanın adını ekliyoruz. Filtre dosyası ByteCode olarak oluşturulduğundan dolayı URLLoaderDataFormat özelliğini BINARY olarak atıyoruz. Son olarak da olay dinleyicisi ile dosyanın yüklenmesini takip ediyoruz. Dosya yüklendiğinde filtreyi kullanabiliriz.

  1. var loader = new URLLoader();
  2. loader.load(new URLRequest("MyTestFilter.pbj"));
  3. loader.dataFormat=URLLoaderDataFormat.BINARY;
  4. loader.addEventListener(Event.COMPLETE, filterLoaded);

Şimdi ise ilk olarak yeni Shader ve ShaderFilter objesi oluşturuyoruz. Shader objesi yüklenecek olan veriyi temsil edecek olan objemiz. Yani Pixel Bender içerisinde hazırlanan filtreyi temsil edecek olan sınıf yapısı. ShaderFilter ise bu verinin kullanımını sağlayacak olsn sınıf yapısıdır.

  1. var shader:Shader;
  2. var shaderFilter:ShaderFilter;

Daha sonrada ise olay dinleyicimizin fonksiyonunu yazıyoruz. Fonksiyon içerisinde shader objesine yüklenen veriyi atıyoruz. Yüklenen veriyi filtre olarak kullanabilmek için shaderFilter objesine atıyoruz. Son olarak da sahnedeki objeye filtreyi atıyoruz ve hepsi bu kadar,  artık filtreyi kullanabiliriz.

  1. function filterLoaded(event:Event) {
  2. shader = new Shader(loader.data);
  3. shaderFilter = new ShaderFilter(shader);
  4. image_mc.filters = [shaderFilter];
  5. }

Not: Bitmap filtreleri hakkında daha fazla bilgi almak için aşağıdaki linke göz atabilirsiniz;
http://enginyoyen.com/blog/tr/index.php/actionscript-30-ile-goruntu-filtrelerini-kullanmak/

Filtre Parametrelerinin Kullanımı

Filtreler içerisinde parametreler olabileceğine daha önceden değinmiştim. Bu parametreler genellikle filtrenin uygulayacağı efekti ne kadar uygulayacağını belirler. Benim örnek olarak hazırladığım filtrede ise sadece bir tane parametre var. Bu parametreye ulaşmak için shader objesinin data özelliğini kullanıyoruz. Bunu bir slider componentine atayarak bu değeri anlık olarak değiştirebiliriz. Böylece resim üzerindeki değişikliği anında görebileceğiz.  Aşağıdaki kodu incelediğinizde amount değerinin bir dizi değişkeni olarak atandığını görüyorsunuz. Buradaki mantık şu; Pixel Bender içerisindeki float veri türleri birden fazla değer taşıyor. Aynı veri türü flash içerisinde kullanılmadığından dolayı geçişi dizi değişkeni ile sağlıyoruz. Diğer bir nokta ise image_mc movie clibine filtreyi yeniden atamamız. Bunun sebebide yapılan değişikliği görebilmemiz içindir.

  1. slider.addEventListener(SliderEvent.CHANGE, changeAmount);
  2. function changeAmount(e:SliderEvent) {
  3. shader.data.amount.value = [e.target.value];
  4. image_mc.filters = [shaderFilter];
  5. }

Kaynak Dosyalar

Buradakikaynak dosyaları kullanabilmeniz için Bilgisayarınızda Flash CS4 yüklü olması gerekiyor.
Pixel Bender Örneği

Kapanış

Filtrelerin flash içerisinde temek kullanımı bu şekilde. Tabii Actionscript içerisinde Filtre içerisindeki tüm bilgilere ulaşabilirsiniz. Bu ve bana benzer diğer bilgileri ileriki makalelerimde değineceğim.

Kolay Gelsin
Engin!

Bu makale ile ilgili olabilecek yazılar



Yorum Ekleyin