Plazma sayı 3, sayfa 97
Sayfanın metni

Sayfa 97

Önceki demolardan hangi kodu kullanıp bu adımı aşabilirim.

Bu adımı nasıl çözersem sonraki demolarıma yardımcı olur.

Plan yapmanın her zaman ileriye yönelik olduğunu düşünürsek, ilk yöntemin sakat olduğunu fark edebiliriz. Bu yüzden izlememiz gereken yöntem ikincisi.

DEMO MOTORU

Öncelikle hedefimizi bir tek demo bitirme işinden biraz öteye koyuyoruz. Sayesinde farklı farklı demolar yapabileceğimiz bir altyapı hazırlamalıyız. Demo üretimini sıfırdan kodlanan projeler yerine, hazır rutinlerin birleştirilmesi işine çevirmemiz gerekiyor. İşte bu rutinleri topladığımız sisteme demo motoru adını vereceğiz.

Demo motoruna, bir demonun üretimi esnasında anahtar işleri yapmamızı sağlayacak bir kütüphane gözüyle bakabiliriz. Bu kütüphaneyi büyük ihtimalle sadece kendimiz kullanacağımız için tasarımını gönlümüzce yapmakta özgürüz. Ama yine de göz önünde bulundurmamız gereken bazı şeyler var.

Öncelikle yapacağımız şey olan demoları tanımlayalım. Amacımız gerçek zamanlı olarak çalışacak, görüntünün algoritmik olarak üretileceği bir animasyon hazırlamak ve bu animasyonun üstüne bir müzik eklemek. Müzik, standart bir demoda gerçek zamanlı hesaplanmayacağı için en az dert etmemiz gereken kısım. Dolayısıyla motorumuzun asıl amacı, çizimleri yapmamıza ve görüntüleri oluşturmamıza yardımcı olmak.

Motorumuzu bu çıkarımlar çerçevesinde üçe ayıracağız:

Çizim için kullanılacak belleğin (framebuffer) oluşturulması ve yönetilmesi.

Animasyonun akış kontrolü (timeline).

Çizim işlemlerini kolaylaştıracak bir alt kütüphane (renderer).

Bu kısımları işinin hakkıyla halleden ve görevleri ile ilgili geriye iş bırakmayan kodlar hazırladığımızda motorumuz bitmiş olacak. Bu kodları daha sonra sadece motoru geliştirmek için elleyeceğiz. Demolar ise sırtlarını demo motoruna yasladıkları için sorun çıkarmadan üretilebilecekler.

Framebuffer

Framebuffer ekranda çizilecek piksellerle temasa geçebileceğimiz son yer. Bu belleğin tanımlanması, oluşturulması ve yönetilmesini çalıştığımız platforma göre işletim sistemine bırakabilir ya da elimizle kontrol edebiliriz. İlkini yaptığımızı varsaysak bile, örneğin Windows altında bir OpenGL framebuffer'ı oluşturuyor olsak bile, yazmamız gereken satırlarca kod vardır.

Eğer deneysel takılmak gibi bir amacımız yoksa, yazacağımız her demoda aynı tipte (32bit renk, 16bit derinlik vs.) bir bellek kullanacağız. Haliyle, bu kodu her seferinde baştan yazmamız anlamsız. Bir pencere oluşturup onu bir framebuffer'a bağlayan bir fonksiyon yazmak ve bu fonksiyonu her demonun başında çağırmak iş yükünü hafifletecektir. İşin alt düzey kısmıyla ilgili yapılacak her işi aşağıdaki örnekteki gibi birkaç fonksiyona indirgersek ömrümüzden birkaç yıl kazanabiliriz.

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