Animowanie kamery

Należy zawsze pamiętać o tym, że animować (czyli poddawać działaniu węzłom interpolacji) możemy nie tylko zdefininiowane przez nas obiekty ale prawie wszystkie elementy języka VRML. Bardzo ciekawe efekty można uzyskać interpolując np. pola określające kolor czy skalowanie. Naprawdę warto eksperymentować z animacją różnego rodzaju pól i wartości - efekty mogą być zaskakujące.

Możemy również animować pozycję i obrót kamery (czyli węzeł Viewpoint) tworząc animacje czy nawet całe filmy.

Jak to zrobić? Przyjrzyjcie się jeszcze raz przykładowi anim2.wrl.

Dodajmy teraz definicję węzła Viewpoint w tym samym węźle grupującym co definicję ruchomego stożka.

...

DEF Ruchomy Transform {
                    translation 5 0 0
                    children [
                       Viewpoint { position 0 0 5
                                    description "Podroz ze stozkiem"}
                        Shape {
                            appearance Appearance {
                                            material Material {
                                                 diffuseColor 1 0 0
                                                             }
                              }
                            geometry Cone { }
 

                              }
                             ]
                          }
...

Zobaczmy na efekt.


Kolejne węzły Viewpoint mogą być uaktywniane wskutek działania użytkownika pobudzającego do działania czujniki zdefiniowane na scenie. Na przykład Węzeł ProximitySensor możemy zastosować gdy użytkownik zbliża się do ruchomego chodnika, węzeł TouchSensor w windzie, gdy użytkownik wybiera piętro, na które chce jechać.

Bardzo ważną rzeczą jest aby przy tego rodzaju "punktów patrzenia" zawierały one w swojej definicji pole jump o wartości FALSE. Tylko wtedy będziemy się mogli zabrać razem z chodnikiem czy pojechać windą. Poniższy przykład prezentuje skrzyżowanie powyższych propozycji. Używa węzła ProximitySensor do uruchomienia prostej windy.

...

DEF Winda Transform {
   translation 0 0.5 -10
   children [
     Shape { appearance Appearance { material Material {
                                    diffuseColor 0 0 1 }}
             geometry Box { size 4 0.1 4 }
           }
     DEF WindaProx ProximitySensor { size 3 10 3 }
     DEF WindaView Viewpoint { jump FALSE }
     ]
}

DEF Czas TimeSensor {loop FALSE
                     cycleInterval 10}

DEF WindaTrasa PositionInterpolator {
     key [ 0, 0.5, 1]
     keyValue [ 0 0.5 -10, 0 20 -10, 0 0.5 -10 ]
}

ROUTE WindaProx.enterTime TO Czas.startTime
ROUTE Czas.fraction_changed TO WindaTrasa.set_fraction
ROUTE WindaTrasa.value_changed TO Winda.set_translation
ROUTE WindaProx.isActive TO WindaView.set_bind


Kolejnym bardzo dobrym zastosowaniem VRML jest tworzenie małych animacji, reklam zastępujących animowane GIF-y, lub nawet całych filmów. Rozmiar plików VRML zawierających animację jest znikomy w porównaniu z przytoczonymi animowanymi GIF-ami. Przykładem takiej małej animacji może być świat(ek) znajdujący się na stronie wstępu informujący o możliwości ściągnięcia niniejszego kursu w ZIP-ie. Plik offline.wrl zajmuje jedynie 2 KB!!!

Poniżej zobaczycie przykład półtoraminutowego filmiku (11 KB !!!) o ucieczce pwnego avatara z Ziemi ku jego ojczystej planecie. Rozsiądźcie się w fotelach, zgaście światło...

Start