MASARYKOVA UNIVERZITA FAKULTA INFORMATIKY
Ukázková aplikace pro rozpoznávání gest v prostoru
Bakalářská práce Tomáš Nezval
Brno, 2009
Prohlášení Prohlašuji, že tato práce je mým původním autorským dílem, které jsem vypracoval samostatně. Všechny zdroje, prameny a literaturu, které jsem při vypracování používal nebo z nich čerpal, v práci řádně cituji s uvedením úplného odkazu na příslušný zdroj.
Vedoucí práce: RNDr. Barbora Kozlíková
ii
Shrnutí Tato práce byla vytvořena jako součást projektu Rozpoznávání gest v prostoru pro laboratoř HCI (Human-Computer Interaction Laboratory) Fakulty informatiky. Práce využívá knihovny Gestures pro rozpoznávání gest ruky v ukázkových aplikacích, sestavených pro otestování funkčnosti knihovny v praktických příkladech.
iii
Klíčová slova Ukázková aplikace, gesto, rozpoznávání gest v prostoru, Ogre3D, OptiTrack, stereoskopická projekce.
iv
Obsah Úvod.............................................................................................................................................2 1 Historie polohovacích zařízení..................................................................................................3 2 Použité nástroje.........................................................................................................................6 2.1 Zařízení OptiTrack.......................................................................................................6 2.2 Engine Ogre3D.............................................................................................................7 2.3 Stereoskopická projekce...............................................................................................8 3 Gesto.......................................................................................................................................10 4 Účel práce................................................................................................................................11 5 Projekt rozpoznávání gest v prostoru.......................................................................................12 6 Ukázková aplikace: Editor.......................................................................................................13 6.1 Třída ExampleApplication.........................................................................................14 6.2 Proces spouštění aplikace...........................................................................................14 6.3 Třída CEditor.............................................................................................................16 6.4 Třída CEditorFrameListener.......................................................................................17 6.5 Třídy efektů................................................................................................................19 7 Ukázková aplikace: Magic......................................................................................................20 7.1 Třída CMagic.............................................................................................................21 7.2 Třída CMagicFrameListener......................................................................................21 8 Náhradní ovládání...................................................................................................................23 Závěr..........................................................................................................................................24 Použitá literatura a internetové zdroje........................................................................................25
1
Úvod V současné době jsou výrazné tendence vytvářet speciální ovladače pro práci s počítači a herními konzolemi. Pravděpodobně nejznámější je konzole Wii se svým ovladačem sledující pohyb a natočení, nebo ovladač napodobující kytaru či bicí pro hry typu Guitar Hero. Tato rozšíření mohou umožnit hráči více se ponořit do hry a tím prožít intenzivnější, realističtější zážitek. Tato bakalářská práce je vytvořena jako ukázková aplikace pro rozpoznávání gest v prostoru. Gesta slouží ve své podstatě jako náhrada za klávesnici nebo tlačítka myši. Pomocí zařízení OptiTrack je vytvořena vazba mezi pohyby člověka a pohyby v aplikaci a díky stereoskopické projekci je navozen dojem prostorového vnímání. Tento prostorový vjem umožňuje uživateli vžít se do vytvořené situace a poskytuje mu lepší interakci s počítačem než při používání klávesnice a myši.
2
Kapitola 1
Historie polohovacích zařízení Myš jako polohovací zařízení tvoří nedílnou součást periferií stolního počítače, a nejen jeho. V dnešní době existuje spousta periferií pro počítače nebo herní konzole, které umožňují snímání polohy nebo orientace. Avšak myš byla pro sledování pohybu ruky jedním z prvních zařízení. I ona si musela projít svým vývojem. První prototyp myši vytvořil Douglas Engelbart roku 1963. Tehdy to byla pouze dřevěná krabička, která pohyb po podložce sledovala pomocí dvou koleček a měla jen jedno tlačítko. Postupně se myš vyvíjela, zaoblil se její tvar a přibyla další dvě tlačítka. První ergonomické myši, tedy myši padnoucí lépe do ruky a tím ulehčující práci s nimi, vytvořila firma Microsoft. Nově se objevilo kolečko, které umožňovalo vertikální posouvání obrazu. V případě, že se dalo zmáčknout, tak nahradilo prostřední tlačítko. Časem se pak dále upravoval tvar myši a tím vznikly myši pouze pro praváky nebo leváky, popřípadě se stále vyrábějí univerzální myši pro libovolnou ruku. Přibyla další tlačítka. Nejčastěji dvě na levé straně myši, ale jsou i takové myši, které mají 15 programovatelných tlačítek. Tento typ myši je využitelný spíše pro herní účely než pro potřeby běžného uživatele.
Obrázek 1.1 První prototyp myši pojmenovaný „X-Y Ukazatel“1 Také připojení myši k počítači prošlo vývojem. Základem bylo připojení přes kabel. Konektor se ustálil na typech COM, PS/2 a v současnosti asi nejběžnější USB. Objevily se také myši bezdrátové a to přes infračervené záření, radiové spojení nebo Bluetooth. I snímání pohybu se velmi změnilo. V počátku to byla dvě samostatná kolečka na spodní 1. David Rakowski. Historie a vývoj počítačové myši - Myš letos slaví 40. narozeniny [online]. Poslední revize 30.1.2004 [cit. 21.5.2009].
3
straně myši. Každé pro jeden směr pohybu. Později kolečka nahradila kulička, která pohyb přenášela na válečky a ty snímaly pohyb už obdobně jako předtím kolečka. Nevýhodou bylo zanášení válečků prachem a tím zhoršení reakce myši na pohyb. Další vývoj směřoval k myši optické. Tyto myši ke snímání používají infračervené světlo, které zachycuje odražený obraz a změny v barvách podkladu. Posledním typem jsou myši laserové, které pracují na obdobném principu jako optické, jen zvládají více typů povrchů a mají větší přesnost než myši optické.
Obrázek 1.2 Patnácti tlačítková myš od firmy SteelSeries2 Dalšími polohovacími zařízeními jsou například touchpad, trackball nebo trackpoint. Společné mají hlavně to, že se dají využít jako náhrada za myš v případě, že není po ruce přímo myš, nebo není vhodná podložka, na které by šla myš použít. Touchpad patří v současnosti k běžné výbavě notebooků. Vypadá jako malá destička zabudovaná do desky notebooku a funguje na principu snímání dotyků lidských prstů. Neurčuje absolutní polohu vůči obrazovce, ale relativní změnu polohy a tím posun kurzoru po obrazovce. Nevýhoda spočívá v tom, že snímá pouze jeden objekt, ale pro zamýšlený způsob použití je to dostatečné. Touchpad byl rozšířen o tlačítka simulující tlačítka myši. Také je časté, že pokud se pohyb po touchpadu začne u levého nebo spodního okraje, reaguje touchpad jako kolečko myši pro pohyb obrazu ve vertikálním nebo horizontálním směru. Trackball funguje na podobném principu jako myš s kuličkou. Kulička je umístěna směrem vzhůru a uživatel otáčí přímo s ní. Výhodou je nenáročnost na místo, ale trpí stejným problémem jako kuličková myš – zanáší se nečistotami z lidských rukou. Trackpoint se podobá v zásadě malé páčce, která bývá zasazena do klávesnice, tudíž ji nepřevyšuje. Kurzor se ovládá pomocí naklápění trackpointu do stran ve směru pohybu. Čím více se do něj tlačí, tím víc se naklopí a tím rychleji se pohybuje kurzor. Vlastní zařízení trackpointu ale nemá žádná svá tlačítka, takže se doplňuje, stejně jako touchpad, dalšími tlačítky pro simulaci funkcí myši. 2. Paul Miller. SteelSeries WoW MMO Gaming Mouse makes wasting your life that much easier [online]. 10. 10. 2008, Poslední revize 21. 5. 2009 [cit. 18. 5. 2009].
4
V případě herních konzolí se používají nejčastěji gamepady. Ty obsahují různé množství tlačítek a většinou i páček neboli joysticků. Dalším rozšířením je sledování pohybu nebo polohy ovladače, jako například ovladač pro PlayStation 3. Lépe je v tomto směru vybavený ovladač pro herní konzoli Wii nazvaný Wii Remote, nebo také označovaný jako Wiimote. Je to bezdrátový ovladač přes rozhraní Bluetooth, obsahující několik tlačítek a zvládající snímání polohy a orientace. Pro tuto konzoli a ovladač byla vyrobena celá řada sportovních her, ve kterých se využívá její přednosti snímání pohybu (například pro hraní virtuálního tenisu nebo bowlingu). Specifickým ovladačem pro konzoli Wii je zařízení Wii Balance Board. Jde o podložku, která snímá tlak na různých místech. Tím lze vyhodnotit, v jaké poloze se člověk právě nachází. Například pokud stojí na podložce a tlak je výrazně větší na pravé straně, je pravděpodobné, že se postava naklání doprava, nebo je tím směrem alespoň jeho těžiště, což ve většině případů znamená totéž. Pro složitější zaznamenávání polohy, například pro potřeby animací, je lepší využít zařízení pro sledování bodů v prostoru, například zařízení OptiTrack od firmy NaturalPoint. To poskytne přesnější údaje. Hlavním rozdílem jsou údaje o absolutní pozici místo relativního posunu a možnost většího množství snímaných bodů, než při použití ovladače, který je omezen počtem, váhou a velikostí.
5
Kapitola 2
Použité nástroje 2.1 Zařízení OptiTrack Zařízení OptiTrack se skládá z kamer, zdrojů infračerveného světla, plastové destičky s výběžky, na kterých jsou umístěny kuličky odrážející světlo. Softwarovou výbavu tvoří soubor programů pro zpracování dat z kamer a následný výstup pro jiné programy, nebo pro zaznamenání a následné přehrání. Princip zařízení OptiTrack začíná emitováním infračerveného světla, které se odráží od plastových kuliček o průměru asi 1cm. Tento odraz se zaznamenává pomocí kamer. Tím pro každou kameru vzniká dvojrozměrný obraz, ve kterém jsou nejvýraznější body vzniklé odrazem světla od plastových kuliček. Pro snímání je nutné používat větší množství kamer, protože z jedné kamery by nebylo možné určit polohu v prostoru. A ani při použití několika kamer není vždy zaručené, že bude kulička vidět všemi kamerami. Čím větší počet kamer je použit, tím se zvětšuje přesnost měření.
Obrázek 2.1 Příklad doporučeného rozestavení 8 kamer3
3. Foundation Motion Capture Packages :: OptiTrack :: Optical Motion Capture Solutions :: Capture Your Vision [online]. Poslední revize 21. 5. 2009 [cit. 17. 5. 2009].
6
Data ze všech kamer jsou poslána do jednoho centrálního počítače, ve kterém je zabudovaný software, který přijatá data z kamer zpracovává. Od kamer dostane šedotónní dvojrozměrný obraz, ze kterého lze zjistit přímku, na které leží kulička v závislosti ke konkrétní kameře. Díky informacím z více kamer, lze pomocí průsečíku jednotlivých přímek mezi kamerou a kuličkou, dopočítat pozici bodu v prostoru. Dále lze pomocí více bodů definovat části, které mezi sebou mají pevnou vazbu a tím určit jeden objekt, u kterého lze spočítat polohu i orientaci. K tomu slouží plastové destičky, na které se kuličky umístí v pevné poloze a tím jsou pro programové vybavení přístroje OptiTrack identifikovatelné jako konkrétní objekty v případě, že jich je definováno víc zároveň. Jedním ze softwarových nástrojů je Rigid Body Toolkit. Nejdříve je potřeba provést kalibrace, aby program mohl zjistit polohu kamer v prostoru a díky tomu pak určovat skutečnou polohu bodů, které chceme snímat. Program je pak schopen kamery a snímané body zobrazit v jednoduchém náhledu, ve kterém lze následně vytvářet tzv. „Rigid Body,“ což jsou objekty tvořeny pomocí tří a více bodů. Pro tyto objekty je možno vypočítat polohu i orientaci. Aplikace umožňuje aktuální data zobrazit, objekty si pojmenovat, nebo si je pro rozlišení obarvit. Pro další využití dat je, ale pravděpodobně nejvýhodnější získaná data posílat přes síť jiným aplikacím, která mohou tato data použít pro své účely.
2.2 Engine Ogre3D „OGRE (Object-Oriented Graphics Rendering Engine) is a scene-oriented, flexible 3D engine written in C++ designed to make it easier and more intuitive for developers to produce applications utilising hardware-accelerated 3D graphics. The class library abstracts all the details of using the underlying system libraries like Direct3D and OpenGL and provides an interface based on world objects and other intuitive classes.“4 Ogre je objektově orientovaný, graficky zaměřený engine (herní jádro). Jeho hlavní výhoda je vývoj pod licencí LGPL, což znamená, že je volně k užívání, a to i pro programy, které nemají stejnou licenci. Dále lze tento program šířit pod libovolnou licencí, pokud nejde o odvozené dílo (program pouze využívá Ogre, ale nemění jeho obsah). Grafické zaměření enginu Ogre znamená, že obsahuje převážně prostředky pro práci se scénou a s objekty v ní. Jakékoliv další součásti jako zvuk, síťové služby nebo detekce kolizí nejsou přímo podporovány, ale lze je přidat pomocí různých rozšíření od dalších vývojářů. To umožňuje programátorům pracujících s enginem Ogre, aby si sami vybrali, která rozšíření chtějí používat, a která do svých programů implementovat nechtějí. Zaměření na grafickou část umožňuje kvalitní a ucelenou dokumentaci. Vzhledem k tomu, že se vytvořila početná komunita lidí, je možné na mnohé otázky získat odpovědi hledáním na fóru nebo přímo vlastním dotazem. Dále Ogre podporuje Direct3D nebo OpenGL, lze ho přeložit a používat pod operačními systémy Windows, Linux a Mac OSX. Umožňuje práci s materiály, shadery v jazycích Cg, HLSL a GLSL. Používání modelů ve vlastním formátu umožnuje LOD (level of detail = úroveň 4. About « OGRE - Open Source 3D Graphics Engine [online]. Poslední revize 21. 5. 2009 [cit. 16. 5. 2009].
7
detailů), animaci pomocí předdefinovaných kostí nebo pomocí interpolace (prokládání) poloh modelů. Podporuje particle (částicových) systémy pro vytváření efektů (např. oheň nebo kouř).
2.3 Stereoskopická projekce Stereoskopická projekce se dělí na: •
anaglyf
•
autostereoskopické monitory
•
pasivní stereoskopickou projekci
•
aktivní stereoskopickou projekci
Pasivní stereoskopická projekce slouží k vytvoření dojmu prostoru. Tohoto dojmu je dosaženo pomocí dvou projektorů, z nichž každý vysílá jinak polarizované světlo. Aby se dosáhlo výsledného efektu, je nutné, aby rozdíl v polarizaci byl přesně 90 stupňů. Obraz se pak promítá na stejné místo se stejnou intenzitou, tak aby došlo k překrytí obrazů. Aby se každý obraz dostal k určenému oku, používají se speciální brýle. Tyto brýle jsou vytvořeny tak, že se pro každé oko používá polarizační filtr se stejným nastavením, jako u projektorů, a tím se k oku dostane jen konkrétní obraz.
Obrázek 2.2 Schéma pasivní stereoskopické projekce5 Prostorového efektu se dosahuje vytvářením různých obrazů pro každý projektor. Z původního pohledu na virtuální scénu se obraz pro levé oko posune vlevo a pro pravé oko vpravo. Díky 5. Co je to 3D stereoskopie – GALI-3D [online]. Poslední revize 21. 5. 2009 [cit. 19. 5. 2009].
8
tomuto posunu je každý objekt viděn z úhlu. Čím je objekt blíž, tím je úhel ve scéně větší. Čím je objekt dál, tím je úhel menší. Na stejném principu fungují i lidské oči, tedy při vhodném nastavení a zobrazení rozdílných obrazů pro oči, se dá lidský mozek částečně oklamat – virtuální objekty jsou vnímány prostorově. Tato technologie se používá v laboratoři HCI a v některých 3D kinech. Je totiž vhodná pro projekci i přesto, že vyžaduje speciální projekční plátno, které nemění polaritu světelných paprsků. Také je vhodná pro větší množství pozorovatelů, protože brýle pro ně jsou pouze pasivní. Další možností vytvoření iluze prostoru se naskýtá použitím aktivní stereoskopie. Ta je založena na principu, že se obrazy pro levé a pravé oko zobrazují střídavě. Divák má speciální brýle, které se stejnou periodou zatemňují levé a pravé sklíčko. Výsledkem je propouštění obrazu v dané chvílí pouze pro konkrétní oko. Pro tuto technologii není nutné mít speciální plátno a stačí pouze jeden projektor. Je použitelná pro CRT nebo LCD monitory s dostatečně velikou obnovovací frekvencí. Protože se obrazy střídají, musí zařízení mít alespoň obnovovací frekvenci 120Hz. Výsledná frekvence je pro každé oko poloviční, tedy 60Hz. Menší hodnota už není pro člověka vhodná a pravděpodobně se po chvíli sledování takového obrazu dostaví bolest hlavy nebo očí. Důležitou složkou je zajištění synchronizace obrazovky, popřípadě projektoru a brýlí. Toho se dosahuje vysílačem na bázi infračerveného světla, který posílá pro brýle informaci, které oko má právě zatemnit. Nevýhodou je právě nutnost použití speciálních brýlí, omezuje to tedy počet diváků.
Obrázek 2.3 Schéma aktivní stereoskopické projekce6
6. Co je to 3D stereoskopie – GALI-3D [online]. Poslední revize 21. 5. 2009 [cit. 19. 5. 2009].
9
Kapitola 3
Gesto Gesta jsou prvkem nonverbální lidské komunikace. Pod pojmem gesto nebo také gesto ruky si člověk nejčastěji představí řeč lidského těla, jinak také řečeno gestikulace. Je běžnou součástí života každého člověka. Většina lidí ji používá podvědomě a stejně tak ji také vnímá u ostatních. Vyjadřuje náladu nebo nebo vztah k okolí. Řeč těla se dá i naučit, aby ji měl člověk alespoň částečně pod kontrolou. Takový člověk ji pak umí využívat a působit na své okolí dojmem, jakým on sám chce. Při interakci člověka s počítačem se často pracuje s rozpoznáváním gest ruky jako lidskými gesty, jako je například mávání a podobně. Rozpoznání probíhá buď záznamem pohybu ruky a dalšího zpracování, nebo složitěji pomocí zaznamenání obrazu kamerou a následným vyhodnocením. V případě mé bakalářské práce pracuji s gesty obdobně tak, jako se používají tzv. gesta myši neboli „mouse gestures.“ Gesto ruky tedy neznamená vizuální projev, ale trajektorii pohybu, či prostorovou křivku. Rozpoznání a zaznamenání této křivky pomocí bodů pak tento pohyb definuje. Přesnost je dána podle množství vzorků použitých pro zaznamenání daného gesta a to, s jakou přesností jsou data ukládána. Gesta se následně stejně jako křivky dají porovnávat a pomocí toho určovat, která jsou si nejpodobnější, případně jestli jsou si nějaká dvě gesta podobná. Na základě podobnosti záznamů gest a vyhodnocení významu (pomocí uložených informací) jimi lze spouštět určité činnosti, stejně jako klávesami na klávesnici nebo tlačítky myši. Současně lze využít skutečný pohyb ruky člověka pro zobrazení a lepší zpětnou vazbu.
10
Kapitola 4
Účel práce Důvodem výběru tématu mé bakalářské práce byl zájem o nestandardní způsob ovládání počítače. Na rozpoznávání a používání gest jako nástroje pro ovládání počítače se dá narazit například v internetovém prohlížeči Opera. V tomto prohlížeči jsou gesta založena na celkem jednoduchém principu rozdělení obrazovky křížem od počátku gesta. Potom se rozhoduje, zda se kurzor myši pohybuje po některé lince kříže, popřípadě je v rozumné toleranci, a dále může mít gesto druhou část, pokračující od aktuální polohy v novém směru. Například pro další stránku je to posun od počátku vpravo, nebo pro zavření záložky se používá pohyb nejprve dolů a potom doprava jako druhá část gesta. Další příklad používání gest pro netradiční ovládání je hře Black & White, hra ve které se pomocí gest dají vytvářet a používat kouzla. Kouzlo se stále dá vybrat pomocí ikony, ale použítí gesta lépe vtáhne hráče do hry, protože poskytuje nový pocit z ovládání hry a pocit, že hráč výsledné kouzlo opravdu vyčaroval. Gesto umožní úplně, nebo alespoň částečně, odstranit grafické ovládací prvky hry. To poskytne hráči širší výhled do hry. Zvláště hra Black & White tvoří základ pro projekt rozpoznávání gest v prostoru. V této hře byla gesta omezena pohybem myši, tedy pohybem pouze v ploše. Gesta v prostoru tedy vyžadovala jiný způsob ovládání. Je sice možnost simulovat třetí osu kolečkem myši, ale pohyb je to příliš trhaný, skokový a uživatele nic nenutí ho použít. I v případě, že by se kolečko myši pokusil použít, by se špatně odhadoval vztah mezi hloubkou gesta a tím, jak moc se má kolečko myši otočit. Jako vhodný ovladač se jeví zařízení OptiTrack. Dovoluje připevnit na ruku člověka snímače a přímo sledovat pohyb jeho ruky. Tím se z ruky stává přímo ovladač pro hru bez nutnosti použití další periferie. Cílem práce tedy bylo vytvořit aplikaci, ve které by měl člověk možnost využití gest jako náhradu za klávesnici, a na základě gest spouštět konkrétní události. Bylo také nutné zjistit vhodnou toleranci pro vyhodnocení gest. Při příliš velké toleranci by docházelo k situaci, kdy jsou dvě gesta vyhodnocena jako stejná, při velké přesnosti by měl uživatel problém se do daného gesta trefit.
11
Kapitola 5
Projekt rozpoznávání gest v prostoru Projekt je složen ze dvou částí. První je knihovna Gestures, která slouží pro zpracování údajů o poloze bodů v prostoru a interpretuje je jako souvislá gesta. Ty pak porovnává s dříve nahranými gesty a oznámí shodu, pokud jsou si dvě gesta podobná. Druhou část tvoří ukázkové aplikace využívající knihovnu Gestures. Tyto aplikace jsou postaveny tak, aby bylo možno nahrávat a otestovat srovnávací algoritmus v praxi, ověřit jeho úspěšnost, případně objevit slabá místa algoritmu, a tak vytvořit zpětnou vazbu pro další ladění knihovny. Ukázkové aplikace jsou založeny na enginu Ogre. Ten zajišťuje grafické rozhraní, odezvu na klávesnici a myš a také výstup na více monitorů, což v tomto případě je nutné pro zprovoznění dvou projektorů s rozdílným obrazem. Pro určování polohy se používá zařízení OptiTrack. V projektu se pracuje pouze s gesty rukou, ale protože knihovna pracuje jen s hodnotami určujícími polohu, nebyl by problém ji používat na gesta například nohy nebo těla. Hlavní výpočetně-logický cyklus v projektu má tyto části: •
Kamery zařízení OptiTrack snímající scénu odešlou data do počítače, kde software Rigid Body Toolkit spočítá aktuální reálnou polohu bodů a podle nich dopočítá polohu a orientaci objektů nazvaných Rigid Body.
•
Software pak tuto informaci odešle po síti aplikaci, která reálnou polohu přepočítá na virtuální souřadnice a změní pozici těch modelů ve scéně, které jsou na této poloze závislé.
•
Virtuální souřadnice se předají jako nová data knihovně Gestures a ta s nimi pracuje a vrácí průběžný výsledek podle současného stavu.
•
Aplikace, pokud je to žádoucí, zobrazí grafický výstup z knihovny Gestures.
•
Cyklus se opakuje až do chvíle, kdy je gesto ukončeno. Aplikace se dotáže knihovny na aktuální stav a podle toho ohlásí uživateli, zda bylo gesto úspěšné, či nikoliv. Popřípadě provede akci, která byla s gestem nějak provázána.
12
Kapitola 6
Ukázková aplikace: Editor Účelem této aplikace je nahrávání, ukládání a následné testování gest z knihovny Gestures. Aplikace Editor používá engine Ogre pro zobrazování scény. Oproti druhému ukázkovému programu je scéna omezena pouze na modely levé a pravé ruky. Ty simulují skutečnou pozici rukou člověka pracujícího s aplikací. Na jeho rukách jsou umístěny snímače pro zařízení OptiTrack. Ty jsou pak interpretovány v programu zobrazením modelu ruky s přibližně stejnou polohou v prostoru a stejnou orientací, jako ruce člověka. Důležité je, aby byla alespoň trochu podobná změna polohy v realitě a ve virtuální scéně, aby člověk při pohybu ruky získal dojem, že se modely pohybují stejně jako jeho ruce a nemusel přemýšlet, jak moc musí pohnout rukou, aby se pohnul model ruky do pozice, kterou chce. Tím může vnímat pouze modely na obrazovce a nesoustředit se na pohyb svých rukou v realitě. Aplikace je ovládána převážně levým a pravým tlačítkem myši. Levé slouží pro testování dříve nahraných gest a pravé pro nahrávání gest nových. Editor je koncipován tak, aby vytvářel gesta pro druhou aplikaci Magic, ve které se gesta používají. Gesta jsou tedy čtyři a uživatel může pomocí kláves vybírat, které gesto bude nově vytvářet. Při každém nahrání nového gesta se obnoví databáze z knihovny Gestures, takže je možné nové gesto ihned otestovat.
Obrázek 6.1 Ukázka z aplikace Editor při testování gesta
13
6.1 Třída ExampleApplication Tím, že je aplikace postavena na enginu Ogre, je nutné vyřešit kroky pro jeho úspěšné spuštění. Pro tento účel jsem využil soubor ExampleApplication.h, který je vytvořen tvůrci Ogre pro začátek práce a pro jednoduché aplikace. Obsahuje v sobě spuštění konfiguračního dialogu, načtení a nastavení cest k datovým souborům a nakonec také vytvoření programového okna a spuštění aplikace v něm. Soubor ExampleApplication.h obsahuje třídu ExampleApplication, která je postavena tak, že vyvolá klíčové funkce z Ogre ve správném pořadí. Všechny metody jsou vytvořeny jako virtuální, takže není problém využít pouze omezenou část z nich a zbytek nechat v jejich původní funkční podobě.
6.2 Proces spouštění aplikace Jediná veřejně dostupná metoda je metoda go. Go je nutné spustit ve funkci main nové aplikace. Funguje jako výchozí bod pro proces spouštění enginu Ogre. Ve metodě go se zvolí další metoda setup, která vrací true, pokud se spouštěcí proces povedl, nebo false, pokud na některém dalším kroku selhal. Z metody setup se spouštějí další příkazy v tomto pořadí: •
new Root
•
setupResources
•
configure
•
chooseSceneManager
•
createCamera
•
createViewports
•
createResourceListener
•
loadResources
•
createScene
•
createFrameListener
První krok je vytvoření třídy Root. Jak se dá poznat z názvu, jde o „kořen“ celé aplikace, výchozí bod, pomocí kterého pracuje aplikace s počítačem. Root aplikaci zprostředkovává přístup k renderovacím (vykreslovacím) metodám počítače, práci s konfigurací enginu Ogre, nebo pro zapisování do log souboru. Následuje vyvolání metody setupResources. V této metodě se načítají údaje ze souboru resources.cfg. Zde jsou uloženy cesty do adresářů obsahující datové soubory. Například modely, textury a další soubory se skripty určenými pro Ogre. Další je metoda configure, ve které se vytvoří konfigurační dialog. Zde si může uživatel vybrat z podporovaných renderovacích systémů (Direct3D nebo OpenGL), nastavit rozlišení obra-
14
zu, nebo zda má být obraz v okně nebo přes celou obrazovku, nebo vybrat typ anti-aliasingu. Pokud uživatel konfigurační dialog zavře, aplikace se ukončí. V dalším kroku se načte metoda chooseSceneManager, ve které se pomocí dříve vytvořené třídy Root založí jedna nebo více tříd SceneManager, neboli správců scény. Ti mají za účel spravovat veškeré objekty, které jsou k nim připojeny. Tvoří se tím stromová struktura scény. Do třídy SceneManager se pak vloží objekty – například modely, světla nebo kamery. Metoda createCamera je už vhodnější pro přetížnení v aplikaci. V této metodě se vytvářejí kamery, které budou ve scéně a budou použity pro zobrazení obrazu pro uživatele. Standardně se vytváří jedna kamera pro scénu a v aplikaci se s ní už jen pohybuje. V případě výstupu na více monitorů není nutné vytvářet přímo více kamer, protože se na každý monitor můžou posílat stejná obrazová data. Ale v případě vytvoření dojmu prostoru pomocí stereoskopické projekce je nutné vytvořit dvě kamery. První kameru pro levé oko a druhou pro pravé. Následuje metoda createViewports, která logicky navazuje na vytváření kamer ve scéně. Viewport funguje jako propojení mezi kamerou a oknem aplikace. Jedno okno (v případě více monitorů je více oken) může obsahovat jeden, ale i více Viewportů. Lze například vytvořit situaci, kdy je obrazovka vertikálně rozdělena na dvě části, a v každé je jiný Viewport. Na ty se pak připojí různé kamery, které budou v rozdílných třídách SceneManager a tím budou zobrazovat i naprosto rozdílný obraz. U Viewportu se nastavují například parametry pro změnu pozadí obrazu. Každý Viewport má svou konkrétní kameru. Je také potřeba po každé změně aktuálních Viewportů nastavit poměr stran pro připojené kamery. Metoda createResouceListener se může využít pro vytvoření obrazovky při nahrávání dat, před vytvořením skutečné scény. Druhá metoda loadResources provádí nahrání dat z míst, která byla nastavena v setupResources. Je možné ji dále rozšířit pro nahrání dalších dat, která by potřebovala specifické nahrávání. Další metoda createScene je jako jediná ryze virtuální. To znamená, že sama původně nic nedělá a je nutné ji přetížit. Při přetěžování této metody se vytváří scéna taková, jaká bude při spuštění aplikace. Většina příkazů je zde směřována přes třídu SceneManager, která byla vytvořena dříve. Načítají se zde modely, vytvářejí pomocné body pro pohyb s objekty, nebo se tvoří světla pro osvětlení scény. Každému objektu se nastaví parametry, jako je například poloha a orientace, nebo v případě světla barva, nebo útlum intenzity se vzdáleností. Poslední volaná metoda je createFrameListener. Ta slouží pro vytvoření a zaregistrování další třídy FrameListener, která funguje jako parametr pro třídu Root. Třída FrameListener se stará o dění v programu za běhu aplikace, to znamená, že reaguje na vstupy z klávesnice, myši či jiných zařízení. Mění polohu objektů ve scéně a nastavuje parametry podle potřeby během práce s aplikací.
15
6.3 Třída CEditor Třída CEditor je poděděna ze třídy ExampleApplication. Metody pro načítání datových souborů a vytvoření konfiguračního dialogu zůstaly zachovány a přetěžují se tyto metody: •
chooseSceneManager
•
createCamera
•
createViewports
•
createScene
•
createFrameListener
Metoda chooseSceneManager se příliš neliší od původní metody ve třídě ExampleApplication. Jen při vytváření třídy SceneManager se používá jiná hodnota parametru. V další přetížené metodě createCamera se nejprve vytvoří bod ve scéně, na který se pak mohou navázat další objekty. V této chvíli je potřeba rozlišit, zda je k počítači připojen jeden nebo dva monitory. V případě pouze jednoho monitoru, což je situace spíš v případě testování aplikace bez stereoprojekce, se vytvoří jen jedna kamera a umístí se do vytvořeného bodu. Pokud jsou připojeny dva monitory, vytvoří se kamery dvě, které simulují levé a pravé lidské oko. Zde bylo nutné praktickými testy najít vhodnou vzdálenost mezi kamerami. Při příliš malé vzdálenosti si budou obrazy příliš podobné a nebude docházet k prostorovému vjemu. Pokud ale bude vzdálenost příliš velká, lidský mozek už uvidí dva rozdílné obrazy a nebude je vnímat jako jeden celek s prostorovou informací. Vzdálenost jsem hledal testem, při němž jsem zvětšoval po malých krocích vzdálenost kamer. Výsledná vzdálenost je překvapivě dost malá. Efekt prostoru pak není tak silný, ale člověk nemá problém vidět virtuální scénu plasticky. Metoda createViewports řeší už jen připojení kamery ke správnému oknu aplikace a nastavení poměru stran pro kameru podle konkrétního okna. V případě dvou monitorů jsou také dvě okna a tudíž dva Viewporty. Na první Viewport je připojena levá kamera a na druhý pravá kamera. Jak už bylo řečeno v předchozí kapitole, je metoda createScene jediná nutná na přetížení. V obsahu této metody se aplikace Editor a Magic výrazně liší, protože v programu Editor je potřeba pouze zobrazit modely rukou, aby měl člověk přímou odezvu na své pohyby a mohl se orientovat ve virtuálním prostoru. V případě aplikace Magic je vytvořena scéna tak, aby motivovala uživatele k provádění gest. Scéna v aplikaci Editor se skládá ze čtyř prvků. První je přímo pro uživatele neviditelný, ale podstatný. Je to nastavení ambientního osvětlení. Ve scéně jiné světlo není, takže objekty nejsou nějak zvlášť plastické, ale pro účel editoru gest to postačuje. Druhým prvkem je vytvoření řídícího bodu ve stejném místě jako je kamera, popřípadě doprostřed mezi dvě kamery. Na tento bod se pak připojí další dva objekty pro levou a pravou ruku. Ruce zde potom mají pouze lokální pozici a orientaci vůči řídícímu bodu. To umožňuje jejich snadnější umisťování ve scéně vůči kameře, která je v zásadě ve stejném místě jako řídící bod.
16
Modely pro levou a pravou ruku jsou totožné, jen zrcadlově převrácené. Proto už popíši pouze to, z čeho se skládá jedna ruka. Model samotný je celkem jednoduchý. Tvoří ho ruka po zápěstí, která symbolizuje ruku uživatele. Aby nevytvářelo špatný dojem, že je ruka v zápěstí useknutá, je přidán částicový systém vytvářející efekt magické ruky. Poslední přetíženou metodou je createFrameListener. Stejně jako první přetížená metoda se příliš neliší od původní metody v ExampleApplication. Nejprve se vytvoří instance třídy FrameListener, v tomto případě jeho poděděná třída CEditorFrameListener, a předají se jí některé parametry, které byly vytvořeny během spouštění aplikace v třídě CEditor. Nakonec se do třídy Root přidá nově vytvořený FrameListener a tím práce této třídy končí. Jakékoliv zásahy během aplikace se dějí ve třídě CEditorFrameListener.
6.4 Třída CEditorFrameListener Třída CEditorFrameListener je poděděná ze třídy ExampleFrameListener, která hlavně plní některé parametry a také se stará o aktivaci, a při ukončení také deaktivaci vstupů z klávesnice, myši a jiných dalších vstupních zařízení. V rámci tříd typu FrameListener je nejdůležitější metoda frameStarted, která se automaticky provede před vykreslením každého snímku. Třída také dědí z knihovny OIS (The Open Input System) třídy MouseListener a KeyListener. MouseListener se stará o vstup z myši a to jak o aktuální polohu na obrazovce, tak o relativní změnu polohy, nebo o to, která tlačítka myši jsou zmáčknuta. KeyListener reaguje na události související s klávesnicí. Zde mohou nastat jen dvě události: stlačení a uvolnění klávesy, kde proměnná určuje, které klávesy se tato akce týká. První z třídy CEditorFrameListener se aktivuje její konstruktor. V něm se provedou příkazy nutné pro správné odebírání ze vstupů, nastavení nutných parametrů a nastavení výchozích hodnot pro proměnné třídy. V konstruktoru se také nastavují spojení na OptiTrack. Pro tento účel je nutné vytvořit spojení na počítač, na kterém je spuštěn software Rigid Body Toolkit, a má zapnuté posílání dat po síti. Spojení se tvoří pomocí adresy počítače a správného portu, který se musí shodovat v aplikaci a v Rigid Body Toolkit. Dále se pro každý sledovaný objekt, neboli Rigid Body, zaregistruje funkce, která bude volána pokaždé, když ze zařízení OptiTrack přijdou data. Podle dokumentace by tato událost měla nastat 100krát za vteřinu. Tyto funkce jsou mimo CEditorFrameListener, protože jsou na ní nezávislé. Při každém volání těchto funkcí se naplní vektor souřadnic, který se dále používá na aproximaci posledních pozic, aby se částečně omezily nepřesnosti v měření. Poprvé v Editoru se zde pracuje s knihovnou Gestures. Nejprve je nutné vytvořit řídící třídu GestureManager, která například obsahuje gesta, se kterými se mají nová gesta porovnávat. Pak je nutné tato předem vytvořená gesta nahrát. Ta jsou uložena na disku a lze je načíst pomocí metody loadGestureFromFile třídy GestureManager. Nakonec je potřeba opět pomocí třídy GestureManager vytvořit třídu Gesture, která umožňuje vkládání nových souřadnic a porovnávání s předchozími gesty. Hlavní metoda třídy je frameStarted. Spouští se před vykreslením snímku a jako parametr
17
má čas od posledního snímku, což je užitečné pro posun objektů, aby nebyl pohyb závislý na snímcích za sekundu. Nejprve se v této metodě volá aktualizace pro všechny vytvořené efekty ve scéně. Podrobněji budou zmíněny později, jen ve stručnosti jsou to efekty pro tvorbu stopy při kreslení gesta do prostoru a zobrazení stopy pro již vytvořená gesta, aby bylo pro uživatele jednodušší je správně napodobit. Navíc se zobrazuje aktuální porovnávaný bod v gestu. Dále se spočítá z posledních deseti záznamů pozice a orientace, kterou poslalo zařízení OptiTrack, a na základě této průměrné hodnoty se nastaví poloha rukou ve virtuální scéně. Následuje část příkazů z knihovny Gestures. Zde mohou nastat dvě situace: nahrávání a testování gesta. V prvním případě dochází k nahrávání nového gesta pro následné uložení. Uloží se pouze aktuální pozice pravé ruky jako nová hodnota pro třídu Gesture. V druhém případě uživatel chce gesto testovat. Opět se musí vzít aktuální pozice pravé ruky, vložit do třídy Gestures a následně od stejné třídy zjistit, jaká ještě gesta jsou možná a která už není nutné sledovat. Pokud je gesto ještě mezi potenciálními možnostmi, zobrazená trajektorie se ponechá a zvýrazní se pouze právě porovnávaný bod. V opačném případě se celá vyznačená trajektorie smaže a tím uživatel vidí, která gesta má možnost ještě udělat. Aktuální zvýrazněný bod není pro uživatele příliš nápomocný a slouží spíš pro hledání slabých míst v algoritmu porovnávání gest. Metoda keyPressed se zavolá pokaždé, když dojde k stisknutí některé klávesy. Je to přetížená metoda z knihovny OIS. V programu Editor je potřeba klávesnice na přepínání mezi gesty, která se budou zaznamenávat a pak ukládat na disk. Další dvě metody jsou mousePressed a mouseReleased. Volají se při stisknutí a uvolnění některého tlačítka myši. Pro levé tlačítko se nejprve vytvoří efekt sledující a zobrazující pohyb pravé ruky. Následuje vymazání starých dat z třídy Gesture, aby se mohla vkládat nová data, a nastaví se pro tuto třídu porovnávání se všemi existujícími gesty v databázi třídy GestureManager. Protože se v aplikacích Editor a Magic pracuje se čtyřmi gesty, tak se v této chvíli ověří, zda gesta existují. Pro ně se zobrazí stopa gesta na základě dat, které vrátí GestureManager ke konkrétnímu gestu. Pak následuje část probíhající v metodě frameStarted pro testování gesta, až do chvíle, kdy uživatel pustí levé tlačítko myši. V tento moment se zjistí výsledek porovnávání pro třídu Gesture. Pokud není žádné gesto nalezeno, je efekt stopy zbarven do červena. Pokud se podařilo gesto rozpoznat, zbarví se stopa do zelena a nalezené gesto se vypíše na obrazovku. Pro pravé tlačítko myši je proces jednodušší, protože se nezobrazují ostatní, gesta a nově vytvořené gesto se s žádným gestem neporovnává. Při stisknutí pravého tlačítka myši se tedy nejprve vytvoří stopa pohybu ruky a vymažou se data v třídě Gesture. Následuje přidávání hodnot v každém snímku v metodě frameStarted. Nahrávání končí opět uvolněním pravého tlačítka myši. Nejprve se ukončí stopa pohybu ruky, a podle uživatelem zvoleného názvu gesta, se staré gesto smaže, uloží na disk a vloží do třídy GestureManager pro další porovnávání.
18
6.5 Třídy efektů V aplikaci Editor se používají dva efekty. Jeden pro zobrazení stopy nového gesta, tedy křivka po které uživatel pohyboval rukou a druhý efekt pro zobrazení již existujících starých gest. Tyto dva efekty jsou vytvořeny jako částicové systémy a jsou založeny na podobném principu. Stopa nového gesta je tvořena podle aktuální pozice ruky a předchozí pozice. Částice jsou tvořeny v pravidelných intervalech a to způsobem, že se od poslední umístěné částice vytvoří v pravidelných celých intervalech další až k aktuální poloze ruky a zapíše se nová pozice poslední částice, která bude použita v další aktualizaci stopy. Zobrazení starého gesta funguje na stejném principu jako stopa za rukou, ale jsou data už v jednotném balíku souřadnic, takže vytvoření probíhá okamžitě pro celé gesto. Navíc efekt zobrazeného gesta obsahuje metodu pro vytvoření nové částice na libovolné pozici v prostoru a to je využito pro zvýraznění právě porovnávané pozice v gestu.
19
Kapitola 7
Ukázková aplikace: Magic Účel této aplikace byl v testování rozpoznávacího algoritmu gest knihovny Gestures zábavnějším a více motivujícím způsobem, než jen zda bylo gesto úspěšně rozpoznáno nebo ne. Aplikace je tedy postavena na jednoduchém principu, kdy proti sobě stojí dva kouzelníci a snaží se porazit toho druhého. Obě postavy mají k dispozici čtyři kouzla - magický štít, blesky, ledové úlomky a ohnivou kouli. Ke každému gestu je připojeno jedno kouzlo. Uživatel použitím některého gesta vytvoří kouzlo, které bylo spojeno s tímto gestem. Během zkoušení aplikace se ale objevil problém s vhodným nastavením tolerance u rozpoznávání gest, protože při provádění gest v prostoru, navíc pod časovým tlakem, nebylo lehké udělat gesto napoprvé správně. Základ aplikací Editor a Magic je skoro stejný. Obě dědí od tříd ExampleApplication a ExampleFrameListener, které jsou uloženy v souborech, které nejsou duplicitní. Liší se tím, jakým způsobem jednotlivé metody přetěžují.
Obrázek 7.1 Ukázka z aplikace Magic
20
7.1 Třída CMagic V třídě CMagic, která je poděděná od ExampleApplication, se metody chooseSceneManager, createCamera, createViewports ani createFrameListener neliší od stejně jmenovaných metod v třídě CEditor. Odlišné jsou aplikace jen v metodě createScene. Nejprve se vytvoří tzv. SkyBox, který funguje jako pozadí scény. V realitě by se dal popsat jako horizont jen s tím rozdílem, že je v něm zahrnuta i obloha a také „podlaha“ pod scénou. V dalším kroku se nastaví ambientní osvětlení, stejně jako v aplikaci Editor. Dále se vytvoří terén. Ten je tvořen jednovrstvým modelem, na který je nanesena textura ostrovní krajiny. Do scény je následně přidáno směrové světlo, jako simulace slunečního svitu. Následuje vytvoření vodní plochy. Ta je vytvořena pomocí přídavného balíku do enginu Ogre nazvaného Hydrax. Náhodnost vodní hladiny je tvořena pomocí Perlinova šumu. Podporuje například odraz od vodní hladiny, zvlněný pohled skrz hladinu nebo změnu barvy do tmavších odstínů se stoupající hloubkou vody. Nakonec je ještě potřeba vytvořit řídící bod pro umístění uživatele a navázat na něj modely levé a pravé ruky.
7.2 Třída CMagicFrameListener Konstruktor třídy je opět velmi podobný konstruktoru v aplikaci Editor. Nastavuje výchozí hodnoty pro parametry třídy, aktivuje zachytávání vstupu z klávesnice, myši a vytváří spojení na zařízení OptiTrack a implementuje knihovnu Gestures. V konstruktoru je také vytvořen soupeř a jsou vytvořeny ukazatele životů pro uživatele i pro soupeře. Implementace knihovny Gestures funguje za předpokladu, že byla spuštěna aplikace Editor a uživatel si nahrál čtyři gesta, která bude využívat v této aplikaci. Pokud tak neučinil a v nahrávané databázi gest nejsou připravena čtyři gesta, program to uživateli oznámí a ukončí se. Pokud vše proběhne v pořádku, program pokračuje dál a zobrazí scénu. Pro používání aplikace Magic není klávesnice nutná. Reakce na klávesy slouží spíše pro testovací a ladící účely. Například při běžném používání není možné pohybovat s kamerou, protože se předpokládá, že člověk bude stát na místě, ale pro vyzkoušení přidávaných funkcí bylo občas žádoucí prozkoumat výsledek z více směrů. K ovládání stačí pouze levé tlačítko myši pro vytváření nového gesta a jeho otestování. Pro určování polohy se používá zařízení OptiTrack připojené na uživatelovy ruce. Chování aplikace je velmi podobné jako v programu Editor. Uživatel začne vytvářet nové gesto pomocí levého tlačítka myši. Při stisku levého tlačítka myši se nejprve zruší veškeré existující efekty. Následně se vyčistí data v třídě Gesture, aby bylo možné vkládat nová data. Poté se nastaví porovnávání na všechna gesta v databázi třídy GestureManager. Aby bylo jednodušší správné gesto vytvořit pohybem ruky, všechna gesta se také zobrazí. Po provedení této inicializace probíhá v každé iteraci metody frameStarted výpočet polohy pro levou i pravou ruku člověka, vložení nové pozice do nově vytvářeného gesta a pro gesta, která už není možné dosáhnout, se zruší jejich zobrazená stopa. Gesto končí při uvolnění levého tlačítka myši. Vytvořené gesto se vyhodnotí, a pokud mu odpovídalo některé z gest v databázi, tak stopa gesta zezelená
21
a spustí se některá z akcí napojená na konkrétní gesto. Celkem jsou pro 4 gesta vytvořeny 4 efekty - magický štít, blesky, ledové úlomky a ohnivá koule. Pokud nastane situace, ve kterém je více gest vyhodnoceno jako správných, vybere se první možné. Pokud se gesto nezdařilo a nenašlo se jemu podobné, v databázi stopa zčervená a uživatel je nucen pokus opakovat. Metoda frameStarted by se dala rozdělit na 5 částí: •
aktualizace ukazatelů životů
•
výpočet nové pozice a orientace rukou
•
správa efektů
•
práce s gesty
•
aktualizace soupeře
Dva ukazatele životů se v každém snímku aktualizují podle aktuálního počtu životů. Na začátku mají obě postavy 100% a v místě okraje obrazovky značí 0%. Pozice a orientace modelů rukou se počítají stejně jako v aplikaci Editor. To znamená, že se zapisuje posledních 10 souřadnic a z nich se vypočítá průměr, aby se omezilo chvění modelů. Správa efektů probíhá procházením dvou polí, ve kterých jsou uloženy efekty. V jednom poli jsou uloženy efekty vytvořené uživatelem a ve druhém efekty soupeře. Zjednodušuje to vyhledávání pro ověření, zda někde nedochází ke kolizi mezi efekty (například má-li štít zachytit ohnivou kouli). Pro názornost popíši jeden cyklus pro efekty hráče. Nejprve se pro každý efekt volá jejich společná metoda update, která mění pozici nebo tvar efektu, podle typu a aktuální akce, kterou efekt vykonává. Pokud update ohlásí speciální případ (kterým je například při efektu ohnivé koule naražení do soupeře), tak se efekt zruší a soupeři se odečte určitá část životů. Pokud efekt stále existuje, tak se ještě testuje, zda není v konfliktu se soupeřovým magickým štítem. V případě ohnivé koule nebo ledových úlomků se porovnávají vzdáleností, protože tato kouzla se vypustí a pak už letí vlastní rychlostí k cíli. Blesky naopak jsou okamžité, takže se řeší pouze zda štít existuje, či nikoliv. Poslední část je aktualizace soupeře. Soupeř má stejné možnosti kouzel jako uživatel, ale i když vytváří stopu jakoby kouzlil, ve skutečnosti se kouzla vybírají jen jako náhodná čísla. Aby měl uživatel čas se ve scéně trochu rozhlédnou a zvyknout si na pohyb rukou a podobně, čeká soupeř až na první pokus o gesto provedené uživatelem.
22
Kapitola 8
Náhradní ovládání Ovládání aplikací pomocí zařízení OptiTrack je velmi pohodlný způsob, ale vytvořit v jeho prostředí nějakou formu tlačítka by bylo velmi obtížné. Na druhé straně používání myši s kabelem, když člověk potřebuje dělat gesta rukou je velmi nepraktické a omezující. Jako vhodný ovladač se zdá být Wii Remote. Dobře padne do ruky a je připojen přes Bluetooth, takže člověka žádné kabely neomezují. Problém byla jeho integrace do aplikace. Nakonec se našlo řešení v programu GlovePIE (Glove Programmable Input Emulator), který dokáže při spuštění vhodného skriptu převádět tlačítka od Wii Remote na stisky kláves nebo tlačítky myši. Ovládání aplikací je pak velmi pohodlné. Je to bohužel nutné spouštění další aplikace navíc, ale na druhou stranu to neovlivní zdrojový kód samotné aplikace.
23
Závěr Tato práce měla za cíl ověřit použitelnost knihovny Gestures, určenou pro rozpoznávání gest v prostoru. Pro tento účel vznikly dvě ukázkové aplikace. První aplikace Editor slouží k vytváření a testování gest ruky. Druhá aplikace Magic pomocí mini-hry souboje kouzelníků nutí vytvářet gesta rychleji a tím logicky klesá přesnost. Rozdíl mezi vytvářením gesta v klidu a pod tlakem je velmi znatelný. Úspěšnost gest lze vylepšit, pokud si gesta uživatel nejprve sám vytvoří. Každý člověk bude při pokusu o stejné gesto pohybovat rukou trochu jinak. Pokud si gesto vytvoří sobě na míru, pravděpodobně to velmi zvýší úspěšnost pokusů. Vzhledem k použitým algoritmům pro porovnávání gest a výsledkům testování v praxi, bych knihovnu Gestures doporučil spíše pro situace, kdy chceme, aby uživatel prováděl námi vytvořená gesta se zaměřením na přesnost provedení. Dle mého názoru knihovna není vhodná na ovládání počítače, kde uživatel očekává vysokou úspěšnost i při malé přesnosti. V budoucnu by mohla být knihovna Gestures vylepšena pro lepší rozpoznávání gest, například v případě zvětšování a zmenšování gesta. Aplikace Magic by mohla být rozšířena o více efektů a kouzel, vylepšit chování soupeře, nebo dovolit uživateli uhýbání do stran.
24
Použitá literatura a internetové zdroje Gregor, Martin: Rozpoznávání gest v prostoru. Brno, 2009. s. 26. Bakalářská práce na Fakultě informatiky Masarykovy univerzity na katedře počítačové grafiky a designu. Vedoucí práce RNDr. Barbora Kozlíková Miller, Tom: Programujeme 3D hry v jazyce C#. Brno: Computer Press, 2006. vyd. 1. s. 32. ISBN 80-251-1126-1. Foundation Motion Capture Packages :: OptiTrack :: Optical Motion Capture Solutions :: Capture Your Vision [online]. Poslední revize 21. 5. 2009 [cit. 17. 5. 2009]. OGRE - Open Source 3D Graphics Engine [online]. Poslední revize 21. 5. 2009 [cit. 20.5.2009]. Main Page - Ogre Wiki [online]. Poslední revize 20. 4. 2009 [cit. 20. 5. 2009]. GNU Lesser General Public License - Wikipedie, otevřená encyklopedie [online]. Poslední revize 2. 5. 2009 [cit. 17. 5. 2009]. David Rakowski. Historie a vývoj počítačové myši - Myš letos slaví 40. narozeniny [online]. Poslední revize 30.1.2004 [cit. 21.5.2009]. GALI-3D: Technologie 3D a stereoskopie [online]. Poslední revize 21. 5. 2009 [cit. 19. 5. 2009]. Hydrax - Ogre Wiki [online]. Poslední revize 5. 3. 2009 [cit. 20. 5. 2009]. Particle Accelerator - Ogre Wiki [online]. Poslední revize 6. 5. 2009 [cit. 20. 5. 2009]. Hand - 3D Model – ShareCG [online]. Poslední revize 21. 5. 2009 [cit. 20. 5. 2009]. wizards staff - 3D Model - ShareCG [online]. Poslední revize 21. 5. 2009 [cit. 20. 5. 2009].
25
Skull staff - 3D Model - ShareCG [online]. Poslední revize 21. 5. 2009 [cit. 20. 5. 2009]. The Official Blender Model Repository - Model Downloads [online]. Poslední revize 21. 5. 2009 [cit. 20. 5. 2009]. Carl.Kenner – GlovePIE [online]. Poslední revize 21. 5. 2009 [cit. 13. 5. 2009]. Paul Miller. SteelSeries WoW MMO Gaming Mouse makes wasting your life that much easier [online]. 10. 10. 2008, Poslední revize 21. 5. 2009 [cit. 18. 5. 2009].
26