kategoria: Grafika
[#1] DYNAMIC SPRITE SCREEN - nowy? tryb graficzny
W Amidze 500 mozna wyswietlic obrazek na spritach jako podklad i w demach jest to szeroko stosowane najczęściej jako 64pixelowy 16kolorowy dodatek graficzny. Umożliwia to całkowicie niezależną prezentacje efektu na głównym ekranie co upraszcza jego zaprogramowanie. Poniżej przeczytacie jak można uzyskać bardziej kolorowy obraz o podwójnej szerokości

Amiga ma 8 spritow podzielone na 4 pary dzielące kolory o następujących ograniczeniach.

Sprite 0 ma osobne 3 rejestry kolorow (plus wspolny) po wlaczeniu ATTACH bitu
Sprite 1 ma osobne 3 rejestry kolorow (plus wspolny) po wlaczeniu ATTACH bitu
Sprite 2 ma osobne 3 rejestry kolorow (plus wspolny) ale dzieli je ze sprite`m 3
Sprite 4 ma osobne 3 rejestry kolorow (plus wspolny) ale dzieli je ze sprite`m 5
Sprite 6 ma osobne 3 rejestry kolorow (plus wspolny) ale dzieli je ze sprite`m 7

Każdy sprite ma 16pxeli szerokości i dowolna wysokość, zatem całkowita szerokosc obrazka to 128pixeli.

W obrebie każdego sprite mamy do dyspozycji 4 kolory (razem z tlem). W optymalnych warunkach można w ten sposób uzyskać 16 niezależnych kolorów w linii, a każda nowa linia może mieć inne kolory.

Zakładamy ze sprity nie nakladaja sie tylko sa ulozone na ekranie jeden za drugim. Kolejnosc dowolna. Mozna miec dwa sprity tej samej pary jeden po drugim czyli 32pixele tych samych 4 kolorow, a mozna miec je przedzielone innych spritem, czyli 16pikseli i kolorów jeden pary, potem 16px i kolorów drugiej pary i znowu potem wracamy do pierwszej

W praktyce okazuje się ze najlepiej wychodzi prezentacja zaawansowanych grafik z przodka Amigi czyli 8bitowego Atari, a to ze względu na podobieństwo ograniczeń. Obrazki rysowane w ten sposób po konwersji prawie nie odbiegają od oryginałów. Tutaj przykład konwersji 35kolorowego dzieła PIESIU/AGENDA.



W przypadku AGA sposób pokazany powyżej również zadziała z tym ze tam mamy możliwość wykorzystania dużo szerszych spritów.

Konwersja do tego trybu będzie umieszczona w HAMconvert, ale już można zrobić to ręcznie dzieląc obrazki na paski.

Ostatnia aktualizacja: 21.08.2019 14:55:30 przez Trachu

Ostatnia aktualizacja: 21.08.2019 14:56:23 przez Trachu
[#2] Re: DYNAMIC SPRITE SCREEN - nowy? tryb graficzny

@Trachu, post #1

Jak dorzucisz do tego Coppera to ugrasz jeszcze trochę szerokości zmieniając pozycję/wskaźnik sprite'a.

Zastanawiałem się swojego czasu nad takim trybem, ale rysowanie w nim czegoś poza statycznymi obrazkami jest dość upierdliwe. Bo masz bitmapę nie po ludzku, czyli wiersze kolejno po sobie, tylko w pamięci najpierw dwa bitplane'y pasa szerokiego na 16px, potem drugiego, itd. Rysowanie po tym blitterem do najprzyjemniejszych/najszybszych nie należy.
[#3] Re: DYNAMIC SPRITE SCREEN - nowy? tryb graficzny

@teh_KaiN, post #2

Nie wiem do końca co masz na myśli ale zmiana samej pozycji spowoduje ze w innej pozycji ekranu pojawi się ten sam kawalek obrazu. Dublowanie obrazka jest bez sensu, z kolei na przeladowanie danych każdego rejstru sprita zabraknie DMA.

Co do drugiej kwesti to nie masz czasem możliwości przestawienia pointera odczytu pamięci dla każdego z bitplanow sprite z osobna?
W przypadku zwykłego trybu masz możliwość dowolnego kształtowania układu danych w pamięci reszte robi automat.
[#4] Re: DYNAMIC SPRITE SCREEN - nowy? tryb graficzny

@Trachu, post #3

Nie, masz jeden wskaźnik na dane sprajta. One z natury są w formacie interleaved, czyli po jednej linii bitplane'u A masz linię bitplane'u B, potem znowu linia A, potem B itd. Dodatkowo z przodu i z tyłu muszą się znaleźć dwa słowa kontrolujące recykling sprajta, jeśli używasz ich w trybie automatycznym.

Nie chodzi mi o dublowanie tego samego, tylko o to że możesz copperem podmienić pozycję sprajta oraz dane jakie ma wyświetlać (nie w formie wskaźnika jak w trybie auto tylko wrzucając mu bezpośrednio dane obecnej linii w rejestry dataa i datab). Rysując nową linię, copper znowu musi zmienić pozycję/dane sprajta na jego oryginalną pozycję z podbitym Y + dane nowej linii, potem po jego wyświetleniu znowu zmienić X/dane dla jego zrecyklowanego wariantu, itd.

Robiłem takie coś przy okazji swojej gry OpenFire wyświetlając różne wieżyczki obok siebie. Potrzebujesz na to jeśli dobrze pamiętam 4 MOVE'y (dwa na zmianę pozycji X i dwa na dataa/datab), więc jesteś w stanie zrecyklować sprajt najszybciej co 32px. Tylko że wtedy dość mocno copperem zapychasz DMA i całość szybko się staje nieopłacalna. No i paletę dość mocno ograniczasz, bo nie zdążysz wtedy copperem podmienić także rejestrów od kolorów by mieć 4 zupełnie inne kolory na zrecyklowanym sprajcie.

Ostatnia aktualizacja: 21.08.2019 16:53:24 przez teh_KaiN
[#5] Re: DYNAMIC SPRITE SCREEN - nowy? tryb graficzny

@teh_KaiN, post #4

Dokladnie potrzebujemy 3 MOVE czyli przy 4 bitplanach podmianę grafiki sprite wraz z repozycja można robic co 24pixele. Jest to bardzo fajnie pokazane tutaj:


Generalnie masz racje repozycja spritow zzera mnóstwa DMA, sek w tym żeby ich nierepozycjonujac cos ciekawego uzyskac.
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem