Animace pro CAVE (simulace tkanin)

Zadání

Prostudujte algoritmy pro animaci tkanin a naimplementujte demo, které bude umožňovat manipulaci se zobrazovanými objekty. Předpokládejte portaci aplikace pro zařízení CAVE.

Naším cílem je tedy vytvořit jednoduchou grafickou aplikaci, která bude zobrazovat simulaci tkanin v reálném čase pro různé typy kolizí a působící síly.

Jedná se především o případy:

  • Kolize koule a tkaniny
  • Kolize kvádru a tkaniny
  • Simulace gravitační síly působící na tkaninu zavěšenou pomocí několika pevných bodů
  • Simulace větru působící na tkaninu zavěšenou pomocí několika pevných bodů

Některé předměty budou ovládány uživatelem.

Přehled známých řešení

Problémem simulace tkanin se zabývala již spousta odborných publikací. Například [Breen et al., 1994] (který vychází z jednoduchého částicového modelu představeného v [Lander, 1999]) simuluje tkaninu pouze na základě experimentů a přidáváním vztahů a sil mezi jednotlivé částice.

Takto nejprve vytvoří vztah každé částice s jejím čtyřokolím, který vytváří základní strukturu celého objektu. Poté přidává další vztahy s částicemi v úhlopříčném čtyřokolí (je tím myšlena množina částic v osmiokolí bez klasického čtyřokolí), které zavádí sílu pro zkosení. Nakonec přidá vztah pro spojení dvou částic, mezi nimiž je jedna další. Tím dojde k prodloužení kříže vytvořeného klasickým čtyřokolím o další částici. Tento vztah přidává omezení ohybu. Ukázku všech tří typů sil můžete vidět na obrázku.

Naopak [Metaaphanon and Kanongchaiyos, 2005] vychází z matematicky doloženého fyzikálního modelu pro simulaci. Definuje sílu, která je rozdělena na několik nezávisle působících sil. Výslednou energii jedné částice lze vyjádřit pomocí rovnice

kde U_repel reprezentuje odpuzování částic, U_stretch působení přitažlivé síly, U_bend ohýbání okolo osy ležící v rovině tkaniny, U_trellis ohýbání okolo osy kolmé na rovinu tkaniny (zkosení), U_grav gravitační sílu působící směrem dolů (záporný směr v ose y). Jednotlivé síly mají energetický průběh závislý na vzdálenosti částich vyjádřený pomocí funkcí.

Algoritmus řešení bude vycházet ze známých řešení popsaných v předešlé kapitole. Energie každé částice v jednotlivých časových momentech bude počítána jako součet nezávisle působících sil. K již zmíněným silám budou přidány kolize s dalšími objekty ve scéně. Síly budou odvozeny vzhledem k malým časovým úsekům.

Pokud uvažujeme zrychlení = síla / váha, z čehož za použití metody verlet integration odvodíme vztah: pozice = pozice + (pozice - stará_pozice) + zrychlení * časový_úsek. Pokud budeme chtít zapojit ještě tření a zpomalování (ztráty energie), přidáme násobící faktor útlum do vzorce: (pozice - stará_pozice) * (1 - útlum). Pokud se bude útlum blížit jedné, pak se bude pohyb zpomalovat rychleji. Pokud se bude blížit nule, pak nebude částice ztrácet téměř žádnou energii. Takto můžeme převést sílu působící na částici na samotný pohyb.

Pro zpětné upravení, realističtější vzhled celé animace a nějakou formu udržení látky (pružnost nebo pevnost) se budeme vždy po posunutí všech částic snažit dosáhnout jejich vzdálenosti v klidovém stavu.

Video ukázka:

http://www.youtube.com/watch?v=04nXlhdPxB4&feature=player_embedded

 
a4m39mma/3.txt · Poslední úprava: 2010/12/11 12:20 (upraveno mimo DokuWiki)
 
Kromě míst, kde je explicitně uvedeno jinak, je obsah této wiki licencován pod následující licencí: GNU Free Documentation License 1.3
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki