Virtuální realita - úloha č. 3 - Dynamický svět

Dynamické akce - schémata

Autodrom

Každé auto má svuj TouchSensor, TimeSensor a OrientationInterpolator.

Cesta je následující:

Navíc, všechna auta sdílí AudioClip uzel, který je aktivovaný pres TouchSensor.touchTime.

Horská dráha

Prvy vozen v rade reaguje Touch senzorom na aktivaciu, nasledkom coho sa spusti animacia ovladana TimeSenzorom zobrazujuca cestu vozika po horskej drahe. V tom istom momente a na zaklade tej istej odoslanej udalosti sa spusti aj zvukovy zaznam uhanajuceho vlaku. Atrakcia obsahuje aj Proximity senzor spinajuci 5 svetiel rozmiestnenych nad celym modelom, a majucich vlastnost menit farbu zo zahlavia prototypu.

	1.ROUTE DotykVozna1.touchTime	TO CasovacVozna1.startTime
	2.ROUTE CasovacVozna1.fraction_changed TO	PIVozna1_1.set_fraction
	3.ROUTE CasovacVozna1.fraction_changed TO	PIVozna1_2.set_fraction
	4.ROUTE CasovacVozna1.fraction_changed TO	OIVozna1.set_fraction
	5.ROUTE PIVozna1_1.value_changed TO	Vozen1Rota.translation
	6.ROUTE PIVozna1_2.value_changed TO Vozen1.translation
	7.ROUTE OIVozna1.value_changed TO	Vozen1Rota.rotation
	8.ROUTE CasovacVozna1.fraction_changed TO	OIVozna1_2.set_fraction
	9.ROUTE OIVozna1_2.value_changed TO Vozen314.rotation
	10.ROUTE MightyHand.translation_changed TO otocenyVlacik.translation
	11.ROUTE DotykVozna1.touchTime	TO ZvukVlaku.startTime
	22.ROUTE DotykVozna1.touchTime	TO CasovacZvuku.startTime
	13.ROUTE CasovacZvuku.cycleTime TO	skript.dobaVlacika
	14.ROUTE skript.vybuch	TO CasovacZvuku2.startTime
	15.ROUTE CasovacZvuku2.startTime TO ZvukVybuchu.startTime
	16.ROUTE CasovacZvuku2.startTime TO ZvukVlaku.stopTime
	17.ROUTE ProxySenz.isActive TO	VlakoveSvetlo.on

Ukazka routovacich ciest v programe. Prvou cestou je put informacie o dotyku vozika, starteru casovaca. V nasledujucich troch ROUTOCH sa nachadzaju tri koridori na posielanie impulzov trom roznym urovniam transformu prveho vozika. Tri urovne som bol nuteny vytvorit vzhladom na dynamicky meniace sa poziadavky na polohu osi otacania vozika v priebehu jeho cesty drahou. nasledujuce ROUTY, tieto impulzy prevadzaju na jednotlive body na trati, a posielaju ich detaily jednotlivym transformom. ROUTY 8 a 9 sa staraju o spravne natocenie vozika v pripade otocenia sa do protismeru. 9.ROUT je MightyHand manipulator, jeho nazov plynie z toho ze je mozne aktivaciou manipulatora pohybovat celym vozikom po vodorovnej ploche. Jedna sa o vozik umiestneny mimo kolaji. ROUT 11 sa stara o spustenie opakujucej sa slucky zvukoveho zaznamu iduceho vlaku. Taktiez sa spusti casovac zvuku, ktory je pomocnym casovacom a neskor nam umozni odpalit velkolepe zvukove finale animacie. Aby sme dosiahli presnu aktivaciu zvukoveho zaznamu s ohladom na pozadovany cas, pozujijeme skript "skript". Skript "skript" umozni casovacuZvuku2 spustit zvukovy zaznam vybuchu. V tom istom case sa ukonci cinnost zvukovej slucky iduceho vlaku. Posledny ROUT sa tyka proximity senzora, a jeho aktivacie svetla nad atrakciou.

Labuťový kolotoč

Popis funkcionality a ovladani

Kolotoc ma tri rezimy: v klidovem rezimu se nehybe, v automatickem rezimu se otaci a ramena se zvedaji automaticky, v manualnim rezimu se aktivni labut ovlada rucne pakou, zbyle se hybou samy.

Tlacitkem na sloupku u kolotoce se kolotoc prepina mezi klidovym a automatickym rezimem.

Kliknutim na labut do ni nasedneme, opetovnym kliknutim vysedneme. Behem jizdy v labuti se avatar nemuze hybat, pouze se muze otacet. Labut, ve ktere avatar sedi, budeme oznacovat jako aktivni.

V labuti je k dispozici ovladaci panel s tlacitkem a pakou. Pomoci tlacitka prepiname mezi klidovym rezimem a manualnim rezimem kolotoce (tj. zapneme otaceni). Pomoci paky nastavujeme aktualni uhel zvednuti celeho ramene.

Pri prechodu do klidoveho stavu labute automaticky sjednou dolu, aby bylo mozne nastupovat resp. vystupovat.

Pri otaceni rotoru kolotoce se zaroven animuje barva kuzele rotoru.

V blizkosti kolotoce se zapne svetlo umistene nad stredem rotoru.

Implementacni poznamky

Ramena se generuji na zacatku dynamicky pomoci skriptu.

Nektere - ROUTEs se vytvareji resp. rusi dynamicky.

Prehled dynamickych akci

Labutovy_kolotoc

ROUTE Kototoc_proximity.isActive TO  Svetlo_1.on
ROUTE OvladaciPanelKolotoce.tlacitkoTouchTime_changed TO Rotor.prepnuti
ROUTE OvladaciPanelKolotoce.tlacitkoTouchTime_changed TO Tlacitko_klik.startTime

Rotor

EXTERNPROTO  Rotor [
  eventIn SFTime prepnuti
  eventIn SFBool set_otaceni_vypnuto
  eventIn SFBool set_otaceni_zapnuto
] "rotor.wrl#Rotor"
ROUTE Rizeni_rotoru.start_changed TO Casovac_rotoru.startTime
ROUTE Rizeni_rotoru.stop_changed TO Casovac_rotoru.stopTime
ROUTE Casovac_rotoru.fraction_changed TO Rotor_otaceni_interpolator.set_fraction
ROUTE Casovac_rotoru.fraction_changed TO Barevny_interpolator.set_fraction
ROUTE Barevny_interpolator.value_changed TO  Rizeni_rotoru.set_barva_kuzele
ROUTE Rotor_otaceni_interpolator.value_changed TO Rotor_T.rotation
ROUTE Rizeni_rotoru.novaRamena TO Ramena.addChildren
ROUTE Ramena.children_changed TO Rizeni_rotoru.nastavRamena

Labut

EXTERNPROTO  Labut [
  eventOut SFTime touchTime
  eventOut SFFloat hodnotaPaky_changed
  eventOut SFBool tlacitkoZapnuto_changed
  eventOut SFTime tlacitkoTouchTime_changed
  eventIn SFFloat set_initHodnotaPaky
] "labut.wrl#Labut"
ROUTE Aktivator.touchTime TO Rizeni.set_aktivatorTouchTime
ROUTE OvladaciPanel.hodnotaPaky_changed  TO Rizeni.set_hodnotaPaky
ROUTE OvladaciPanel.tlacitkoZapnuto_changed TO Rizeni.set_tlacitkoZapnuto
ROUTE OvladaciPanel.tlacitkoTouchTime_changed TO Rizeni.set_tlacitkoTouchTime
ROUTE Rizeni.initHodnotaPaky_changed TO OvladaciPanel.set_initHodnotaPaky
ROUTE Rizeni.aktivatorPovolen_changed TO Aktivator.enabled
ROUTE Rizeni.panelPovolen_changed TO OvladaciPanel.set_panelPovolen

Paka

EXTERNPROTO Paka [
  eventOut SFFloat hodnota_changed
  eventIn SFFloat set_initHodnotaPaky
  eventIn  SFBool set_povolena
] "ovladaci-panel.wrl#Paka"
ROUTE SenzorPaky.rotation_changed TO PakaRotation.rotation
ROUTE SenzorPaky.rotation_changed TO Rizeni.set_angle
ROUTE Rizeni.povolena_changed TO SenzorPaky.enabled

Tlacitko

EXTERNPROTO Tlacitko [
  eventOut SFBool zapnuto_changed
  eventOut SFTime touchTime
  eventIn  SFBool set_povoleno
]  "ovladaci-panel.wrl#Tlacitko"
ROUTE Senzor.touchTime TO Rizeni.set_touchTime
ROUTE Rizeni.povoleno_changed TO Senzor.enabled

OvladaciPanelLabute

EXTERNPROTO  OvladaciPanelLabute [
  eventOut SFFloat hodnotaPaky_changed
  eventOut SFBool tlacitkoZapnuto_changed
  eventOut SFTime tlacitkoTouchTime_changed
  eventIn SFFloat set_initHodnotaPaky
  eventIn SFBool set_panelPovolen
] "ovladaci-panel.wrl#OvladaciPanelLabute"
ROUTE PakaNaUhelRamene.hodnota_changed TO  Rizeni.set_hodnotaPaky
ROUTE Tlacitko.touchTime TO  Rizeni.set_tlacitkoTouchTime
ROUTE Tlacitko.zapnuto_changed TO Rizeni.set_tlacitkoZapnuto
ROUTE Rizeni.initHodnotaPaky_changed TO PakaNaUhelRamene.set_initHodnotaPaky
ROUTE Rizeni.panelPovolen_changed TO PakaNaUhelRamene.set_povolena
ROUTE Rizeni.panelPovolen_changed TO Tlacitko.set_povoleno

OvladaciPanelKolotoce

EXTERNPROTO OvladaciPanelKolotoce [
  eventOut SFTime tlacitkoTouchTime_changed
] "ovladaci-panel.wrl#OvladaciPanelKolotoce"
ROUTE Tlacitko.touchTime TO  Rizeni.set_tlacitkoTouchTime

Pist_jednoduchy

EXTERNPROTO Pist_jednoduchy [
  eventIn SFFloat set_delka_pistu
] "rameno.wrl#Pist_jednoduchy"
ROUTE Rizeni_pistu.delka_pistu_changed TO Rizeni_pistu.set_delka_pistu

Rameno

EXTERNPROTO  Rameno [
  eventIn SFFloat set_uhel_zvednuti_nosniku
  eventOut SFInt32 aktivniRameno_changed
  eventOut SFTime otaceniAktivni_changed
] "rameno.wrl#Rameno"
ROUTE Rizeni_ramene.delka_pistu_changed  TO Pist_pod_ramenem.set_delka_pistu
ROUTE LabutNaRameni.hodnotaPaky_changed TO Rizeni_ramene.set_uhel_zvednuti_fraction
ROUTE Rizeni_ramene.uhel_zvednuti_value_changed  TO Rizeni_ramene.set_uhel_zvednuti_nosniku
ROUTE LabutNaRameni.touchTime TO Rizeni_ramene.set_ramenoKliknuto
ROUTE Rizeni_ramene.labutAktivni_changed TO LabutiViewpoint.set_bind
ROUTE Rizeni_ramene.labutAktivni_changed TO LabutiNavigation.set_bind
ROUTE Rizeni_ramene.labutPripravena_changed TO  LabutNaRameni.set_aktivatorPovolen
ROUTE Rizeni_ramene.labutAktivni_changed TO  LabutNaRameni.set_panelPovolen
ROUTE Zigzag_interpolator.value_changed  TO Cos_interpolator.set_fraction
ROUTE Cos_interpolator.value_changed TO  Rizeni_ramene.set_uhel_zvednuti_fraction
ROUTE LabutNaRameni.tlacitkoTouchTime_changed TO Rizeni_ramene.set_otaceniAktivni
ROUTE Rizeni_ramene.initHodnotaPaky_changed  TO LabutNaRameni.set_initHodnotaPaky
ROUTE Casovac_ramene_jeden_pohyb.fraction_changed TO Fazovy_posun.set_fraction
ROUTE Fazovy_posun.value_changed TO Cos_interpolator.set_fraction
ROUTE Casovac_ramene.fraction_changed TO Zigzag_interpolator.set_fraction

KonkretniRameno

EXTERNPROTO KonkretniRameno [
  eventOut SFInt32 aktivniRameno_changed
  eventOut SFTime otaceniAktivni_changed
  eventIn SFBool set_labutAktivni
  eventIn SFBool set_labutPripravena
  eventIn SFTime prepniAutomatickeZvedani
  eventIn SFTime spustitRamenoDolu
] "rameno.wrl#KonkretniRameno"

KonkretniRameno slouzi jako proxy pro Rameno.

ROUTE R.aktivniRameno_changed TO Rizeni.set_aktivniRameno
ROUTE R.otaceniAktivni_changed TO Rizeni.set_otaceniAktivni
ROUTE Rizeni.labutAktivni_changed TO R.set_labutAktivni
ROUTE Rizeni.labutPripravena_changed TO R.set_labutPripravena
ROUTE Rizeni.prepniAutomatickeZvedani_changed TO R.prepniAutomatickeZvedani
ROUTE Rizeni.spustitRamenoDolu_changed TO R.spustitRamenoDolu

Zpet na stránku úlohy.