home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga MA Magazine 1997 #3
/
amigamamagazinepolishissue03-1
/
ma_1995
/
09
/
ami943.txt
< prev
next >
Wrap
Text File
|
1997-04-07
|
8KB
|
231 lines
--------------------fragmenty w >...< boldem--------------------
AMOS_3
<lead>Kiedyô panowaîa moda na róûnego rodzaju dema z
wykorzystaniem animacji obiektów trójwymiarowych (3D). A moûe
panuje nadal?
<a>Krzysztof Prusik
<txt>W jednym z pierwszych artykuîów zaprezentowaîem namiastkë
ruchu w przestrzeni. Obiekty byîy przezroczyste i nie moûna ich
byîo dowolnie projektowaê. Trudno jednak od programu napisanego
caîkowicie w AMOS-ie wymagaê czegoô wiëcej. Przecieû tworzenie
systemu do animacji zajëîoby nie kilka stron MA, lecz o wiele
wiëcej.
Zaîamaê rëce? Nigdy! Gdy sië dobrze przyjrzeê dyskietkom
instalacyjnym programu AMOS Professional, moûna tam znaleúê coô,
co nosi nazwë AMOS_3D. Gdy sië z tym czymô zapoznamy, szybko
stwierdzimy, ûe zaspokoi to nasze oczekiwania dotyczâce pisania
programów demonstracyjnych z wykorzystaniem efektów 3D. To coô,
to tzw. extension, czyli rozszerzony zestaw rozkazów do AMOS-a,
stworzony przez firmë Voodoo Software. Ûeby móc z tego korzystaê,
trzeba to najpierw
<sr>zainstalowaê
<txt>Jak to sië robi? Po prostu przegrywa sië plik AMOS_3D.lib z
katalogu Extensions, dysku AMOSPro_Productivity2:, do katalogu
APSystem, na dysk AMOSPro_System:, a nastëpnie odpala Set
Interpreter z menu Config. Potem wybiera sië Load Default Config,
a nastëpnie Set Loaded Extensions. Na dowolnej wolnej pozycji
wpisuje sië "AMOSPro_3D.lib" i zapisuje konfiguracjë na dysk
(Save Config), po czym resetuje komputer i odpala AMOS jeszcze
raz.
Uwaga! Jeûeli wystâpi bîâd (zrobiliômy coô nie tak), AMOS po prostu
nie wystartuje. W takim wypadku, ûeby przywróciê jego zdolnoôci
do normalnej pracy, trzeba przegraê zapasowâ kopië konfiguracji do
S:AMOSPro_Interpreter_Config. Jeûeli takiej nie masz, to patrz
artykuî "Co to jest AMOS?".
A teraz, skoro juû wszystko przygotowane do wytëûonej pracy,
nieco
<sr>teorii
<txt>Po zainstalowaniu rozszerzenia 3D, AMOS otrzyma do swojej
dyspozycji nowy zestaw rozkazów (wszystkie poprzedzone sâ
przedrostkiem Td, np. >Td Object<).
Ogólna idea tworzenia programu, z wykorzystaniem tych (nowych)
rozkazów, jest taka: tworzymy obiekt za pomocâ specjalnego
programu Object Modeller (patrz rys. 1.), a nastëpnie wczytujemy
go do pamiëci swoim programem w AMOS-ie i krëcimy nim na
wszelkie moûliwe sposoby (w koïcu po to go stworzyliômy, ûeby
sië ruszaî).
------------Rys. 1. Ekran z modellera---------------------------
Blok programu, wykorzystujâcego rozszerzenie AMOS_3D, powinien
wyglâdaê mniej wiëcej tak:
1. Zainicjowanie trybu dwóch stron graficznych (to juû znamy z
artykuîu Grafika "wektorowa" -- rozkazy: >Double Buffer :
Autoback 0<).
2. Wczytanie wszystkich obiektów 3D do pamiëci (przecieû nie
bëdziemy tego robiê w trakcie animacji).
3. Zdefiniowanie obiektów w ôwiecie 3D (czyli po prostu
wyznaczenie im punktu startu w naszej fikcyjnej przestrzeni oraz
inne takie; mówiâc prosto: inicjalizacja obiektów).
4. Zdefiniowanie punktu patrzenia w ôwiecie 3D (skâd bëdziemy
patrzeê na naszâ wspaniaîâ animacjë).
5. Zdefiniowanie palety kolorów (np. instrukcjâ Palette).
6. ANIMACJA, najlepiej w pëtli:
a) jeden krok przeksztaîceï dokonywanych na obiektach (zmiana ich
umiejscowienia w ôwiecie 3D oraz wszelkiego rodzaju rotacje);
b) wyczyszczenie ukrytego ekranu (np. >Cls 0<), a nastëpnie
wyôwietlenie na nim obiektów w nowych poîoûeniach (rozkaz >Td
Redraw<);
c) spowodowanie, ûe ekran ukryty stanie sië widoczny, a widoczny
-- ukryty (rozkaz >Screen Swap<);
d) synchronizacja wyôwietlania (rozkaz >Wait Vbl<) i powrót do
podpunktu a.
<sr>Obiekty 3D
<txt>sâ wyôwietlane na oddzielnym ekranie, caîkowicie niezaleûnym
od podstawowego. Sâ to oczywiôcie bryîy geometryczne dowolnego
ksztaîtu, mniej lub bardziej skomplikowane (to juû zaleûy od
nas). Obiekty zbudowane sâ z linii (krawëdzi), a miejsca pomiëdzy
liniami (ôciany), zamalowane sâ wybranym kolorem. Na obiektach
moûna dokonywaê przeksztaîceï typu: zmiana poîoûenia, rotacja,
rozciâgniëcia, metamorfozy itp. Patrz rys. 2.
-----------Rys. 2. Obiekty 3D-----------------------
Obiekt numer 0 jest punktem poîoûenia obserwatora. Moûna na nim
wykonywaê te same operacje co na innych obiektach. Jego specyfika
objawia sië tym, ûe zmieniajâc jego poîoûenie (lub dokonujâc jego
rotacji), powodujemy zmianë poîoûenia wszystkich innych obiektów.
Aby to zrozumieê, spróbujmy sobie wyobraziê, ûe obiekt numer 0 to
nasze oczy. Zmieniajâc punkt, z którego bëdziemy patrzeê,
powodujemy przemieszczenie sië fikcyjnego ôwiata 3D. Dokonujâc
np. rotacji obiektu 0 w lewo, powodujemy, ûe nasz îepek (i
automatycznie oczy), bëdâ nachylone troszkë w lewo, i caîy ôwiat
wyda nam sië nieco przekrzywiony (wszystko jest wzglëdne).
Sîynne dema, z poruszaniem sië po fikcyjnym ôwiecie
trójwymiarowym, to nic innego, jak ciâgîa zmiana punktu
obserwatora (ûadne inne przeksztaîcenia nie sâ dokonywane, oprócz
sporadycznych wypadków, np. przelatujâcy samolot czy otwieranie
drzwi). Radzë to zrozumieê, bo czësto o wiele proôciej jest
przesunâê punkt patrzenia na rzeczywistoôê 3D, niû dokonaê
przesuniëcia ogromnej liczby obiektów.
------------Rys. 3. Punkt patrzenia-------------------
<sr>Programik
<txt>Trochë to dziwne, ale grafika trójwymiarowa w AMOS-ie jest
wyôwietlana na zupeînie oddzielnym ekranie. Jeszcze inny ekran,
to ekran-tîo (background), specjalny dla rzeczywistoôci 3D. Ûeby
byîo ômiesznie, ekran-tîo definiuje sië jako fragment dowolnego
innego otworzonego ekranu AMOS-a. Zamotaîem trochë? Cóû, sam sië
juû w tym wszystkim pogubiîem. Proponujë wiëc od razu przejôê do
rzeczy i napisaê proôciutki programik, obracajâcy coô na ekranie.
Moûe nas to oôwieci.
Dziwnie sië pisze program, nie znajâc rozkazów, ale moûe sobie
jakoô poradzimy, poznajâc tylko te, które nam bëdâ w danej chwili
potrzebne. Spójrzmy na ogólny schemat programu i rozpocznijmy
punkt po punkcie realizacjë "postulatów".
Ad. 1: Inicjalizacja trybu dwóch ekranów.
<l>Double Buffer : Autoback 0
<txt>Ad. 2: Wczytanie obiektu. Jak to sië robi? Najpierw ustala
sië katalog, z którego bëdziemy wczytywaê obiekty rozkazem >Td
Dir KATALOG$<, a nastëpnie wczytuje jakiô do pamiëci komputera
rozkazem >Td Load NAZWA$<. Jeûeli dysponujemy programem Object
Modeller, to mamy równieû okoîo 200 przykîadów obiektów.
Zapisane sâ one w katalogu OM/Examples. Moûemy wiëc na przykîad
zrobiê coô takiego:
<l>^-Td Dir "OM:OM/Examples"
Td Load "Enterprise.3DO"
<txt>^+Ad. 3: Inicjalizacja obiektów. Wczytaliômy zaledwie jeden
obiekt, ale moûe by go tak wyôwietliê w dwóch miejscach na
ekranie? To juû bëdzie ciekawsze. Najpierw jednak zapoznajmy sië
z komendâ inicjalizujâcâ:
<l>Td Object NR,NAZWA$,X,Y,Z,KX,KY,KZ
<txt>Gdzie:
>NR< -- numer obiektu na ekranie;
>NAZWA$< -- nazwa obiektu (ta sama, która zostaîa uûyta przy
okazji wykorzystania instrukcji >Td Load<);
>X,Y,Z< -- wspóîrzëdne obiektu w naszej fikcyjnej przestrzeni 3D;
>KX,KY,KZ< -- kâty nachylenia do odpowiednich osi. Liczba 16384
odpowiada tu kâtowi 90 stopni (jest to trochë dziwne, ale ma
sens, bo dziëki temu, nie wykorzystujâc czasochîonnych liczb
rzeczywistych, zapewniamy sobie duûâ dokîadnoôê w wyliczaniu
kâtów).
Do naszego przykîadowego programu moûemy dodaê nastëpujâce dwie
linie:
<l>^-Td Object 1,"Enterprise.3DO",0,0,1000,5000,4000,-4000
Td Object 2,"Enterprise.3DO",0,0,500,0,0,0
<txt>^+Ad. 4: Punkt patrzenia. Nie komplikujmy sobie ûycia i jako
punkt patrzenia przyjmijmy poczâtek ukîadu wspóîrzëdnych z kâtami
nachylenia do osi X, Y, Z równieû 0, 0, 0. Ok? No to:
<l>^-Td Object 0,"",0,0,0,0,0,0
<txt>^+Ad. 5: Paleta kolorów. Darujmy sobie to.
Ad. 6: Animacja. Myôlë, ûe proste (i zarazem efektowne) bëdzie po
prostu wykonywanie rotacji we wszystkich trzech kierunkach, z
róûnymi krokami. Moûna do tego wykorzystaê np. rozkaz
<l>Td Angle Rel NR,RX,RY,RZ
<txt>który powoduje obrót obiektu numer NR (<RX,RY,RZ> --
przyrosty kâtowe, o jakie ma sië zmieniê nachylenie obiektu w
kaûdej z trzech osi X, Y, Z).
Nasza pëtelka moûe wiëc wyglâdaê nastëpujâco:
<l>
RX=1 : RY=10 : RZ=20
Repeat
Td Angle Rel 1,RX,RY,RZ
Cls 0 : Td Redraw
Screen Swap
Wait Vbl
Until Mouse Key
<txt>W przyszîym odcinku AMOS-a, jeûeli nie wydarzy sië nic
nieprzewidzianego (tj. nie padnie mi komputer -- odpukaê),
zamieszczony zostanie opis najwaûniejszych (wszystkich, oprócz
nie znanych mi) rozkazów rozszerzenia AMOS_3D.