[#1] Programowanie grafiki 2d
Witam!
Ostatnio próbowałem swoich sił w programowaniu grafiki 2d, wykorzystujac standardowa bibliotekę graficzna. Poza wgrywaniem grafiki przetworzonej na język C oraz zabawie z spritami, bob-ami natknałem na pewien problem, polegajacy na łaczenie standardowej grafiki ze obiektem ruchomym (ogólnie rzec biorac).

Mianowicie jak uzyskać efekt "schowania się" za kolumnę, mur lub innym statycznym obiektem, aby po załadowaniu sprite-a, bob-a lub innego obiektu ruchomego nie "nachodził" na niego.

Pozdrawiam serdecznie wszystkich Forumowiczów!

[#2] Re: Programowanie grafiki 2d

@robwor, post #1

Niestety nie wiem jak wygląda to w C, jednakże generalnie wydaje mi się, że rzecz polega na kolejności wyświetlania sprite'ów. Aby nasz bohater mógł schować się za daną kolumną - myślę, że wystarczy ową kolumnę także przedstawić w postaci sprite'a i nałożyć tą kolumnę na bohatera. Innymi słowy wyświetlane są na tle co cykl: bohater a następnie elementy zasłaniające. Prawdopodobnie nie trzeba ich odświeżać - nie wiem jak działa to w Twoim programie. Nie znam też charakterystyki wyświetlania sprite'ów w C. Tak przynajmniej działa to pod BlitzBasic bądź Amosem, w których pisałem kiedyś (niestety niedokończone) gry na Amigę. Podziel się tym co masz ;) jestem ciekawy owoców pracy :).

Życzę powodzenia! Uwielbiam grafikę 2d i sam w tej materii mocno siedzę ostatnimi czasy ;).

[#3] Re: Programowanie grafiki 2d

@robwor, post #1

Jeżeli mówimy o bezpośrednim wykorzystaniu układów graficznych Amigi, można wykorzystać tryb "double playfield". Wtedy mamy dwa plany grafiki nazwijmy to statycznej. Duszki można ustawiać niezależnie aby pojawiały się przed oboma planami, albo między jednym a drugim. Wtedy jeżeli ustawisz ducha między planami, a kolumny dasz na pierwszym, duszek będzie się automatycznie chował za kolumnami. Wadą trybu double playfield jest zmniejszenie ilości dostępnych kolorów.

[#4] Re: Programowanie grafiki 2d

@robwor, post #1

Witam,

Proponuje abyś przeczytał Hardware RKM http://amigadev.elowar.com/read/ADCD_2.1/Hardware_Manual_guide/node0155.html na początek.

W każdym razie w przypadku sprajtów sprawa jest prosta, sprajt z numerem 0 zasłania pozostałe, innymi słowy gdy masz 8 sprajtów na ten przykład 16x16 ( wypełniony kwadrat ) w tej samej pozycji to widzisz tylko sprajta zerowego. Jeśli chodzi o sprajty i playfield to trzeba pokombinować z priorytetami ( najprościej opisał to Kraszan ). Dosyć dobrze jest to wyjaśnione w książce Kurs Asemeblera Adam Doligalskiego. Z tego co pamiętam to ustawiasz który playfield ( parzysty bądź nieparzysty ) ma wyższy priorytet nad grupą sprajtów.

Jeśli chodzi o boby to cudów nie ma. Zależy który kiedy został narzucony na ekran. Jeśli masz 5 bobów ( 1,2,3,4,5 ) i rzucasz je na ekran w kolejności 5, 4,3,2,1 to bob numer 1 zasłania pozostałe ( o ile są w tej samej pozycji ).

Jeśli chcesz uzyskać efekt chowania się za kolumnę to najprościej zrobić z kolumny boba i narzucać go jako ostatniego( jeśli używasz tylko bobów ). Jeśli używasz bobów i sprajtów to kolumne robisz ze sprajta ( albo ze sprajtów ) i ustawiasz odpowiedni priorytet nad playfieldem. Jeśli używasz sprajtów to musisz z góry zaplanować że, sprajty 0,1,2,3 to ewentualne kolumny i uzwać sprajta 4 na przykład.
Jak widzisz jest wiele możliwości, które tak naprawdę zależą co konkretnie chcesz osiągnąć i jakim kosztem.

Jeśli coś jest niejasne to daj znak.

Pozdrawiam

[#5] Re: Programowanie grafiki 2d

@asman, post #4

Dzięki za wyczerpujący opis i pomoc! :) Na pewno wykorzystam te rady!

Oczywiście dałem tylko prosty przykład kolumny jako obiektu prostokątnego, mając w perspektywie np. zbudowanie miasta, w którym można schować się za budynkiem lub wejść w boczną uliczkę itp.

Zastanawiałem sie jak to zrobić, aby poruszający się obiekt ruchomy po prostu nie nadpisał obiektu, który powinien go zasłonić.

Na razie nie mam więcej pytań. Zobaczę w praktyce jak to wygląda. :)
[#6] Re: Programowanie grafiki 2d

@robwor, post #5

jak chcesz zeby duszek byl za kolumna to najpierw rysujesz duszka potem kolumne jak chcesz zeby przed to najpierw ryszujesz kolumne potem duszka.
[#7] Re: Programowanie grafiki 2d

@SzaryWilk, post #6

Z Ciebie to jest duch Szary Wilku ;)

Przez dłuższą chwilę na forum Twej obecności nie widziałem chyba, że coś mnie ominęło.

Generalnie jeżeli o grafice 2d i sprite'ach mowa... TO JA CHCĘ ZOBACZYĆ KILKA GRAFIK!! ;) Proszę o cokolwiek na skrzynkę pocztową, oczywiście nie naruszę żadnych praw autorskich! Po prostu robię grafikę do gry Ondorr Drakmo (www.drakmo.ovh.org) i chętnie chciałbym zobaczyć jeszcze prace innych grafików 2d tak jak w przypadku Arcymaga.

Pozdrawiam!

[#8] Re: Programowanie grafiki 2d

@SzaryWilk, post #6

Chciałbym dołączyć się do dyskusji i napisać, że można zoptymalizować rysowanie obiektów ruchomych i kolumn poprzez detekcję kolizji. Polega to na tym, że jeśli obiekt ma znajdować się za kolumną to ta dopiero jest rysowana przed nim wtedy, gdy wchodzi w kolizję z tym obiektem. W przeciwnym wypadku kolumna w ogóle nie jest odrysowywana przez co oszczędza się czas koprocesora.



Ostatnia modyfikacja: 02.01.2010 01:30:26
[#9] Re: Programowanie grafiki 2d

@BagoZonde, post #7

Moze odrazu jakis ogolnodostepny link a nie tam kazdemu na oko z osobna :)
[#10] Re: Programowanie grafiki 2d

@Minniat, post #8

chyba, ze masz z 200 obiektow wtedy powodzenia ;]

Najlepiej byloby zrobic tak jak jest to sprzetowo rozwiazane na snes. Sprzetowe warstwy, dzialajace na bardzo podobnej zasadzie, jak wspomniany dual-playfield.
Masz tam do 7 warstw i dzieki temu mozesz na kazdej warstwie nanosic odpowiednie efekty, np. efekt deszczu etc.



Ostatnia modyfikacja: 02.01.2010 11:39:48



Ostatnia modyfikacja: 02.01.2010 11:41:04
[#11] Re: Programowanie grafiki 2d

@selur, post #9

A tak naprawdę byłoby fajną sprawą jakby pojawił się jakiś kurs na temat tworzenia gier na Amisię. Mógłby poruszać temat podstawy ładowania screenów, wykorzystanie sprite-ów, bobów itp. Obsługa klawiatury,joya i myszki. Mógłby też technikę wykonywania różnych efektów graficznych takich jak np. fade-out, fade in itp.

Mogłoby się pojawić w "szkółce" obok kursów C oraz MUI. Na pewno jak ktoś się zna na rzeczy i ma trochę wolnego czasu mógłby w paru linijkach podzielić się wiedzą na ten temat. Na pewno taki minikurs mógłby zachęcić innych chętnych do nauki pisania gier na Amigę i taką wiedzę miałby na wyciągnięcie ręki. :)
[#12] Re: Programowanie grafiki 2d

@robwor, post #11

Pomysl zacny, ale wiadomo jak to z naszym wykonaniem :)

Przede wszystkim nalezaloby zrobic solidny porzadek w tym dziale.
Dodac chociaz kilka poddzialow typu "C" , "C++", "Assembler", "Open GL" ..itd itp... bo znalezienie czegokolwiek w tym koglu-moglu, jest naprawde sporym wysilkiem.
[#13] Re: Programowanie grafiki 2d

@robwor, post #11

A tak naprawdę byłoby fajną sprawą jakby pojawił się jakiś kurs na temat tworzenia gier na Amisię.

Na jaką Amigę? W tej chwili pojęcie "Amiga" jest diabelnie szerokie i techniki stosowane na jednej Amidze są absolutnie nie do przyjęcia na innej Amidze (i odwrotnie). Na dzisiejszych Amigach gry pisze się właściwie tak jak na wczorajszych pecetach. :) Chociaż jesteśmy z tyłu to jednak wszystko poszło bardzo mocno do przodu.

[#14] Re: Programowanie grafiki 2d

@selur, post #12

Po lewej jest lista kategorii ("W dziale"). Zgadzam się, że każdy dział z artykułami powinien wyglądać nieco inaczej, mam kilka pomysłów na zmiany, ale ciekaw jestem czy użytkownicy też mają jakieś propozycje co do układu tych podstron.

[#15] Re: Programowanie grafiki 2d

@MDW, post #13

Chociaż jesteśmy z tyłu to jednak wszystko poszło bardzo mocno do przodu

cały "duch" amigowości zawarty w jednym zdaniu :D Niestety większośc z nas to pecetowcy z Amigą używaną na weekendy i od święta...

[#16] Re: Programowanie grafiki 2d

@robwor, post #11

To zależy na jakim poziomie doświadczenia jesteś. Taka szkółka dotyczyć by mogła pisania gier na wielu płaszczyznach.

Z tego co napisałeś to podejrzewam, że chodzi Ci o klasyczne produkcje bitmapowe na Amigę. Takie możesz uzyskać w bardzo łatwy sposób w AMOSie, jest tam mnóstwo specjalizowanych funkcji przeznaczonych do wymienionych przez Ciebie celów.:

- ładowanie screenów (w AMOSie piszesz Open Screen i Load Iff)
- wykorzystanie spriteów i bobów (jest szereg komend do tego przeznaczonych)
- obsługa klawiatury, joya i myszki (jak wyżej)
- efekty fade-in, fade out (w AMOSie piszesz po prostu jedno słowo: Fade n gdzie n to prędkość i sprawa załatwiona).

Także AMOS mógłby Cię usatysfakcjonować. Możesz poszukać jakiegoś podręcznika do AMOSa w Internecie, jest ich kilka. Ja mam (i właśnie do niego zaglądam) - autorstwa Pawła Chadzińskiego. Jedyną wadą AMOSa jest tylko to, że nie skorzystasz z możliwości nowszych Amig z kościami AGA.
Alternatywą dla AMOSa jest jeszcze BlitzBasic, ale tu się nie wypowiem bo nie miałem z nim styczności.

Kolejna płaszczyzna to programowanie np. w ANSI C lub C++ pod system. Zaletą takiego rozwiązania jest większa kontrola nad programem, jak i możliwość skorzystania z możliwości kości AGA i kart graficznych i po prostu "bycie na czasie", czyli dostęp do stale rosnącej bazy bibliotek, przeznaczonych do przeróżnych zastosowań. Dokumentację do tego uzyskasz z wielu podręczników udostępnionych w Internecie oraz płytach kompaktowych w rodzaju Amiga Developer v1.1/v2.1 (zawiera pełną dokumentację systemu Amigi). Musisz najpierw zaznajomić się z językiem C (asembler pomijam, bo nie jest on konieczny). Podobne do wymienionych wyżej operacje uzyskasz w bardziej złożony sposób poprzez wywoływanie funkcji systemowych.
Na przykład do obsługi klawiatury, joya i myszki użyjesz tzw. urządzeń:

- gameport.device - do joysticka,
- input.device - do klawiatury i myszki
- timer.device - do liczenia czasu

Każdy device trzeba najpierw otworzyć funkcją OpenDevice() z biblioteki exec.library i można korzystać z jej dobrodziejstw. Wszystko dokładnie opisane jest w Amiga Developer CD v2.1. Jeśli chcesz otworzyć ekran i załadować obrazek korzystasz z funkcji OpenScreenTagList() intuition.library i ładujesz plik IFF poprzez funkcje iffparse.library. Jest to naprawdę całkiem proste jak już się zaznajomisz. Efekt fade uzyskasz zmieniając kolory palety w pętli poprzez LoadRGB32(). Polecam zaznajomienie się z programowaniem pod system Amigi, jest to naprawdę przydatna rzecz.

Kolejna płaszczyzna to programowanie z użyciem bibliotek takich jak SDL (Simple Directmedia Layer). Sam z nich nie korzystałem, jednak wiem że służą temu, by w prosty sposób obsługiwać grafikę 2D, 3D, muzykę i dźwięk i właśnie klawiaturę, myszkę. Wadą tej biblioteki jest jednak to, że programy z nich korzystające będą działać wolno na starszych modelach Amig, zaletą jest to że Twoja gra będzie mogła działać na szerokiej gamie platform.

Reasumując wybierz płaszczyznę Ci odpowiadającą i zaznajom się z nią, a będziesz mógł pisać gry we własnym zakresie. Taka szkółka mogłaby być czymś fajnym, sam się trochę rozpisałem, może, jak znajdę czas, to napiszę co nieco o programowaniu gier pod system Amigi, bo sam ostatnio dużo piszę na Amidze.

Pozdrawiam.



Ostatnia modyfikacja: 03.01.2010 23:50:45
[#17] Re: Programowanie grafiki 2d

@Minniat, post #16

czesc Minniat

tak z innej beczki... Na kiedy przewidujesz ukonczenie swojego dziela ? :)
[#18] Re: Programowanie grafiki 2d

@Minniat, post #16

Gdyby to chodziło o AMOS-a, to w ogóle nie tworzył bym tego postu. Chodzi mi pisanie gier w języku c lub c++, aby miało zgodność systemową. Jeżeli są istotne różnice w programowaniu na różnych amiplatformach, to też można by zaznaczyć jak ta sprawa wygląda na konkretnym systemie.

Kolejna płaszczyzna to programowanie z użyciem bibliotek takich jak SDL

Właśnie tego chciałbym uniknąć, jeżeli chciałbym napisać gierkę pod classica, bo opinie o SDL na tym forum są różne. Najczęściej są opinie, że zamula sprzęt.

Oczywiście nie chcę aby ten post był traktowany "roszczeniowo", ale jakby ktoś chciał napisać kiedyś jakiś fajny tutek, to można by pomyśleć nad tym tematem.

Oczywiście też interesuje mnie (i będę szukał informacji) na temat programowania grafiki pod CGX oraz Picasso.

A przy okazji jakiego systemu graficznego używa OS4, Morphos. Czy programuje się na te systemy tylko pod karty graficzne?
[#19] Re: Programowanie grafiki 2d

@robwor, post #18

MorphOS używa CyberGraphX 5 (CGX jest zintegrowany z systemem). Oczywiście znaczna część funkcji z graphics.library działa również, z tym, że nie zawsze najszybciej.

[#20] Re: Programowanie grafiki 2d

@robwor, post #18

OS4.x używa Picasso96 do obsługi grafiki 15-24bit, ale nadal korzysta się z graphics.library do podstawowych operacji graficznych. Do tego załączona do systemu jest od razu biblioteka Warp3D do niskopoziomowej grafiki trójwymiarowej, przy czym na sieci dostępne są także biblioteki bazujące na OpenGL (MiniGL) do szerszych zastosowań w grafice 3D.

[#21] Re: Programowanie grafiki 2d

@robwor, post #18

Witam,

Ja mam pytanie. Pod jaką minimalną maszynę chcesz pisać ? Chodzi mi jaka najsłabsza konfiguracja wchodzi w gre ( na przykład goła a1200, znaczy się naga :) ).

Pozdrawiam

[#22] Re: Programowanie grafiki 2d

@asman, post #21

Oczywiście jako minimum: Amigę 1200 (może też być rozszerzona Fastem 8Mb, czy Powerką). Na razie "badam grunt" czy w ogóle bym podołał napisania jakiejś gierki czy aplikacji z powodu różnic środowisk programistycznych między PC a Amigą, żebym potem nie musiał porzucić, bo okazało się że za wysoko sobie postawiłem poprzeczkę.

Chociaż z drugiej strony "wypłynięcie na nowe wody" może być nawet ciekawe i tak to traktuje. :)
[#23] Re: Programowanie grafiki 2d

@robwor, post #22

To moze razem cos z Miniatem sklepiecie ? Chlopak sie dwoi i troi. Widac ze potrzebuje pomocy, moze w koncu ktos mu poda pomoca dlon.. :)
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