Bu sefer ciddi soruyorum

Şimdi, çizgi çizme algoritmaları arasında DDA var, ve bresenham'ın algoritması var.
Bresenham'ın son zamanlarda üzerine gidildi ve bayağı hızlandı, daha ne kadar optimizasyon yapılabilir bilemiyorum, ama son 3 yılda z80 implementasyonunda 4 kat hız kazanıldı.
Çizgi çizmek işin bir yönü, ama içi dolu poligonlar çizmek başka bir yönü. Daha önce palpa ile birlikte numo'yu kodlarken, Palpa konveks poligonları doldurmak için bir yöntem kullanmıştı, IET (integer edge tracing), aşağı yukarı şöyle birşey:
http://www.phatcode.net/res/224/files/html/ch39/39-03.htmliçi dolu poligon demek diyince, bresenham gibi bir modelle aynı anda karşılıklı iki çizgi çekmek, ve pixel pozisyonlarının arasını doldurmak olarak düşünüyorum.
Şimdi, norvax'a bakarsak, c64 üzerinde 50fps küp döndürmek için neler yapmış:
1. Önce 16 bit hesaplamalarla yatay doldurma tekniğini kullanmış, burada 16x16 bir alandan bahsediliyor, ne kastediliyor anlamadım.
2. Olmamış, tablo yapmaya başlamış. Önce kartezyen kordinat sisteminin tek bir çeyreğini alıp, 128 açıya bölmüş, kordinat farklılıklarından tablo yapmış ama pek anlamadım neden, biri anlatması lazım. Sonra bu çeyreği mirrorlayarak diğer çeyrekler bulunabiliyor orada sorun yok. Bu sablo bir sinüs tablosu mu acaba? (bu Cruzer'in tekniği imiş)
3. Olmamış, çünkü sorun kordinat hesaplamaktan ziyade poligonu doldurmak. Burada devreye sadece matematiği değil, c64'ün inceliklerini bilen biri girmesi lazım, skate sprite doldurma yöntemini öğretmiş. Bu yöntemde doldurulacak yerlere spritelar yan yana dizilerek doldurma yapılıyor, işin güzel tarafı sprite'lar hires kordinatlara sahip! Böyle olunca hires bir ekranda hiç pixel basmadan bütün küpü sprite ile çizmek mümkün (bu da Chorus'dan Clearance'nin tekniği imiş).
4. Norvax bu yöntemi ikinci bir kat sprite'ı alta döşeyerek geliştirmiş, buna "boşluk doldurma" işlemi diyor, ben zaten sprite'larla doldurduğumuz yöntemin daha neresini sprite'larla dolduruyoruz tam çözemedim, belki de allta kalan bir kısım sprite'ın yerini hiç değiştirmiyordur, buraya biraz daha açıklama gerek.
4. Bu da yetmemiş, bütün 3d hesaplamasını önceden hesaplayarak 8 noktanın koordinatlarını bir tabloya girmişler.
5. bu da yetmemiş olayı bir video player'a çevirecek bir yöntemi de uygulamışlar. Buna göre her köşenin bilgisinin yanında, renk bilgisi, boşluk doldurma bilgisi vs. de akışa eklenmiş.
6.böyle olunca veri çok büyümüş, son olarak basit bir sıkıştırma yöntemi uygulayarak veriyi küçültmüşler.
Görünüşe göre c64'de bu boyutlarda (140x140) bir küp döndürmenin daha iyi bir yolu yok. Sprite fill tekniği harika görünüyor.
Benim de aklımda da alternatif bir yöntem var ama bunu grafiklerle anlatmam gerek. Doldurma için karakter tabanlı bir yöntem izlemek adına belki yine pre-calc yöntemler desteği ile çözünürlüğü 40x20 gibi düşünerek hesaplamak.
Şimdilik burada duruyorum, enteresan bilgi-yöntemler bilenler varsa devam etsin.