Określanie punktów patrzenia na świat (węzeł Viewpoint)

Węzeł Viewpoint jest bardzo przydatnym narzędziem w poruszaniu się w świecie VRML. Co prawda przeglądarki są coraz lepsze i coraz łatwiej można świat wirtualny eksplorować, jednak ciągle jest to uciążliwe (zwłaszcza na wolniejszych komputerach). Węzeł Viewpoint daje możliwość zdefiniowania stałych punktów, do których możemy się udać korzystając z opcji Viewpoint interfejsu przeglądarki. Węzeł Viewpoint wygląda następująco:

Viewpoint { 
  eventIn      SFBool     set_bind
  exposedField SFFloat    fieldOfView    0.785398 
  exposedField SFBool     jump           TRUE
  exposedField SFRotation orientation    0 0 1 0  
  exposedField SFVec3f    position       0 0 10 
  field        SFString   description    ""
  eventOut     SFTime     bindTime
  eventOut     SFBool     isBound
}

Najważniejszymi polami w tym węźle są position (typ SFVec3f) i orientation (typ SFRotation). W pierwszym z nich określacie miejsce, a w drugim kierunek, w którym będziecie z tego miejsca patrzeć. W polu description w cudzysłowach wpisujecie nazwę dla definiowanego miejsca. Pole jump typu SFBool jeśli ma wartość FALSE informuje przeglądarkę, że przeskakując z jednego punktu do drugiego, musi ona uważać, czy obserwator nie dotknie jakiegoś czujnika, który zmieni wygląd sceny. Ciekawe jest również pole fieldOfView (typ SFFloat), w którym definiujemy kąt szerokości patrzenia z danego miejsca. Wartości w tym polu podajemy w radianach i muszą być >0 i <3.14.

A teraz przykład. Do sceny zdefiniowanej w odcinku poświęconym oświetleniu teraz dodamy definicję węzła Viewpoint aby móc nasz sześcian obejrzeć z konkretnych, przez nas zaprogramowanych miejsc. Węzeł Viewpoint musimy zdefiniować przynajmniej dwukrotnie, gdyż pierwszy z nich staje się automatycznie domyślnym miejscem, w którym się znajdujemy zaraz po załadowaniu świata. Miejsce pierwsze "Start" jest zbliżone do tego, które mieliśmy w poprzednich przykładach. Natomiast miejsce drugie - "SpotLight" zdefiniowane zostało tak, aby obejrzeć ten bok sześcianu, który oświatlany jest przez światło SpotLight (pamiętacie?). Załadujcie świat View.wrl, a pod prawym klawiszem myszki w opcji Viewpoint znajdziecie zdefiniowane miejsca (Uwaga! W przeglądarce Cosmo Player 2.0 beta 1 między zdefiniowanymi miejscami przemieszczamy się korzystając z odpowiednich ikon interfejsu użytkownika przeglądarki) .

#VRML V2.0 utf8 

Viewpoint {
 fieldOfView 0.8
 jump        TRUE
 orientation 0 0 0 0
 position    0 0 10
 description "Start"
}

Viewpoint {
 fieldOfView 0.8
 jump        TRUE
 orientation 0 1 0 1.6
 position    20 0 -5
 description "SpotLight"
}
 

SpotLight {
 ambientIntensity  0 
 attenuation       1 0 0 
 beamWidth         1.570796 
 color             1 0 0 
 cutOffAngle       0.785398 
 direction         -1 0 0 
 intensity         1 
 location          10 0 0 
 on                TRUE 
 radius            100 

Transform {
    rotation    1 0 0 0.5
    translation 0 0 -5
 
    children [
            Shape { 
                appearance Appearance {
                material Material {
                          emissiveColor 0 1 0
                          transparency  0
                          specularColor 0 0.25 0.5
                         }
                }
                geometry Box { 
                     size 4 4 4 
                }
            }
    ]
}

Viewpoint jest to wspaniały węzeł, dający naprawdę duże możliwości. Przekonacie się o tym, gdy nauczymy się wprowadzać obiekty w ruch, gdyż będziemy mogli wtedy wykonać tzw. animating viewpoint (ruchomy punkt patrzenia). Będziecie wtedy mogli, np: wymodelować autobus, który będzie poruszał się po określonej trasie. Potraktujecie wtedy autobus jako animating viewpoint i wsiadając do niego będziecie mogli usiąść, i ciągle się poruszając podziwiać widoki wirtualnego miasta. Ze względu na duże możliwości tego węzła wrócimy jeszcze do niego w dalszej części kursu.