Appearance
{
exposedField
SFNode material
NULL
exposedField
SFNode texture
NULL
exposedField
SFNode textureTransform NULL
}
Jak widzimy węzeł Appearance składa się z trzech węzłów typu SFNode: material, texture, textureTransform. Pole material może zawierać definicję węzła Material.
Material {
exposedField
SFFloat ambientIntensity 0.2
exposedField
SFColor diffuseColor 0.8 0.8 0.8
exposedField
SFColor emissiveColor 0 0 0
exposedField
SFFloat shininess 0.2
exposedField
SFColor specularColor 0 0 0
exposedField
SFFloat transparency 0
}
Pola węzła Material określają kolor obiektu nie poprzez "pokolorowanie" obiektu, ale przez nadanie odpowiednich wartości refleksom świetlnym, które powstają w wyniku odbicia się od danego obiektu.
Pole ambientIntensity typu SFFloat określa intensywność światła na tej części obiektu, który nie jest bezpośrednio oświetlony, a jej kolor zależy od od wartości jaką umieścimy w polu diffuseColor.
Pole diffuseColor typu SFColor określa kolor obiektu w miejscach gdzie światło pada na niego bezpośrednio.
W polu emissiveColor możemy zdefiniować kolor jaki emituje dany obiekt. Pole to może być przydatne zwłaszcza wtedy gdy chcemy zdefiniować widoczne przedmioty w ciemnym pokoju.
Pola specularColor i shininess odpowiadają za kolor i siłę światła odbitego od danego obiektu.
Pole transparency można zdefiniować stopień przezroczystości obiektu. Wartości w tym polu mogą zawierać się między 0.0 - zupełnie nie prześwitujący, a 1.0 - kompletnie prześwitujący.
Węzeł Material
jest trochę złożony, ale nie trzeba jednorazowo definiować wszystkich pól.
Przeglądarka załaduje wartości domyślne
niezdefiniowanych pól a wyświetli zdefiniowane, np: przezroczystość, czy
kolor emitowany przez obiekt.
Powróćmy jednak do węzła Appearance. Pole texture tego węzła może zawierać definicję jednego z następujących węzłów:
ImageTexture - wpisanie w pole url ścieżki dostępu do pliku graficznego (o formacie: GIF, JPEG, PNG, CGM), spowoduje nałożenie na obiekt rysunku jako tekstury.
MovieTexture - wpisanie w pole url ścieżki dostępu do pliku filmowego formatu MPEG, oraz określenie innych pól tego węzła dotyczących m.in. czasu wystartowania i zatrzymania filmu, spowoduje nałożenie na obiekt tego filmu jako tekstury.
PixelTexture
- węzeł ten zawiera pole image
typu SFImage,
gdzie definiujemy wygląd pikseli, które pokryją powierzchnię naszego obiektu.
Pole textureTransform węzła Appearance może zawierać definicję węzła TextureTransform.
TextureTransform
{
exposedField
SFVec2f center 0 0
exposedField
SFFloat rotation 0
exposedField
SFVec2f scale 1 1
exposedField
SFVec2f translation 0 0
}
Węzeł TextureTransform definiuje dwuwymiarowe przekształcenie tekstury na obiekcie.
Pole center
określa środek dwuwymiarowego układu współrzędnych, względem którego będą
odbywać się operacje obrotu, skalowania i przemieszczania tekstury. Operacje
te definiujemy odpowiednio w polach rotation,
scale
i translation,
podobnie jak robiliśmy to gdy opisywaliśmy węzeł Transform. Różnica
polega na tym, że tym razem operujemy na dwuwymiarowym układzie współrzędnych,
stąd zmiana typu pól centrowania, skalowania i przemieszczania na SFVec2f.
Węzeł Appearance stosujemy w polu appearance węzła Shape. Spójrzmy na poniższy przykład Appear.wrl:
#VRML V2.0 utf8
Transform {
rotation 1 0 0 0.5
translation 0 0 -5
children [
Shape {
appearance Appearance {
material Material {
emissiveColor 0 1 0
transparency 0.2
specularColor 1 0 0
}
}
geometry Box {
size 4 4 4
}
}
]
}
Do przykładu Trans.wrl dodaliśmy definicję wyglądu naszego sześcianu, używając w tym celu węzła Appearance. W polu material umieściliśmy węzeł Material i zdefiniowaliśmy: kolor emitowany przez obiekt - zielony (emissiveColor 0 1 0); 20% stopień przezroczystości (transparency 0.2); kolor światła odbitego od obiektu - czerwony (specularColor 1 0 0).
Najciekawszym tutaj elementem, jest definicja koloru światła odbitego od obiektu. Korzystając z przeglądarki Cosmo Player 1.0 mamy domyślnie włączoną opcję headlight, czyli reflektor, który oświetla scenę tam gdzie skierujemy nasz wzrok (kaski górników). Zróbmy mały eksperyment: najpierw kliknij tutaj, a potem załaduj świat Appear.wrl.
A teraz jeszcze jeden przykład. Tym razem na nasz sześcian
nałożymy teksturę (lekko przesunietą) w postaci pliku graficznego
w formacie GIF przedstawiającego Beavisa & Buttheada w swoich charakterystycznych
pozach - Appear2.wrl.
#VRML V2.0 utf8
Transform {
rotation 1 0 0 0.5
translation 0 0 -5
children [
Shape {
appearance Appearance {
texture ImageTexture {
url "beavis.gif"
}
textureTransform TextureTransform {
translation 0.5 0.5
}
}
geometry Box {
size 4 4 4
}
}
]
}
Stosowanie w jednym węźle Appearance jednocześnie pola material i pól texture oraz textureTransform jest zazwyczaj bezcelowe. Zresztą zobaczcie sami - Appear3.wrl.