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:
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í. Návrh řešení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 |