Gönderen Konu: 64'de Spritelar ve Boblar  (Okunma sayısı 11827 defa)

64'de Spritelar ve Boblar

« : 02.12.2005 12:07:28 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
Bakkada private bir mesajda benden sprite ve bob konusunu anlatmamı istemiş. Ben de cevap yazdım. Ancak başkaları da yararlanabilir diye buraya da copy&paste ediyorum.

Bakkada'ya attığım mesaj:

Sprite ve bobları tek bir mesajda anlatmak oldukça güç. Onun için bir overview yapıcam sadece.

Spritelar commodore'un VIC chipinin desteklediği özel grafik layerlarıdır (tabakalarıdır). Yani sprite ekranda görünen grafiklerin, yazıların üzerine gelebilir ya da arkasına geçebilir ancak asla onları silmez, değiştirmez. Photoshopta yeni bir layer açmak gibi birşey anlayacağın.

Commodore'da normalde 8 sprite vardır. Çeşitli yöntemlerle (multiplexer) çok daha fazla sprite basılabilir ancak yan yana maksimum 8 sprite basılabilir. Spritelar hafızada $d000 adresinden itibaren bulunan adresler ile ekran belleğinin sonunda kalan bytelar yardımıyla ekranda gösterilirler. Spritelar 0'dan 7'ye kadar numaralandırılırlar. 0.sprite, 1.sprite, 2.sprite, ... , 7.sprite gibi.

$d000 : 0. sprite X pozisyonu.
$d001 : 0. sprite Y pozisyonu.
$d002 : 1. sprite X pozisyonu.
$d003 : 1. sprite Y pozisyonu.
$d004 : 2. sprite X pozisyonu.
$d005 : 2. sprite Y pozisyonu.
.
.
.
$d00e : 7. sprite X pozisyonu.
$d00f : 7. sprite Y pozisyonu.

$d010 : X koordinatı hi-byteı (*)
$d015 : Spriteların açık/kapalı olma durumları (*)

v.s. adresler kullanılır. Şimdi hepsini yazmiicam.

* : $d010, $d015 gibi byteların her biti bir spriteı ifade eder. Önrek olarak $d015'in değeri 5 ise 5'n binary karşılığı

5 = %00000101

olduğuna göre 0. ve 2. spritelar ekranda gösterilecektir.

Spritelarla ilgili tüm detaylar programcının el kitabında mevcuttur.

Spriteların avantajları nedir?

* Ekrana çok hızlı bir şekilde basılıp ekranda hareket ettirilebilirler.
* Sprite-Sprite ve Sprite-Arkaplan çarpışmaları kolayca kontrol edilebilir. Oyunlar için vazgeçilmez bir özelliktir bu.
* Borderlar açıldığı taktirde borderlara basılabilirler.
* Yatay ve dikeyde 2x uzatılabilirler. Dikey'de $d017 stretch tekniğiyle 2x'den fazla da uzatılabilirler.

Spriteların dezavantajları nelerdir?

* Raster zamanlamalarını bozarlar
* Tek satırda maksimum 8 taneyle sınırlıdırlar.

Bob nedir diyecek olursan...

Boblar grafik ekranı ya da karakter set üzerine basılan grafik parçalarıdır. Bir nevi spriteların software emulasyonu diyebiliriz. Boblar her zaman kare ya da dikdörtgen biçiminde hafızada saklanırlar. Ancak ekrana basılırken genellikle ORlanarak basıldıkları için, boş kısımlarından arkaplan gözükür yani arkaplanı bozmazlar.

Eğer bir bob birebir sprite gibi kullanılmak istenirse arkaplanı bozmamasının iki yolu vardır.

1) Arkaplan her framede baştan çizdirilsin. Bu metod PC'de sıkça kullanılır. Ancak C64'de genellikle hız yetersizliğinden dolayı kullanılmamaktadır.
2) 64 kullanılan yol ikinci yoldur. Yalnızca bobun basılacağı alan hafızada bir yere (bir buffera) kopyalanır ve bob basılıp ekranda gösterildikten sonra bir sonraki frame için yalnızca bu alan geri kopyalanır.

Ancak boblar her zaman arkaplanlar üzerine basılmaz elbette ki. Bazı efektlerde her defasında ekran temizlenerek boblar basılırken bazı efektlerde ise (örneğin unlimited bob) ekran hiç silinmeden boblar basılır.

Peki bob basmak ne demektir? Bob basmanın nesi zordur?

Bob dediğimiz grafik parçasını biz hafızada 8x8'lik karakterler içinde tutarız. x,y koordinatı olarak 16,24 koordinatına bob basmak kolaydır. 2 karakter sağa, 3 karakter aşağıya bas... Buraya kadar tamam. Ancak 19, 28 koordinatında olay biraz daha karmaşık hale geliyor. Bu sefer yine 2 karakter sağa ve 3 karakter aşağıya basıyoruz ancak bir de karakterin içindeki dataları 19-16 = 3 bit sağa ve 28 - 24 = 4 bit ağağıya kaydırmamız gerekiyor. Yani 8'in katları olmayan durumlar için özel çözümler düşünmek gerekiyor.

Bir gün benim evime gelirsen sana detaylı olarak BOB olayını anlatabilirim. Spritelar çok daha kolaydır, kendin çözersin. Ama BOB bir parça matematik ister.

Yazmaktan yoruldum. Bunu bir tutorial haline getirip dergiye yazarım belki de kim bilir :)



Bakkada'ya attığım mesajda atladığım bir noktayı tamamlayayım. Bobların boyutları 8x8 ile sınırlı değil elbette ki ancak 8'in katları olarak hafızada saklanırlar genellikle. Örnek olarak boblar:

8x8
16x8
8x16
16x16
24x16
16x24
24x24
32x32
48x48

gibi boyutlatda hafızada saklanırlar. Ekrana basarken ise bit shift edildiklerinde taşma yapacakları için hep bir karakter daha fazla alan da işin içine girer. Örnek olarak

24x24 pixellik yani 3x3 karakterlik bir bob ekrana basılırken 32x32 pixellik yani 4x4 karakterlik bir alan üzerinden işlem yapılır.

64'de Spritelar ve Boblar

« Yanıtla #1 : 02.12.2005 14:52:30 »
Hızlı düğmeleri aç

vigo


  • Ziyaretçi
arkadaşlar ufak bir düzetme yapmak istiyorum;

BOB diye bahsettimiz şeyi aslen AMiGA'nın terimi olup;

Blitter OBjects yada Blitter OBject

anlamındadır... ama skate'in bob demekten kastını sanırım hepimiz anladık... yani aslında amigadan başka hiç bi makinede BOB olmasına imkan yoktur teorik olarak... Çünki blitter çipi sadece amigada vardır...

ufak bi not olarak algılarsanız sevinirim...

saygılar...

64'de Spritelar ve Boblar

« Yanıtla #2 : 02.12.2005 15:49:45 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
Alıntı
Originally posted by vigo@Dec 2 2005, 02:52 PM
arkadaşlar ufak bir düzetme yapmak istiyorum;

BOB diye bahsettimiz şeyi aslen AMiGA'nın terimi olup;

Blitter OBjects yada Blitter OBject

anlamındadır... ama skate'in bob demekten kastını sanırım hepimiz anladık... yani aslında amigadan başka hiç bi makinede BOB olmasına imkan yoktur teorik olarak... Çünki blitter çipi sadece amigada vardır...

ufak bi not olarak algılarsanız sevinirim...

saygılar...
[post=3229]Quoted post[/post]
[/b]
Blitter Object teriminin ilk Amiga'yla kullanılıp kullanılmadığını bilmiyorum ancak günümüzde tüm platformlarda BOB Blitter Object anlamına gelir ve kullanılır. Amiga'nın hardware blitterıyla ilgisi yok güncel kullanımın. Örnek:

http://hem.spray.se/sinemaker/info.htm

Bu adresteki BobCtl6.OCX bir Visual Basic OCX'i ve tam anlamıyla Blitter Object olarak kullanılıyor. 64'de de efekt olarak BOB aynen BOB olarak vardır ancak software emulationdır.

64'de Spritelar ve Boblar

« Yanıtla #3 : 02.12.2005 15:58:01 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
Bakın bu da PC'de kullanılan ve BOB içeren başka bir library

http://www.informit.com/articles/article.a...1&seqNum=4&rl=1

Bunun daha üst sürümleri DirectX de destekliyor.

64'de Spritelar ve Boblar

« Yanıtla #4 : 02.12.2005 17:12:01 »
Hızlı düğmeleri aç

vigo


  • Ziyaretçi
zaten bende senin bunu "amiga" terimi olarak kullanmadıını, demoscene'de artık bir tür simge/literatür olduunu belirtmiştim.
ama orjinali amiga ya aittir... bilin diye yazdım...

64'de Spritelar ve Boblar

« Yanıtla #5 : 02.12.2005 23:20:25 »
Hızlı düğmeleri aç

spaztica

İleti: 1.493

Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
çok doğru demiş vigo; "blit" terimi zaten amiga'nın şişman agnus teyzesinin içinde yer alan hamallıktan sorumlu blitter'ın var ettiği -hatta blitter'ın tek  var olma sebebi maskelenmiş memory alanları koypalamaktır- bir terim olduğunu özellikle belirtmek isterim.

sonradan başkaları almıştır, evirmiştir çevirmiştir bu terimi, ama maskelenmiş alan kopyalama/doldurmada ve çizgi çizmede blitter abi'nin üzerine adam tanımam; harbi delikanlıdır kendisi, feci çizik atar, üzülürsünüz sonra.

64'de Spritelar ve Boblar

« Yanıtla #6 : 03.12.2005 07:33:48 »
Hızlı düğmeleri aç

Wisdom

İleti: 134

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
"BOB" terimi bugun yaygin olarak tum platformlarda kullaniliyor olsa da kokeni yukarida da bahsedildigi gibi Amiga'daki Blitter OBject'ten geliyor.

"Blitting" ise genel bir grafik programlama terimidir; bir grafik alaninin baska bir grafik alanina transfer edilmesi islemi. Bu ikinci grafik alani genelde aktif grafik buffer'imiz oldugundan, "ekrana blit etmek" vb. ifadeleri sikca duyariz.

Daha adamakilli bir tanimlama icin:

http://en.wikipedia.org/wiki/Blitting

http://en.wikipedia.org/wiki/Blitter