
Widok/Kamera
Jednym z podstawowych elementów animacji jest poruszanie się z miejsca na miejsce - czyli edycja pozycji widoku. Dlatego też na początku zajmiemy się w jaki sposób ustawiać kamerę w odpowiednim kierunku, a następnie przejdziemy do animacji.Definicja widoku może być definiowana na dwa sposoby:
- obiekt <LookAt> pozwala na prostą definicję widoku; w ramach konfiguracji dostępne są 5 właściwości punktu na który patrzymy:
- szerokość geograficzna - <longitude>
- wysokość geograficzna - <latitude>
- odległość kamery od obiektu - <range>
- wysokość punktu na powierzchnią - <altitude>
- nachylenie kamery - <tilt>
- obrót kamery wokół punktu - <heading>
<LookAt> <longitude>16.380712</longitude> <latitude>50.335302</latitude> <altitude>3</altitude> <heading>225</heading> <tilt>125</tilt> <range>20</range> <altitudeMode>relativeToGround</altitudeMode> </LookAt>
- obiekt <Camera> daje pełny dostęp do widoku poprzez 6 parametrów - jednak wówczas decydujemy o pozycji kamery a nie obiektu na który patrzymy; parametry są takie same jak dla obiektu LookAt jednak dotyczą pozycji kamery - wówczas uzyskujemy jeszcze dostęp do obrotu kamery (roll)
- szerokość geograficzna - <longitude>
- wysokość geograficzna - <latitude>
- wysokość punktu na powierzchnią - <altitude>
- nachylenie kamery- <tilt>
- kierunek kamery - <heading> - domyślnie 0 - północ
- skos kamery - <roll>
<Camera> <longitude>16.380712</longitude> <latitude>50.335302</latitude> <altitude>3</altitude> <heading>225</heading> <tilt>125</tilt> <roll>10</roll> <altitudeMode>relativeToGround</altitudeMode> </Camera>
W przypadku, kiedy nie używamy obrotu kamery (tilt i roll) nie ma znaczenia, który obiekt zdefiniujemy. Łatwiej natomiast poruszać się jest z obiektem LookAt - ponieważ dokładnie wiemy, w które miejsce kamera będzie skierowana (a dokładniej na który punkt). Obiekt Camera natomiast umożliwia wszystkie osie obrotu kamery - co może być wymagane przy bardziej zaawansowanych animacjach.
Jako przykłady do artykułu przygotowałem trzy animacje związane z obrotem kamery oraz wykorzystaniem zmiennych właściwości - umieszczona na Google Code.
Animacja/Tour
Animację rozpoczynamy znacznikiem <gx:Tour>. Następnie umieszczamy znacznik <gx:Playlist>, w którym umieszczamy już konkretne akcje. A oto spis co możemy konkretnie definiować w playliście:- poruszanie się do punktu <gx:FlyTo>
- przerwy w trakcie lotu <gx:Wait>
- zmiana właściwości obiektów <gx:AnimatedUpdate>
<gx:Tour>
<gx:Playlist>
<gx:FlyTo>
..
</gx:FlyTo>
<gx:Wait>
..
</gx:Wait>
<gx:AnimatedUpdate>
..
</gx:AnimatedUpdate>
</gx:Playlist>
</gx:Tour>gx:FlyTo - przemieszczanie się
Definiując akcję przemieszczania się w głównym węźle możemy umieścić:
- czas trwania akcji <gx:duration> - w sekundach (mogą być podane ułamki)
- typ przejścia do nowego punktu <gx:flyToMode> - dopuszczalne są dwie wartości:
- smooth - pozwala na przechodzenie od punktu do punktu bez całkowitego hamowania kamery przy poszczególnych punktów
- bounce - zarówno na starcie jak i na końcu punktu prędkość kamery jest zerowa
- obiekt widoku <LookAt> lub <Camera>
<gx:FlyTo>
<gx:duration>2.0</gx:duration>
<gx:flyToMode>bounce</gx:flyToMode>
<Camera>
<longitude>16.380529</longitude>
<latitude>50.335254</latitude>
<altitude>2</altitude>
<heading>90</heading>
<tilt>71.600075</tilt>
<range>2</range>
<altitudeMode>relativeToGround</altitudeMode>
</Camera>
</gx:FlyTo>
gx:Wait - przerwa
Jeżeli w trakcie animacji chcemy dokonać chwilowej przerwy wówczas wykorzystujemy obiekt <gx:Wait>, a jako właściwość <gx:duration> podajemy ilość sekund przerwy.
<gx:Wait> <gx:duration>1.0</gx:duration> </gx:Wait>
gx:AnimatedUpdate - zarządzanie obiektami
Podczas animacji możemy chcieć mieć dostęp do modyfikacji różnych ustawień obiektów - w tym także do ich dodawania lub usuwania. W tym celu wykorzystujemy element <gx:AnimatedUpdate>. Umożliwia on modyfikację różnych elementów także w zmiennym czasie - np. skalowanie ikonki placemark'u. Wewnątrz tagu możemy umieścić dwie właściwości <gx:duration> jako czas trwania oraz <Update>, w którym definiujemy wprowadzane zmiany.
Dopuszczalne parametry dla tagu <Update> to:
- <Change> - zmiana właściwości
- <Create> - tworzenie obiektu
- <Delete> - usuwanie obiektu
Dla tagu <Update> konieczne jest także zdefiniowanie właściwości <targetHref>, która wskazuje na plik KML lub KMZ, w którym jest dokonywana zmiana - może on także pozostać pusty, jednak koniecznie musi być znaleźć się w znaczniku.
Zmiana właściwości polega na podaniu nowej wartości właściwości do obiektu o zadanym id. Przykładem może być zmiana właściwości skali lub kolorów w arkuszu stylów - wówczas w nowej definicji stylów wystarczy podać id jako atrybut targetId.
<gx:AnimatedUpdate>
<gx:duration>2.0</gx:duration>
<Update>
<targetHref></targetHref>
<Change>
<PolyStyle targetId="polystyle8">
<color>00ff0000</color>
</PolyStyle >
</Change>
<Change>
<LineStyle targetId="linestyle8">
<color>00ff0000</color>
</LineStyle>
</Change>
</Update>
</gx:AnimatedUpdate>
W przypadku tworzenia obiektu jako targetId podajemy docelowy element - w którym zostanie utworzony obiekt. Usuwanie traktuje atrybut targetId jako id obiektu, który chcemy usunąć.
<gx:AnimatedUpdate>
<gx:duration>0.0</gx:duration>
<Update>
<targetHref></targetHref>
<Create>
<Document targetId="main">
<Placemark id="placemark1">
<styleUrl>#styl1</styleUrl>
<visibility>1</visibility>
<Polygon>
<extrude>0</extrude>
<altitudeMode>relativeToGround</altitudeMode>
<outerBoundaryIs>
<LinearRing>
<coordinates>
2.3438905,48.853428,1
2.343953,48.853428,1
2.343953,48.8534066,1
2.3438905,48.8534066,1
2.3438905,48.853428,1
</coordinates>
</LinearRing>
</outerBoundaryIs>
</Polygon>
</Placemark>
</Document>
</Create>
</Update>
</gx:AnimatedUpdate>
Należy zwrócić szczególną uwagę na sposób wykonania animacji zmiany właściwości - są one wykonywane jednocześnie - początek tego typu animacji zaczyna się od momentu zakończenia się ostatniej animacji flyTo lub Wait. Dokładny sposób kolejności wykonywania jest bardzo dobrze opisany w dokumentacji Google.
Jako przykłady do artykułu przygotowałem trzy animacje związane z obrotem kamery oraz wykorzystaniem zmiennych właściwości - umieszczona na Google Code.
Brak komentarzy:
Prześlij komentarz