Start | Super Packer | Atari Graphics Studio | Graph2Font | Mads | MadPascal | Atari Zines | YouTube http://madteam.atari8.info  
MEMBERS
PRODUCTIONS
S C E N E
G A M E S
T O O L S
V B X E
GRAPHICS
WORK IN PROGRESS
Bubble Shooter
HARDWARE
Snes2Joy / Pad4Aatari / TOM rev2
Sio2SD / Pajero
Sio2SD / Rocky
Stereo / Pajero
GTIA / Psychol
ANTIC + VBXE test
ARTICLES / MAGAZINES
DEMO EFFECTS
LINKS
   

Zajec/Sword
Jak stworzyć ciekawe efekty
Megatazin #2

Witam wszystkich zainteresowanych pisaniem dem i intr. Sam nie znam się na asemblerze lecz wiem jak większość efektów jest zrobiona od strony teoretycznej. Pierwszym opisanym przeze mnie efektem jest ...

Animacja wektorowa 2D

Gdy chcemy zrobić animację wektorową w dwóch wymiarach to musimy użyć do obrotu punktu wzór z pierwszej klasy szkoły średniej:

Xr=X0+(X-X0)*cosA+(Y-Y0)*sinA
Yr=X0+(Y-X0)*cosA+(X-Y0)*sinA

gdzie:

X0, Y0 - współrzędne punktu obrotu
X, Y   - współrzędne obracanego punktu
A      - kąt o jaki obracamy
Xr, Yr - współrzędne punktu po obrocie

Powstaje pytanie skąd w asemblerze wziąć wartości sinusa i cosinusa kąta. Otóż potrzebne liczby umieszczamy w tablicy. Do wykonania tablicy można wykorzystać program w języku wyższego poziomu np. Turbo Basicu.

Animowany lejek

Ten efekt przedstawia animowane okręgi "schodzące" do wewnątrz lejka lub "rozchodzące" się z zewnątrz lejka. Efekt jest niczym innym jak animacją na kolorach a animację uzyskuje się poprzez złudzenie optyczne. Podstawową sprawą jest stworzenie takiego rysunku aby na nim była możliwość animacji na kolorach. Rysunek taki najłatwiej stworzyć w Turbo Basicu dlatego też poniższy program który tworzy "lejek" został napisany w Turbo Basicu.

10 GRAPHICS 15:C=1:R=96:X0=79:P=2:CC=1
12 FOR YO=191 TO 95 STEP -1:COLOR C
14 CIRCLE XO,YO,R:C=C+1:R=R-1
16 IF C=4 THEN C=1
18 NEXT Y0:P=2
20 RESTORE 28:FOR Q=0 TO 2:READ A,B,C
22 D=CC*16:A=A+D:B=B+D:C=C+D
24 POKE 708,A:POKE 709,B:POKE 710,C
26 PAUSE P:NEXT Q:GOTO 20
28 DATA 2,4,6,4,6,2,6,2,4

Zmieniając wartość 'P' zmieniamy prędkość animacji, natomiast parametrem 'CC' zmieniamy kolor lejka animowanego (tutaj 1 kolor szary). Niedokładności w rysunku czarne pixle można zmniejszyć dopisując linie

13 CIRCLE X0,Y0,R-1

Lecz najlepiej pozostałe czarne pixele zamalować ręcznie pod dowolnym programem graficznym.

Rozmycie obrazu

Można uzyskać bardzo prosto, wystarczy uśrednić kolor wszystkich pixeli na ekranie, tzn. kolor pixela o wsp. X,Y równy jest średniej arytmetycznej kolorów pixeli, jego otaczających.

Wyostrzenie obrazu

Uzyskamy podobnie jak rozmycie jedynie z taką zmianą, że kolor pixela o wsp. X,Y równy jest równaniu:

C=S+(S-W)

gdzie:

S - stara wartość aktualnego punktu
W - średnia arytmetyczna kolorów punktów
    bezpośrednio sąsiadujących z aktualnym
C - nowa intensywność koloru aktualnego punktu
Animacja nieskończenie wielu obiektów tzw. "Bobs-y"

Aby uzyskać tzw. bobsy należy umieć wyświetlić szybko kulę na ekranie w trybie $0E Antica (gdyż on najlepiej nadaje się do tego efektu). Kulę oczywiście rysujemy sobie sami w dowolnym programie graficznym, a jej rozmiary nie powinny przekroczyć 16x16 pixeli. Następnym krokiem jest ułożenie sobie tablicy sinusów i cosinusów. Teraz zostaje nam napisać tylko program. Kula ma poruszać się po dowolnej krzywej, którą najlepiej wyliczyć ze wzoru Lisa-żu, który brzmi:

Xn=int(sin(X*3.14/180)*R)+W
Yn=int(cos(Y*3.14/180)*R)+W

gdzie:

Xn     - nowa pozycja x
Yn     - nowa pozycja y
X      - stara pozycja x
Y      - stara pozycja y
R i W  - parametry dowolne(>0 i <100)	
         od których zależny jest przebieg krzywej

Jeżeli już wyliczyliśmy nowe X i Y dla kuli, teraz musimy znaleźć w pamięci komputera miejsce na 4 ekrany po czym rysujemy kulę o wsp. X,Y na ekranie 1, obliczamy nowe X,Y, przełączamy na 2 ekran i rysujemy kule o nowych wsp. X,Y ponownie obliczamy X i Y, przełączamy na 3 ekran, liczymy ponownie X,Y przełączamy na 4 ekran i rysujemy, liczymy nowe X,Y i przełączamy na 1 ekran i tak w kółko...

Animacja - morphing punktowy

Morphing punktowy polega na płynnym "przechodzeniu" jednej figury punktowej w drugą. Przed wykonaniem animacji liczymy dla każdego punktu

dx = (x2 - x1) / ik
dy = (y2 - y1) / ik

gdzie:

(x2,y2) - punkt docelowy
(x,y)   - punkt przechodzący
dx,dy   - przyrosty dla współrzędnych
          punktu, na każdy krok animacji
ik      - (ile kroków) ilośc kroków animacji

W czasie animacji wykonujemy kolejno:

1. Zetrzyj punkt (x,y)
2. Policz: x=x+dx, y=y+dy
3. Postaw punkt (x,y)

Operacje 1-3 wykonujemy (ik) razy.

Oczywiście zakładam, że ma się napisaną szybką procedurę stawiania punktu na ekranie, która to jest podstawą dla tego efektu.

Na tym efekciku zakończę
ten artykuł.

Zajec/Sword

 

madteam.atari8.info © MadTeam, hosted: www.atari8.info