Background {
eventIn
SFBool set_bind
exposedField MFFloat
groundAngle []
exposedField MFColor
groundColor []
exposedField MFString
backUrl []
exposedField MFString
bottomUrl []
exposedField MFString
frontUrl []
exposedField MFString
leftUrl []
exposedField MFString
rightUrl []
exposedField MFString
topUrl []
exposedField MFFloat
skyAngle []
exposedField MFColor
skyColor 0 0 0
eventOut
SFBool isBound
}
W polu skyAngle wyznaczamy kąt tworzący koncentryczny pas wokół zenitu, a w polu skyColor określamy barwę, jaka ma się w tym pasie znaleźć (barwę określamy w standardzie RGB). Takich pasów możemy utworzyć bardzo wiele, ale zawsze w polu skyColor musi znajdować się jedna definicja koloru więcej, niż jest zdefiniowanych kątów. Dzieje się tak dlatego, iż pierwsza wartość w polu skyColor przyjmowana jest za kolor dla zenitu.
Wygląd „ziemi" tworzy się w sposób analogiczny, tylko że kąty w polu groundAngle liczone są od nadiru. Poniższy przykład definiuje tajemniczy i niepokojący wieczór z księżycem stojącym w zenicie :-)
#VRML V2.0 utf8
Background {
skyColor
[
1 1 1,
0 0.25 0.5,
0.5 0.25 0.5 ]
skyAngle
[ 0.1, 1.57]
groundColor
[
0 0 0
0 0 0
0.5 0.25 0.5 ]
groundAngle
[ 1.5, 1.57]
}
Kolejny przykład umieszcza nasz świat w atmosferze słonecznego, majowego dnia:
#VRML V2.0 utf8
Background {
skyColor
[
0.0 0.2 0.7,
0.0 0.5 1.0,
1.0 1.0 1.0 ]
skyAngle
[ 1.3, 1.57 ]
groundColor
[
0 0.5 0.25
0 0.7 0.25
1 1 1 ]
groundAngle
[ 1.5, 1.57]
}
Przykład, który zostanie tutaj pokazany został utworzony w programie SkyPaint autorstwa Gavina Bella i Ricka Careya (Wasabisoft)
#VRML V2.0 utf8
#Generated by SkyPaint
Background {
frontUrl "hand1_FT.jpg"
backUrl "hand1_BK.jpg"
leftUrl "hand1_LF.jpg"
rightUrl "hand1_RT.jpg"
topUrl "hand1_UP.jpg"
bottomUrl "hand1_DN.jpg"
}
Jeżeli we wszystkich z tych pól umieścilibyśmy tą samą teksturę (np.
białe kropeczki na czarwynm tle) to po załadowaniu świata uzyskalibyśmy
efekt zawieszenia w przestrzeni kosmicznej.
Używanie tekstur do utworzenia panoramy jest jednak bardzo kosztowne - po pierwsze czas ściągania wszystkich tekstur jest długi (dlatego należy się starać umieszczać tekstury jak najmniejsze) po drugie bardzo ucierpi na tym szybkość poruszania się w świecie VRML, dlatego proponuję nie używać tekstur na utworzenie panoramy w dużych światach VRML, tam gdzie jest niewiele obiektów, a zależy nam na mocniejszym efekcie możemy ostatecznie pokusić się o dołączenie kilku teksktur.
Kolejnym węzłem, o którym chciałbym powiedzieć jest węzeł Fog odpowiadający za zdefiniowanie mgły w naszym świecie. Składnia tego węzła wygląda następująco:
Fog {
exposedField SFColor
color
1 1 1
exposedField SFString
fogType "LINEAR"
exposedField SFFloat
visibilityRange 0
eventIn
SFBool set_bind
eventOut
SFBool isBound
}
Pole color określa kolor mgły, tzn: obiekty, które zostaną przez mgłę zakryte przyjmą właśnie ten kolor. Wartość LINEAR w polu fogType powoduje, że mgła rozpościera się linearnie we wszystkich kierunkach, natomiast gdy w umieścimy tam wartość EXPONENTIAL uzyskamy efekt bardziej naturalny, zbliżony do rzeczywistości. W polu visibilityRange określamy najmniejszą odległość między użytkownikiem a obiektem, przy której obiekt zostaje zupełnie przez mgłę przesłonięty.
Poniższy przykład definiuje efekt mgły oraz żółty sześcian, który zalega
we mgle gdy oddalimy się od niego na 10 metrów - fog.wrl.
#VRML V2.0 utf8
Background {
skyColor
[
0.0 0.2 0.7,
0.0 0.5 1.0,
1.0 1.0 1.0
]
skyAngle
[ 1.309, 1.571 ]
}
Fog { color 1 1 1
visibilityRange 10
fogType "LINEAR" }
Shape {
appearance
Appearance { material Material {
diffuseColor 1 1 0 }
}
geometry Box
{}
}