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.