Řešení úlohy 3

Zadání: Dynamický objekt VRML


Vytvořte další adresář na vašich WWW stránkách, tentokrát s číslem 3. Do něj umístěte soubory podle stejných pravidel a se stejnými jmény jako v předchozí úloze.

Dále rozšiřte statický objekt z minulé úlohy o zadané dynamické vlastnosti. Každý prototyp, resp. druh objektu by měl umět:

  1. alespoň 2 dynamické akce a to pomocí různých druhů senzorů (tedy nedělat vše jen pomocí TouchSensor),
  2. pracovat se zvukem a světlem.
Z WWW stránky by měl návštěvník získat následující informace a soubory: Pamatujte na dodržování co nejvyšší snímkové rychlosti a na co nejmenší velikost souborů:
"Virtuální realita je o rychlosti, nikoliv o kráse".
(Je ovšem pravda, že jedno z kriterií hodnocení bude i umělecký dojem... ;-)

Řešení:

uloha.wrl

Pila -- po doteku se pila rozjede a rozřeže stůl, ten se po té rozpadne.

Popis scény

Bazének -- při vstupu do bazénku se stůl uvniř samou radostí rozeskáče, po nějaké době však radost vyprchá (po 5 skocích). Skákaní stolu však zneklidní zdroj světla umístěný nad stolkem a ten začne měnít barvy. Ten však neustane. Stolem se dá taktéž dá pohybovat po dně bazánku. Zároveň se stolem se pohybuje i zdroj světla.

Čudl -- tvar stolu lze měnit pomocí otočneho čudlu na kraji bazenku. po každém kliknutí se tvar změní a čudl se potočí. Tvar stolu lze měnit i barevnými kostičkami. Každá kostička odpovídá jednomu tvaru stolu. Při změně tvaru kostičkou se čudl pootočí do správné polohy. Při implementaci čudlu a kostiček byl použit uzel Script.

Popis rozhraní prototypů

PROTO TableAnim[
eventIn SFTime startAnim   # pocatek animace 
]
Prototip stolu, ktery se dokaze rozpadnout na dva. Po té co dostane event startAnim, počka nějaký čas (než k němu přijede pila), pak začne v sobě vytvářet díru a nakonec se rozpadne na dvě půlky.
PROTO PilaAnim[
eventOut SFTime clickAnim   # pocatek animace 
]
Pila z počatku klidná, ale citlivá. Po dotyku se rozeskáče. Zároveň vyšle event pro stůl, že se může připravit na royřezání.
 PROTO TableShow [
  exposedField MFNode object  Box {} # tvar oběktu, který bude
                                                    # ukazován 
]
Bazeník ve ktrém se muže hýbat s objektem. Když avatar vstoupí do bazénku objekt se rozeskáč. V našem případě je objektem naš stůl. PROTO TableShow [ exposedField MFNode object Transform { translation 0 .5 0 children Shape { geometry Box { size 2 1 2 } } } ]
PROTO MultiButton [
  exposedField    SFInt32 faze   0 # v jake fazi se cudl nachazi
  field    SFInt32 faze_max      3 # kolik fazi bude cudl mit
  eventIn  SFInt32 set_faze        # a temito eventy se faze meni
  eventOut SFInt32 faze_changed    # ... a dava vedet o tom,
                                   # ze byla zmenena
]

Čudl je ponekud mimo rámec této ulohy, proto jen okrajove.
Každým kliknutim se zvetší fáze (modulo faze_max.
Pokud prijde event  faze_changed cudl se obrátí do spravné
polohy.



Popis předávání událostí