Plazma sayı 1, sayfa 49

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 49

Sınır koşulları için (Quad alpha değerinin 1 ve 0 olduğu durumlar) yukarıdaki blending eşitliğini yazarsak: Quad Alpha'sı = 1 (source pixel'lerin alpha'sı = 1) için, Sr = Sg = Sb = Sa = 1'dir ve Dr = Dg = Db = Da = 0'dır.

color = (Rs) , (Gs), (Bs) , (As) olur. Quad'ı görürüz.

Quad Alpha'sı = 0 için Sr = Sg = Sb = Sa = 0'dır ve Dr = Dg = Db = Da = 1'dir.

color = (Rd) , (Gd) , (Bd) , (Ad) olur ve sahneyi görürüz.

Benzer şekilde Fade out içinse Quad'ın alpha değerinin zamanla 0'dan 1'e gitmesi gerekir.

2) Render To Texture Yöntemi:

Bu yöntemin bir kısıtlaması var. Sadece siyah renk için fade in/out yapabiliyoruz (yani tüm ekranın siyaha gitmesi ya da siyahtan sahnenin görünür hale gelmesi gibi..).

Yöntemi anlatabilmek için OpenGL texturing fonksiyonları hakkında birkaç şey söylemem lazım. Texture mapping yaparken texture'ı uygulayacağınız yüzeyin rengini tamamen ihmal edebilirsiniz böylece yüzeyin rengi sadece texture map'ten gelir. Ayrıca bir yüzeyin rengini texture map'ten gelen renklerle modüle (çarpma) edebilirsiniz. Standart OpenGL size 4 tane dokulama fonksiyonu sunar. Bunlar GL_DECAL, GL_REPLACE, GL_MODULATE ve GL_BLEND. Bu fonksiyonlar glTexEnv{if}(......) komutu ile aktif hale getirilirler. Bu yöntemde GL_MODULATE'i kullanacağız.

Cf ---> sonuç renk değeri Cs ---> yüzeyin rengi Ct ---> texture map'te tutulan renk

Cf = Cs * Ct GL_MODULATE'in yapacağı işlem bu. Bu bilgiyi şöyle kullanacağız:

- Tüm sahne bir texture'a çizilecek. Yukarıdaki eşitlikteki Ct değeri bu. - Bir önceki adımda sahnenin çizildiği texture, bir screen aligned quad'a uygulanacak. Screen aligned quad Cs verisini tutuyor. - Mapping yapılırken glTexEnvf ( GL_TEXTURE_ENV , GL_TEXTURE_ENV_MODE , GL_MODULATE); komutu kullanılacak ve yüzeyin rengi :

Fade in için : 0'dan 1'e Fade out için : 1'den 0'a zamanla çekilecek.

Daha açık yazarsak şöyle bir işlem uygulanıyor :

(Rt,Gt,Bt) ---> Texture'un rengi. (Çizdirdiğiniz sahne) (Rs,Gs,Bs) ---> Texture'u uyguladığınız full-screen Quad'ın rengi.

Color = (Rt * Rs) , (Gt * Gs) , (Bt * Bs)

Sınır değerler için yukarıdaki eşitliği incelersek : (Rs , Gs, Bs) ---> (0.0,0.0,0.0) için : Color = (0.0) , (0.0) , (0.0) (siyah ekran)

(Rs,Gs,Bs) ---> (1.0,1.0,1.0) için : Color = (Rt) , (Gt) , (Bt) (sahne)

olur.

Quad'ın rengini mesela fade in için şu şekilde: glColor3f(t,t,t); (t değişkeni zamanla 0'dan 1'e götürülerek) ayarlanabilir.

Peki render to texture adımını nasıl yapabiliriz ? Opengl bize 3 farklı seçenek sunuyor. 1) glCopyTexImage yöntemi : Sahne backbuffer'a çizdirilir , backbuffer'a çizdirilen sahne glCopyTexImage ile bir texture'a kopyalanır. Backbuffer tekrar temizlenir (glClear (GL_COLOR_BUFFER_BIT); ) . Sonra yukarıda anlatılan yöntemler uygulanarak elde edilen texture screen aligned quad'a uygulanır. (En yavaş yöntem budur.)

Klavyeyle gezinmek için ← ve → tuşları.