VRMLed - uDner Cnossstrucion


Wstęp*
Koncepcja*
FCAF*
Teksty*
Światła*
Dźwięki*
*Three Dots

* FCAF czyli pierwsze koty za płoty: First Cats After Fences :D
*W VRMLu występują 54 typy węzłów z pomocą których można definiować światła, dźwięki, obiekty geometryczne, czujniki itd. itp. Węzły te można zaklasyfikować na wiele różnych sposobów. Np węzeł MovieTexture może należeć zarówno do grupy węzłów odpowiedzialnych za wygląd obiektów geometrycznych jak i do węzłów generujących dźwięk. Są też węzły których zaklasyfikować nigdzie się nie da, np. WorldInfo gdyż są jedynym przedstawicielem swojego 'gatunku'. W VRMLed nie będziemy opierać się na żadnej sztywnej klasyfikacji. Porządek omawiania kolejnych węzłów jest dobrany tak (wg. mnie przynajmniej), by zacząć od węzłów najprostszych i stopniowo zagłębiać się w coraz bardziej skomplikowane konstrukcje. Na zakończenie zajmiemy się skryptami.

* Tęcza na dobry początek, czyli węzeł Background
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ęzeł Background wygląda poważnie. Posiada 12 pól, które pozwalają na zdefiniowanie kolorów nieba i ziemi oraz pokrycie ich teksturami. Kolor nieba to kolor sfery o nieskończonym promieniu, natomiast ziemia to półsfera wewnątrz niej. W tym wszystkim znajduje się sześcian (również nieskończonych wymiarów :) na którego ściany można nałożyć tekstury. Węzeł Background należyd do grupy tzw. węzłów pojedynczych (nazywanych też wiążącymi od ang. bindable nodes). Specyfika ich polega na tym, że choć w scenie VRML może być zdefiniowanych kilka węzłów tego typu to wpływ na wygląd sceny ma tylko jeden z nich. Np. można zdefiniować węzeł Background przedstawiający tło świata w dzień (np. ze słońcem) i inny przedstawiający je w nocy (z gwiazdami). Następnie za pomocą pola set_bind odpowiednio je podmieniać w miarę upływania czasu w wirtualnym świecie.
*Jak wspomniano wyżej pole set_bind używane jest do uaktywnienia węzła Background (i wszystkich węzłów pojedynczych). Dzieje się tak gdy pole to przyjmie wartość TRUE. W tym momenice również pole isBound zostaje ustawione na TRUE informując że węzeł jest aktywny ('dowiązany' do sceny). Jeśli poprzednio uaktywniony inny węzeł tego samego typu to zostanie on umieszczony na stosie danej grupy węzłów pojedynczych. Jeśli aktywny węzeł przyjmie w polu set_bindwartość FALSE zostanie zdezaktywowany (wartość ta pojawi się też w polu isBound a uaktywniony zostanie węzeł znajdujący się aktualnie na szczycie stosu.
*Pola groundAngle, groundColor, skyAngle oraz skyColor odpowiadają za kolor tła ziemi i nieba. Ponieważ wartości dla obu pary pól dobiera się na podobnej zasadzie zostaną one omówione na przykładzie pary skyAngle, skyColor.
W polu skyColor umieszczamy kolejne kolory nieba w punktach których położenie jest podane w polu skyAngle. Wartości skyColor powinno być o jedną więcej niż w polu skyAngle. W tym ostatnim podaje się położenie w postaci wysokości kątowej nad horyzontem. Kąt mierzy się od pionu, tak że punkt w zenicie ma 0, natomiast pod stopami użytkownika PI radianów. Przykład
Wartości pól w węźle Background:
skyColor [ 1 1 1 1 1 1 1 0 0 1 1 1 0 1 0 1 1 1 0 0 1 1 1 1 ]
skyAngle [ 1.54 1.55 1.56 1.57 1.58 1.59 1.60 ]

*Pola backUrl, bottomUrl, frontUrl, leftUrl, rightUrl i topUrl powinny zawierać adresy URL tekstur dla ścian otaczającego gracza nieskończonego sześcianu, odpowiednio: tylnej, dolnej, przedniej, lewej, prawej i górnej ściany.

* Jak umieszczać obiekty geometryczne? WęzełShape
Shape {
  exposedField SFNode appearance NULL
  exposedField SFNode geometry   NULL
}
*Węzeł Shape służy do umieszczania na scenie VRML obiektów geometrycznych. W jego polach powinny znaleźć się węzły opisujące wygląd obiektu (pole appearance w które powinniśmy wstawić węzeł Appearance) oraz jego kształt (pole geometry). Należy pamiętać o tym, że obiekt bez zdefiniowanego wyglądu lub kształtu jest niewidoczny na scenie. Najprostrzy przykład wykorzystania węzła Shape wygląda tak:

#VRML V2.0 utf8

Shape {
  appearance Appearance {
    material Material {}
  }
  geometry Sphere {}
}

Zdefiniowaliśmy w ten sposób sferę o domyślnym promieniu, której powierzchnią jest domyślny materiał. Wygląda skomplikowanie. Węzły Appearance oraz Material zostaną omówione później, zaś na razie zajmiemy się najprostszymi węzłami definiującymi kształty...

* Sphere, Cone, Box i Cylinder *
Box {
  field    SFVec3f size  2 2 2
}
Sphere {
  field SFFloat radius  1
}
Cone {
  field     SFFloat   bottomRadius 1
  field     SFFloat   height       2
  field     SFBool    side         TRUE
  field     SFBool    bottom       TRUE
}
Cylinder {
  field    SFBool    bottom  TRUE
  field    SFFloat   height  2
  field    SFFloat   radius  1
  field    SFBool    side    TRUE
  field    SFBool    top     TRUE
}

*Węzły te używane są do określenia najprostszych kształtów. Węzeł Sphere definiuje sferę o promieniu podanym w polu radius. Węzeł Box tworzy prostopadłościan którego wymiary są podane w polu size. Są to odpowiednio: szerokość, wysokość i głębokość (lub długość, nie wiem które określenie jest lepsze do określenia wymiaru na osi Z). Następnym kształtem jest stożek (Cone). Możemy dla niego zdefiniować wysokość - pole height oraz promień podstawy - bottomRadius. Dodatkowo możemy zażyczyć sobie, czy ma być rysowana powierzchnia boczna walca (pole side) oraz jego podstawa (pole bottom). Jeśli polom tym przypiszemy wartość FALSE części te nie będą rysowane. Ostatnia bryła to walec (Cylinder). Jego wymiary to promień podstawy (radius) oraz wysokość (height). Tak jak w przypadku stożka możemy określić czy ma być rysowana jego dolna podstawa (bottom), górna podstawa (top) oraz powierzchnia boczna (side). Na zakończenie cztery przykłady, po jednym na każdą bryłę. Ponieważ czarne tło jest brzydkie z pomocą wcześniej poznanego węzła Background zmienimy je na białe.


*No cóż... Nie wygląda to imponująco, ale dopiero zaczynamy :)

E-mail to: coding@poczta.onet.pl