home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1997 #3 / amigamamagazinepolishissue03-1 / ma_1995 / 09 / ami943.txt < prev    next >
Text File  |  1997-04-07  |  8KB  |  231 lines

  1. --------------------fragmenty w >...< boldem--------------------
  2.  
  3.  
  4. AMOS_3
  5.  
  6. <lead>Kiedyô panowaîa moda na róûnego rodzaju dema z
  7. wykorzystaniem animacji obiektów trójwymiarowych (3D). A moûe
  8. panuje nadal?
  9.  
  10. <a>Krzysztof Prusik
  11.  
  12. <txt>W jednym z pierwszych artykuîów zaprezentowaîem namiastkë
  13. ruchu w przestrzeni. Obiekty byîy przezroczyste i nie moûna ich
  14. byîo dowolnie projektowaê. Trudno jednak od programu napisanego
  15. caîkowicie w AMOS-ie wymagaê czegoô wiëcej. Przecieû tworzenie
  16. systemu do animacji zajëîoby nie kilka stron MA, lecz o wiele
  17. wiëcej.
  18.  
  19. Zaîamaê rëce? Nigdy! Gdy sië dobrze przyjrzeê dyskietkom
  20. instalacyjnym programu AMOS Professional, moûna tam znaleúê coô,
  21. co nosi nazwë AMOS_3D. Gdy sië z tym czymô zapoznamy, szybko
  22. stwierdzimy, ûe zaspokoi to nasze oczekiwania dotyczâce pisania
  23. programów demonstracyjnych z wykorzystaniem efektów 3D. To coô,
  24. to tzw. extension, czyli rozszerzony zestaw rozkazów do AMOS-a,
  25. stworzony przez firmë Voodoo Software. Ûeby móc z tego korzystaê,
  26. trzeba to najpierw
  27.  
  28. <sr>zainstalowaê
  29.  
  30. <txt>Jak to sië robi? Po prostu przegrywa sië plik AMOS_3D.lib z
  31. katalogu Extensions, dysku AMOSPro_Productivity2:, do katalogu
  32. APSystem, na dysk AMOSPro_System:, a nastëpnie odpala Set
  33. Interpreter z menu Config. Potem wybiera sië Load Default Config,
  34. a nastëpnie Set Loaded Extensions. Na dowolnej wolnej pozycji
  35. wpisuje sië "AMOSPro_3D.lib" i zapisuje konfiguracjë na dysk
  36. (Save Config), po czym resetuje komputer i odpala AMOS jeszcze
  37. raz.
  38.  
  39. Uwaga! Jeûeli wystâpi bîâd (zrobiliômy coô nie tak), AMOS po prostu
  40. nie wystartuje. W takim wypadku, ûeby przywróciê jego zdolnoôci
  41. do normalnej pracy, trzeba przegraê zapasowâ kopië konfiguracji do
  42. S:AMOSPro_Interpreter_Config. Jeûeli takiej nie masz, to patrz
  43. artykuî "Co to jest AMOS?".
  44.  
  45. A teraz, skoro juû wszystko przygotowane do wytëûonej pracy,
  46. nieco
  47.  
  48. <sr>teorii
  49.  
  50. <txt>Po zainstalowaniu rozszerzenia 3D, AMOS otrzyma do swojej
  51. dyspozycji nowy zestaw rozkazów (wszystkie poprzedzone sâ
  52. przedrostkiem Td, np. >Td Object<).
  53.  
  54. Ogólna idea tworzenia programu, z wykorzystaniem tych (nowych)
  55. rozkazów, jest taka: tworzymy obiekt za pomocâ specjalnego
  56. programu Object Modeller (patrz rys. 1.), a nastëpnie wczytujemy
  57. go do pamiëci swoim programem w AMOS-ie i krëcimy nim na
  58. wszelkie moûliwe sposoby (w koïcu po to go stworzyliômy, ûeby
  59. sië ruszaî).
  60.  
  61. ------------Rys. 1. Ekran z modellera---------------------------
  62.  
  63. Blok programu, wykorzystujâcego rozszerzenie AMOS_3D, powinien
  64. wyglâdaê mniej wiëcej tak:
  65.  
  66. 1. Zainicjowanie trybu dwóch stron graficznych (to juû znamy z
  67. artykuîu Grafika "wektorowa" -- rozkazy: >Double Buffer :
  68. Autoback 0<).
  69.  
  70. 2. Wczytanie wszystkich obiektów 3D do pamiëci (przecieû nie
  71. bëdziemy tego robiê w trakcie animacji).
  72.  
  73. 3. Zdefiniowanie obiektów w ôwiecie 3D (czyli po prostu
  74. wyznaczenie im punktu startu w naszej fikcyjnej przestrzeni oraz
  75. inne takie; mówiâc prosto: inicjalizacja obiektów).
  76.  
  77. 4. Zdefiniowanie punktu patrzenia w ôwiecie 3D (skâd bëdziemy
  78. patrzeê na naszâ wspaniaîâ animacjë).
  79.  
  80. 5. Zdefiniowanie palety kolorów (np. instrukcjâ Palette).
  81.  
  82. 6. ANIMACJA, najlepiej w pëtli:
  83.  
  84. a) jeden krok przeksztaîceï dokonywanych na obiektach (zmiana ich
  85. umiejscowienia w ôwiecie 3D oraz wszelkiego rodzaju rotacje);
  86.  
  87. b) wyczyszczenie ukrytego ekranu (np. >Cls 0<), a nastëpnie
  88. wyôwietlenie na nim obiektów w nowych poîoûeniach (rozkaz >Td
  89. Redraw<);
  90.  
  91. c) spowodowanie, ûe ekran ukryty stanie sië widoczny, a widoczny
  92. -- ukryty (rozkaz >Screen Swap<);
  93.  
  94. d) synchronizacja wyôwietlania (rozkaz >Wait Vbl<) i powrót do
  95. podpunktu a.
  96.  
  97. <sr>Obiekty 3D
  98.  
  99. <txt>sâ wyôwietlane na oddzielnym ekranie, caîkowicie niezaleûnym
  100. od podstawowego. Sâ to oczywiôcie bryîy geometryczne dowolnego
  101. ksztaîtu, mniej lub bardziej skomplikowane (to juû zaleûy od
  102. nas). Obiekty zbudowane sâ z linii (krawëdzi), a miejsca pomiëdzy
  103. liniami (ôciany), zamalowane sâ wybranym kolorem. Na obiektach
  104. moûna dokonywaê przeksztaîceï typu: zmiana poîoûenia, rotacja,
  105. rozciâgniëcia, metamorfozy itp. Patrz rys. 2.
  106.  
  107. -----------Rys. 2. Obiekty 3D-----------------------
  108.  
  109. Obiekt numer 0 jest punktem poîoûenia obserwatora. Moûna na nim
  110. wykonywaê te same operacje co na innych obiektach. Jego specyfika
  111. objawia sië tym, ûe zmieniajâc jego poîoûenie (lub dokonujâc jego
  112. rotacji), powodujemy zmianë poîoûenia wszystkich innych obiektów.
  113.  
  114. Aby to zrozumieê, spróbujmy sobie wyobraziê, ûe obiekt numer 0 to
  115. nasze oczy. Zmieniajâc punkt, z którego bëdziemy patrzeê,
  116. powodujemy przemieszczenie sië fikcyjnego ôwiata 3D. Dokonujâc
  117. np. rotacji obiektu 0 w lewo, powodujemy, ûe nasz îepek (i
  118. automatycznie oczy), bëdâ nachylone troszkë w lewo, i caîy ôwiat
  119. wyda nam sië nieco przekrzywiony (wszystko jest wzglëdne).
  120.  
  121. Sîynne dema, z poruszaniem sië po fikcyjnym ôwiecie
  122. trójwymiarowym, to nic innego, jak ciâgîa zmiana punktu
  123. obserwatora (ûadne inne przeksztaîcenia nie sâ dokonywane, oprócz
  124. sporadycznych wypadków, np. przelatujâcy samolot czy otwieranie
  125. drzwi). Radzë to zrozumieê, bo czësto o wiele proôciej jest
  126. przesunâê punkt patrzenia na rzeczywistoôê 3D, niû dokonaê
  127. przesuniëcia ogromnej liczby obiektów.
  128.  
  129. ------------Rys. 3. Punkt patrzenia-------------------
  130.  
  131. <sr>Programik
  132.  
  133. <txt>Trochë to dziwne, ale grafika trójwymiarowa w AMOS-ie jest
  134. wyôwietlana na zupeînie oddzielnym ekranie. Jeszcze inny ekran,
  135. to ekran-tîo (background), specjalny dla rzeczywistoôci 3D. Ûeby
  136. byîo ômiesznie, ekran-tîo definiuje sië jako fragment dowolnego
  137. innego otworzonego ekranu AMOS-a. Zamotaîem trochë? Cóû, sam sië
  138. juû w tym wszystkim pogubiîem. Proponujë wiëc od razu przejôê do
  139. rzeczy i napisaê proôciutki programik, obracajâcy coô na ekranie.
  140. Moûe nas to oôwieci.
  141.  
  142. Dziwnie sië pisze program, nie znajâc rozkazów, ale moûe sobie
  143. jakoô poradzimy, poznajâc tylko te, które nam bëdâ w danej chwili
  144. potrzebne. Spójrzmy na ogólny schemat programu i rozpocznijmy
  145. punkt po punkcie realizacjë "postulatów".
  146.  
  147. Ad. 1: Inicjalizacja trybu dwóch ekranów.
  148.  
  149. <l>Double Buffer : Autoback 0
  150.  
  151. <txt>Ad. 2: Wczytanie obiektu. Jak to sië robi? Najpierw ustala
  152. sië katalog, z którego bëdziemy wczytywaê obiekty rozkazem >Td
  153. Dir KATALOG$<, a nastëpnie wczytuje jakiô do pamiëci komputera
  154. rozkazem >Td Load NAZWA$<. Jeûeli dysponujemy programem Object
  155. Modeller, to mamy równieû okoîo 200 przykîadów obiektów.
  156. Zapisane sâ one w katalogu OM/Examples. Moûemy wiëc na przykîad
  157. zrobiê coô takiego:
  158.  
  159. <l>^-Td Dir "OM:OM/Examples"
  160.  
  161. Td Load "Enterprise.3DO"
  162.  
  163. <txt>^+Ad. 3: Inicjalizacja obiektów. Wczytaliômy zaledwie jeden
  164. obiekt, ale moûe by go tak wyôwietliê w dwóch miejscach na
  165. ekranie? To juû bëdzie ciekawsze. Najpierw jednak zapoznajmy sië
  166. z komendâ inicjalizujâcâ:
  167.  
  168. <l>Td Object NR,NAZWA$,X,Y,Z,KX,KY,KZ
  169.  
  170. <txt>Gdzie:
  171.  
  172. >NR< -- numer obiektu na ekranie;
  173.  
  174. >NAZWA$< -- nazwa obiektu (ta sama, która zostaîa uûyta przy
  175. okazji wykorzystania instrukcji >Td Load<);
  176.  
  177. >X,Y,Z< -- wspóîrzëdne obiektu w naszej fikcyjnej przestrzeni 3D;
  178.  
  179. >KX,KY,KZ< -- kâty nachylenia do odpowiednich osi. Liczba 16384
  180. odpowiada tu kâtowi 90 stopni (jest to trochë dziwne, ale ma
  181. sens, bo dziëki temu, nie wykorzystujâc czasochîonnych liczb
  182. rzeczywistych, zapewniamy sobie duûâ dokîadnoôê w wyliczaniu
  183. kâtów).
  184.  
  185. Do naszego przykîadowego programu moûemy dodaê nastëpujâce dwie
  186. linie:
  187.  
  188. <l>^-Td Object 1,"Enterprise.3DO",0,0,1000,5000,4000,-4000
  189.  
  190. Td Object 2,"Enterprise.3DO",0,0,500,0,0,0
  191.  
  192. <txt>^+Ad. 4: Punkt patrzenia. Nie komplikujmy sobie ûycia i jako
  193. punkt patrzenia przyjmijmy poczâtek ukîadu wspóîrzëdnych z kâtami
  194. nachylenia do osi X, Y, Z równieû 0, 0, 0. Ok? No to:
  195.  
  196. <l>^-Td Object 0,"",0,0,0,0,0,0
  197.  
  198. <txt>^+Ad. 5: Paleta kolorów. Darujmy sobie to.
  199.  
  200. Ad. 6: Animacja. Myôlë, ûe proste (i zarazem efektowne) bëdzie po
  201. prostu wykonywanie rotacji we wszystkich trzech kierunkach, z
  202. róûnymi krokami. Moûna do tego wykorzystaê np. rozkaz
  203.  
  204. <l>Td Angle Rel NR,RX,RY,RZ
  205.  
  206. <txt>który powoduje obrót obiektu numer NR (<RX,RY,RZ> --
  207. przyrosty kâtowe, o jakie ma sië zmieniê nachylenie obiektu w
  208. kaûdej z trzech osi X, Y, Z).
  209.  
  210. Nasza pëtelka moûe wiëc wyglâdaê nastëpujâco:
  211.  
  212. <l>
  213. RX=1 : RY=10 : RZ=20
  214.  
  215. Repeat
  216.  
  217.     Td Angle Rel 1,RX,RY,RZ
  218.  
  219.     Cls 0 : Td Redraw
  220.  
  221.     Screen Swap
  222.  
  223.     Wait Vbl
  224.  
  225. Until Mouse Key
  226.  
  227. <txt>W przyszîym odcinku AMOS-a, jeûeli nie wydarzy sië nic
  228. nieprzewidzianego (tj. nie padnie mi komputer -- odpukaê),
  229. zamieszczony zostanie opis najwaûniejszych (wszystkich, oprócz
  230. nie znanych mi) rozkazów rozszerzenia AMOS_3D.
  231.