E nter.net  


VRML (3) Interakcja
Kamil D▒bkowski


Ten odcinek kursu zostanie po╢wiΩcony umieszczeniu w ╢wiecie VRML r≤┐nego rodzaju czujnik≤w, kt≤re wprowadz▒ elementy interakcji miΩdzy uczestnikiem a ╢wiatem wirtualnym.

M iesi▒c temu przedstawiony zosta│ spos≤b wykonania prostej animacji. Mo┐na by│o tego dokonaµ dziΩki zastosowaniu wΩz│a TimeSensor i po│▒czeniu go komend▒ ROUTE z wΩz│ami interpolacji, kt≤re odpowiadaj▒ za wytyczenie trasy animacji.

Kliknij mysz▒


Jednym z wΩz│≤w czujnikowych jest wΩze│ Anchor, kt≤ry dzia│a tak samo jak odno╢nik hipertekstowy na stronie HTML. Po klikniΩciu na obiekt objΩty dzia│aniem tego wΩz│a mo┐na przenie╢µ siΩ do innego ╢wiata VRML, innej czΩ╢ci tego samego ╢wiata, strony HTML itp. Opr≤cz tego, ┐e Anchor jest wΩz│em czujnikowym, jest on r≤wnie┐ wΩz│em grupuj▒cym. Ma pole children, gdzie mo┐emy zdefiniowaµ aktywny obiekt. Przedstawiono to w Listingu 1 znajduj▒cym siΩ na kr▒┐ku ENTER CD 2/98 w katalogu LISTINGI. Po klikniΩciu na sto┐ek zostanie za│adowany ╢wiat, do kt≤rego odwo│anie znajduje siΩ w polu url. WΩze│ Anchor pozwala r≤wnie┐ na odes│anie do konkretnego miejsca (okre╢lonego w wΩ╝le Viewpoint) zdefiniowanego w tym samym lub innym ╢wiecie VRML. Aby mo┐na to by│o uczyniµ, pole url powinno wygl▒daµ nastΩpuj▒co:

url "http:\\www.enter.pol.pl\vrml\dziura.wrl#Tie Fighter"

gdzie Tie Fighter to nazwa jednego z miejsc zdefiniowanych w ╢wiecie dziura.wrl. Drugim wΩz│em wra┐liwym na klikniΩcie jest TouchSensor. U┐ycie tego wΩz│a nie zmienia bezpo╢rednio niczego w wygl▒dzie sceny. Definiuj▒c ten wΩze│, nie przyporz▒dkowujemy go ┐adnemu konkretnemu obiektowi - odbywa siΩ to dopiero podczas u┐ycia komendy ROUTE. Przyk│ad w Listingu 2 (na kr▒┐ku ENTER CD 2/98 w katalogu LISTINGI) pokazuje, jak za pomoc▒ wΩz│a TouchSensor wprowadziµ przedmiot w ruch. WΩze│ TouchSensor u┐ywany jest g│≤wnie jako "worek ze zdarzeniami". Po uaktywnieniu wΩze│ wysy│a wiele zdarze±, kt≤re mo┐na powi▒zaµ (ROUTE) z innymi wΩz│ami i zmieniµ wygl▒d sceny.

Kliknij i przytrzymaj


Istnieje osobna grupa wΩz│≤w czujnikowych, kt≤re umo┐liwiaj▒ przesuwanie lub obracanie aktywnych obiekt≤w. Do tych wΩz│≤w nale┐▒: PlaneSensor, CylinderSensor i SphereSensor. Pierwszy z nich pozwala na przesuwanie danego obiektu (z przytrzymanym klawiszem myszki) wzglΩdem osi X i Y. Przyk│ad w Listingu 3 (na kr▒┐ku ENTER CD 2/98 w katalogu LISTINGI) demonstruje, jak mo┐na w │atwy spos≤b, pos│uguj▒c siΩ wΩz│em PlaneSensor, wymodelowaµ suwane drzwi: O zakresie przestrzeni, w jakiej mo┐na dany obiekt przemieszczaµ, decyduj▒ pola maxPosition i minPosition. W tym przyk│adzie zosta│ umo┐liwiony ruch drzwiom od pozycji (0 0) do pozycji (2 0) w dwuwymiarowym (x, y) uk│adzie wsp≤│rzΩdnych. WΩze│ CylinderSensor umo┐liwia obracanie danym obiektem wzglΩdem osi Y. Aby zobaczyµ, jak dzia│a wΩze│ CylinderSensor, zast▒pmy definicjΩ wΩz│a PlaneSensor i komendy ROUTE z ostatniego przyk│adu nastΩpuj▒cymi liniami:

DEF Ruch CylinderSensor {} ROUTE Ruch.rotation_changed TO Drzwi1.set_rotation

Natomiast dziΩki wΩz│owi SphereSensor mo┐emy obracaµ danym obiektem we wszystkich kierunkach. Zamiast definicji wΩz│a PlaneSensor i komendy ROUTE nale┐y umie╢ciµ nastΩpuj▒ce linie:

DEF Ruch SphereSensor {} ROUTE Ruch.rotation_changed TO Drzwi1.set_rotation

Uwa┐aj jak chodzisz


VRML
VRML daje mo┐liwo╢µ zdefiniowania czujnik≤w, kt≤re u┐ytkownik uaktywnia nie╢wiadomie (tzn. nie klikaj▒c myszk▒). WΩze│ Collision okre╢la warunki kolizji miΩdzy u┐ytkownikiem a obiektami zdefiniowanymi w polu children. Pole collide pozwala okre╢liµ, czy dany obiekt stanie nam na przeszkodzie (warto╢µ TRUE), czy te┐ bΩdzie mo┐na przez niego przej╢µ (warto╢µ FALSE). W polu proxy natomiast definiujemy obiekt, kt≤ry jest niewidoczny, a tak naprawdΩ stanowi przeszkodΩ (wok≤│ widocznego obiektu), przez kt≤r▒ nie mo┐na przej╢µ. Przyk│ad zastosowania wΩz│a Collision obrazuje Listing 4 (na kr▒┐ku ENTER CD 2/98 w katalogu LISTINGI). Definiuje on r≤┐owy sze╢cian oraz niewidoczn▒ kulΩ o promieniu 5, na kt≤rej u┐ytkownik siΩ zatrzymuje staraj▒c siΩ dotrzeµ do sze╢cianu. W momencie kolizji uruchomiony zostaje wΩze│ TimeSensor, kt≤ry z kolei uruchamia zmianΩ koloru sze╢cianu poprzez wΩze│ ColorInterpolator (z r≤┐owego na czerwony). TrochΩ podobny do wΩz│a Collision jest wΩze│ ProximitySensor, kt≤ry uwra┐liwia okre╢lony obszar na wej╢cie u┐ytkownika. Przyk│ad w Listingu 5 (na kr▒┐ku ENTER CD 2/98 w katalogu LISTINGI), ukazuje podobn▒ sytuacjΩ: r≤┐owy sze╢cian, lecz zamiast czujnika kolizji zdefiniowany zosta│ czujnik zbli┐enia. Po wej╢ciu w obszar zdefiniowany w polach center i size wΩz│a ProximitySensor sze╢cian zmieni kolor na zielony, a po wyj╢ciu z tego obszaru zn≤w bΩdzie r≤┐owy.
Ostatnim wΩz│em czujnikowym jest VisibilitySensor, kt≤ry uaktywnia siΩ w momencie, gdy obszar okre╢lony w tym wΩ╝le wejdzie w pole widzenia uczestnika ╢wiata wirtualnego. W przyk│adzie Listingu 6 (na kr▒┐ku ENTER CD 2/98 w katalogu LISTINGI), zosta│y zdefiniowane dwa walce, a miΩdzy nimi obszar aktywny. Po za│adowaniu ╢wiata obszar aktywny od razu umieszczony jest w naszym polu widzenia, wiΩc walce zmieniaj▒ kolor. Gdy "kamera" zostanie obr≤cona tak, ┐e jeden z walc≤w znajdzie siΩ w rogu ekranu, zacznie zmieniaµ kolor z zielonego na r≤┐owy oznacza to, ┐e obszar okre╢lony w wΩ╝le VisibilitySensor jest niewidoczny. Zdefiniowanie du┐ej liczby czujnik≤w niew▒tpliwie zwiΩksza atrakcyjno╢µ ╢wiata VRML. Mo┐na eksplorowaµ ╢wiat wirtualny bΩd▒c niepewnym swojego nastΩpnego kroku, kt≤ry mo┐e wywo│aµ dowoln▒ zmianΩ wygl▒du sceny. Przez przypadek (lub celowo, uaktywniaj▒c wΩze│ TouchSensor) mo┐emy w│▒czyµ radio, z kt≤rego pop│ynie muzyka, uruchomiµ jak▒╢ animacjΩ, dzie± zmieniµ w noc...

Czarna dziura


Wszystkich zainteresowanych wirtualnymi ╢wiatami zapraszamy do odwiedzenia naszych stron internetowych. Pod adresem www.enter.pol.pl/vrml/ wiele ciekawych rzeczy znajd▒ zar≤wno ci, kt≤rzy chc▒ poznaµ tajniki jΩzyka VRML, jak i ci kt≤rzy chc▒ zobaczyµ jak to wszystko wygl▒da w praktyce. Znajduje siΩ tam m.in. sieciowa wersja naszego kursu oraz odno╢niki do innych stron po╢wiΩconych tej tematyce.

(c) Copyright LUPUS