--------------------fragmenty w >...< boldem-------------------- AMOS_3 Kiedyô panowaîa moda na róûnego rodzaju dema z wykorzystaniem animacji obiektów trójwymiarowych (3D). A moûe panuje nadal? Krzysztof Prusik 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 zainstalowaê 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 teorii 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. Obiekty 3D 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------------------- Programik 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. Double Buffer : Autoback 0 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: ^-Td Dir "OM:OM/Examples" Td Load "Enterprise.3DO" ^+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â: Td Object NR,NAZWA$,X,Y,Z,KX,KY,KZ 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: ^-Td Object 1,"Enterprise.3DO",0,0,1000,5000,4000,-4000 Td Object 2,"Enterprise.3DO",0,0,500,0,0,0 ^+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: ^-Td Object 0,"",0,0,0,0,0,0 ^+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 Td Angle Rel NR,RX,RY,RZ który powoduje obrót obiektu numer NR ( -- 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: 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 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.