Gölgelendiricinin filtre olarak kullanılması, ActionScript'teki herhangi bir filtrenin kullanılmasına benzer. Gölgelendiriciyi filtre olarak kullandığınızda, filtre uygulanan görüntü (görüntüleme nesnesi veya BitmapData nesnesi) gölgelendiriciye iletilir. Gölgelendirici, genellikle orijinal görüntünün değiştirilmiş bir sürümü olan filtre çıktısını oluşturmak için girdi görüntüsünü kullanır. Filtre uygulanan nesne bir görüntüleme nesnesiyse, ekranda filtre uygulanan görüntüleme nesnesi yerine gölgelendiricinin çıktısı görüntülenir. Filtre uygulanan nesne bir BitmapData nesnesiyse, gölgelendiricinin çıktısı,
applyFilter()
yöntemi çağrılan BitmapData nesnesinin içeriği olur.
Bir gölgelendiriciyi filtre olarak kullanmak için, ilk olarak
Gölgelendirici yükleme veya gömme
bölümünde açıklandığı gibi Shader nesnesini oluşturursunuz. Daha sonra Shader nesnesine bağlanmış bir ShaderFilter nesnesi oluşturursunuz. ShaderFilter nesnesi, filtre uygulanmış nesneye uygulanan filtredir. Bunu herhangi bir filtreyi uyguladığınız şekilde bir nesneye uygulayabilirsiniz. Bunu görüntüleme nesnesinin
filters
özelliğine iletirsiniz veya bir BitmapData nesnesinde
applyFilter()
öğesini çağırırsınız. Örneğin, aşağıdaki kod bir ShaderFilter nesnesi oluşturur ve
homeButton
adındaki bir görüntüleme nesnesine filtreyi uygular.
var myFilter:ShaderFilter = new ShaderFilter(myShader);
homeButton.filters = [myFilter];
Gölgelendiriciyi filtre olarak kullandığınızda, gölgelendiricinin en az bir girdiyle tanımlanması gerekir. Örnekte gösterildiği gibi, girdi değerini kodunuzda ayarlamazsınız. Bunun yerine, filtre uygulanmış görüntüleme nesnesi veya BitmapData nesnesi, girdi görüntüsü olarak ayarlanır. Birden çok girdi bekleyen bir gölgelendirici kullanırsanız, bu bir girdi dışındaki tüm girdiler için bir değer sağlamanız gerekir.
Bazı durumlarda filtre, orijinal görüntünün boyutlarını değiştirir. Örneğin, tipik bir gölge efekti, görüntüye eklenen gölgeyi içeren fazladan pikseller ekler. Görüntü boyutlarını değiştiren bir gölgelendirici kullandığınızda, görüntü boyutunun ne kadar değişmesini istediğinizi belirtmek için
leftExtension
,
rightExtension
,
topExtension
ve
bottomExtension
özelliklerini ayarlayın.
Aşağıdaki örnekte bir gölgelendiricinin filtre olarak kullanılması gösterilmektedir. Bu örnekteki filtre, görüntünün kırmızı, yeşil ve mavi kanal değerlerini tersine çevirir. Sonuçta görüntünün "negatif" sürümü elde edilir.
Not:
Bu örneğin kullandığı gölgelendirici, Pixel Bender Araç Kiti'ne dahil edilen invertRGB.pbk Pixel Bender çekirdeğidir. Pixel Bender Araç Kiti yükleme dizininden çekirdek için kaynak kodu yükleyebilirsiniz. Kaynak kodu derleyin ve bayt kodu dosyasını kaynak koduyla aynı dizine kaydedin.
Bu iki örnekte önemli ActionScript kodu bulunur:
-
init()
: Uygulama yüklendiğinde
init()
yöntemi çağrılır. Bu yöntemde kod, gölgelendirici bayt kodu dosyasını yükler.
-
onLoadComplete()
:
onLoadComplete()
yönteminde kod,
shader
adında bir Shader nesnesi oluşturur. Daha sonra
target
adında bir nesne oluşturur ve bu nesnenin içeriklerini çizer.
target
nesnesi, solda kırmızı, ortada sarı-yeşil ve sağda açık mavi olan doğrusal degrade renkle doldurulmuş bir dikdörtgendir. Filtre uygulanmamış nesne şöyle görünür:
Filtre uygulandığında renkler ters çevrilir ve böylece dikdörtgen şöyle görünür:
Bu örneğin kullandığı gölgelendirici, Pixel Bender Araç Kiti'ne dahil edilen “invertRGB.pbk” örnek Pixel Bender çekirdeğidir. Kaynak kod, Pixel Bender Araç Kiti yükleme dizininde “invertRGB.pbk” dosyasında mevcuttur. Kaynak kodu derleyin ve bayt kodu dosyasını ActionScript kaynak kodunuzla aynı dizine “invertRGB.pbj” adıyla kaydedin.
Aşağıda, bu örneğin ActionScript kodu verilmiştir. Bu sınıfı Flash Builder'da yalnızca ActionScript projesi için ana uygulama sınıfı olarak veya Flash Professional'da FLA dosyasının belge sınıfı olarak kullanın:
package
{
import flash.display.GradientType;
import flash.display.Graphics;
import flash.display.Shader;
import flash.display.Shape;
import flash.display.Sprite;
import flash.filters.ShaderFilter;
import flash.events.Event;
import flash.geom.Matrix;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
public class InvertRGB extends Sprite
{
private var shader:Shader;
private var loader:URLLoader;
public function InvertRGB()
{
init();
}
private function init():void
{
loader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.BINARY;
loader.addEventListener(Event.COMPLETE, onLoadComplete);
loader.load(new URLRequest("invertRGB.pbj"));
}
private function onLoadComplete(event:Event):void
{
shader = new Shader(loader.data);
var target:Shape = new Shape();
addChild(target);
var g:Graphics = target.graphics;
var c:Array = [0x990000, 0x445500, 0x007799];
var a:Array = [255, 255, 255];
var r:Array = [0, 127, 255];
var m:Matrix = new Matrix();
m.createGradientBox(w, h);
g.beginGradientFill(GradientType.LINEAR, c, a, r, m);
g.drawRect(10, 10, w, h);
g.endFill();
var invertFilter:ShaderFilter = new ShaderFilter(shader);
target.filters = [invertFilter];
}
}
}
Filtreleri uygulama hakkında daha fazla bilgi için, bkz.
Filtreler oluşturma ve uygulama
.