Eötvös Loránd Tudományegyetem Informatikai kar Programozáselmélet és Szoftvertechnológiai Tanszék
A kiterjesztett valóság, háromdimenziós modellek térbeli transzformációi
témavezető: Dr. Istenes Zoltán Egyetemi tanár
készítette: Hertelendy Gábor Programtervező Informatikus BSc
Budapest, 2011 A projekt az Európai Unió támogatásával és az Európai Szociális Alap társfinanszírozásával valósul meg, a támogatási szerződés száma TÁMOP 4.2.1./B-09/1/KMR-2010-0003.
TARTALOMJEGYZÉK 1.
2.
BEVEZETÉS ...................................................................................................... - 4 1.1
A kiterjesztett valóság bemutatása ................................................................. - 4 -
1.2
Felhasználási területek ................................................................................... - 6 -
1.3
A Koncepció................................................................................................... - 6 -
FELHASZNÁLÓI DOKUMENTÁCIÓ ........................................................... - 8 2.1
A program rövid ismertetése .......................................................................... - 8 -
2.2
Felhasznált Módszerek ................................................................................... - 8 -
2.3
Rendszerkövetelmény .................................................................................... - 9 -
2.4
Telepítési útmutató ....................................................................................... - 10 -
2.5
A program Használata .................................................................................. - 10 -
2.5.1
Inicializálása ........................................................................................ - 10 -
2.5.2
Egységeinek részletes bemutatása ....................................................... - 13 -
2.5.2.1
Vezértőeszközök és a Felület ...................................................... - 13 -
2.5.2.2
Állapotok ..................................................................................... - 14 Vezérlése .............................................................................................. - 15 -
2.5.3 2.5.3.1
A használat előfeltétele ................................................................ - 15 -
2.5.3.2
Háttértudás ................................................................................... - 15 -
2.5.3.3
A Giroszkóp................................................................................. - 16 -
2.5.3.4
A Tengelyek ................................................................................ - 18 -
2.5.3.5
A Forgatási szög beállítása .......................................................... - 18 -
2.5.3.6
A Modellasztal Használata .......................................................... - 19 -
2.5.3.7
A Menü elérése ............................................................................ - 20 -
3.
2.5.3.8
A Menü Elemei............................................................................ - 20 -
2.5.3.9
A Menüben való Navigálás ......................................................... - 20 -
2.5.3.10
A Menüpontok .............................................................................. - 21 -
FEJLESZTŐI DOKUMENTÁCIÓ ................................................................ - 23 3.1
Felhasznált módszerek ................................................................................. - 23 -
3.2
Felhasznált Eszközök ................................................................................... - 24 -
3.2.1
Implementáció és könyvtárak .............................................................. - 24 -
3.2.2
Microsoft XNA Game Studio 3.1 ........................................................ - 24 -
3.2.3
GoblinXNA v3.5 .................................................................................. - 24 -
3.2.4
ALVAR 1.4.0 ....................................................................................... - 25 -
3.2.5
DirectShow .......................................................................................... - 25 -
3.2.6
OpenCV 1.0 ......................................................................................... - 25 -
3.2.7
CMakE ................................................................................................. - 25 -
3.3
A programozási környezet összeállítása ...................................................... - 26 -
3.3.1
GoblinXNA v3.5 .................................................................................. - 26 -
3.3.2
A kamera kalibrálása ........................................................................... - 27 -
3.4
GoblinXNA felépítése .................................................................................. - 28 A Színtér gráf ....................................................................................... - 28 -
3.4.1
A Fontosabb csúcsfajták .............................................................. - 29 -
3.4.1.1 3.5
A Program felépítése .................................................................................... - 31 -
3.5.1
A program élettartama ......................................................................... - 31 -
3.5.2
Az Osztályszerkezet ............................................................................. - 32 -
3.5.2.1
supervisor osztály ........................................................................ - 36 -
3.5.2.2
PerifericDevice osztály ................................................................ - 38 -
3.5.2.3
_3DofDisc osztály ....................................................................... - 39 -
3.5.2.4
Disc osztály ................................................................................. - 41 -
3.5.2.5
Slate osztály ................................................................................. - 42 -
3.5.2.4
Axes osztály................................................................................. - 44 -
3.5.2.6
Gyroscope osztály ....................................................................... - 45 A Vezérlési modell ............................................................................. - 47 -
3.5.3
Programszintű kommunikáció ..................................................... - 48 -
3.5.3.1
Tesztelés............................................................................................... - 49 -
3.5.4
4.
3.5.4.1
Illusztrált Tesztesetek ................................................................... - 49 -
3.5.4.2
További Tesztesetek ..................................................................... - 54 -
ÖSSZEGZÉS..................................................................................................... - 55 -
ÁBRAJEGYZÉK ..................................................................................................... - 56 IRODALOMJEGYZÉK ......................................................................................... - 59 -
1. BEVEZETÉS 1.1 A KITERJESZTETT VALÓSÁG BEMUTATÁSA A kiterjesztett valóság, vagy más néven „Augmented Reality” (AR) lehetővé teszi, hogy a valós környezetet összefésüljük egy virtuális környezettel, és az eredményt valamilyen kijelzőn megnézhessük. Az érzékszerveinkkel felfogható valóság számítógép segítségével történő kiterjesztése fiatal technológia. A módszer lényege, hogy valamilyen eszközzel felfogjuk a körülöttünk lévő világ egy részét. Ez az eszköz jellegzetesen egy videó rögzítő, és a célja az emberi látás, mint érzék mímelése. A felfogott információt egy dedikált interfészen keresztül szemléljük, miközben felhasználjuk az interfész nyújtotta lehetőségeket, hogy megváltoztassuk azt. Az interfész valamilyen számítógép, amivel feldolgozzuk a felvett képinformációt és emberi szem által érthető plusz információt adunk hozzá. A tisztánlátás végett álljon itt egy példa. Vegyünk egy kamerát. Ez lesz a „szemünk”. Tegyük fel, hogy ez a kamera egy asztal lapját veszi. Üresnek tűnik az asztal, szeretnénk egy teáskannát rárakni, csakhogy nincs teáskannánk. A kiterjesztett valóság segítségével, a kamera képére ráilleszthetőek virtuális objektumok. Így válik kombinálhatóvá a felfogható valóság egy jól definiált szelete (a továbbiakban: valóság), és a virtuális „valóság”. Elkészítjük a teáskanna virtuális modelljét és kombináljuk a kamera által felvett asztal lapjával. Vagyis a két bemenetünk megfelelő módon történő összefésülése után a kimenet, egy háromdimenziós tér síkra vetítése. Így a számítógép képernyőjén keresztül látjuk a valóságot a hozzáadott tartalommal együtt.
-4-
1. ábra - A virtuális világ és a valóság összefésülése
Ahhoz, hogy mindezt megtehessük, szükséges, hogy a kamera által vett valóságot manipuláljuk valahogyan, ugyanis a kamera képe magában nem tartalmaz elegendő térinformációt ahhoz, hogy szinkronba hozzuk vele a virtuális teret. Illetve ezen információ kinyerése nem determinisztikus, komplex és nagy erőforrás-igényű munka lenne. Éppen ezért jeleket (a továbbiakban: marker) helyezünk el a valóságban, amik természetszerűleg megjelennek a felvételen. A program analizálja a videó képét, és felismeri a markerek térbeli távolságát, méretét, elfordulását és torzulását. Ezáltal létrehozva egy virtuális teret, ami szinkronban van a valósággal.
2. ábra - Modellek markerekre illesztve
-5-
1.2 FELHASZNÁLÁSI TERÜLETEK A kiterjesztett valóság új és izgalmas technológia, és mint minden ilyen, hamar teret hódít magának. Jelen pillanatban az orvostudományban rohamosan fejlődik az AR technológiát használó eszközök minősége, a játékiparban és az oktatásban is egyre szélesebb körben használatos amiatt a varázslatos élmény miatt, amit ritkán tud számítógépes program nyújtani. Emellett katonai kiképzésre, szimulációkra és marketing célokra is használatos.
3. ábra – AR Autóreklám
1.3 A KONCEPCIÓ Míg a világban nő az igény a háromdimenziós tartalom iránt, jelen pillanatban az interakció igazán nehéz az ilyen technológiát használó eszközökkel. Ugyan nézhetünk „kvázi” három dimenzióban filmeket és játszhatunk is háromdimenziós játékokkal, de a lehetőségek igazán limitáltak. Nem kapunk valódi háromdimenziós élményt sem a filmeknél, sem a játékoknál. Erre jelen pillanatban a kiterjesztett valóság az egyetlen alternatíva. A cél az volt, hogy olyan programot készítsek, ami ennek a technológiának a kihasználásával módot ad a felhasználónak, hogy a valóság kiterjesztése révén igazi háromdimenziós élményben részesüljön és dolgozzon. Emellett fontosnak tartottam, hogy létrehozzak egy olyan kommunikációs pragmatikát, aminek a segítségével intuitív módon interakcióba is léphetünk a kiterjesztett világgal. Ezt a célt szolgálják azok a bemeneti eszközök, amikkel vezéreljük a programot. Mindezen felül a koncepció alapköve volt a használhatóság. A fontos irányelv az, hogy az újdonság ne csak a -6-
minden újjal járó varázslattal adja el magát, hanem a hasznosságával is. Nagy potenciát látok a technológiában és azt gondolom, hogy a nem túl távoli jövőben a nehezen használható háromdimenziós programokat részben fel fogja váltani egy kifinomultabb, intuitívabb kiterjesztett valóság. Ha nem is a programokkal végzett munkafolyamat minden láncszemét, de bizonyosan számos területet.
-7-
2. FELHASZNÁLÓI DOKUMENTÁCIÓ 2.1 A PROGRAM RÖVID ISMERTETÉSE A program neve AR Supervisor. A fő funkciója, hogy képes betölteni háromdimenziós modelleket egy modellasztalra, ahol megnézhetjük és forgatási transzformációkat hajthatunk végre ezeken a modelleken. Ezeket a transzformációkat általam készített bemeneti eszközök (input devices) segítségével végezhetjük el. A program vezérléséért négy darab eszköz felel; a modellezőasztal (ModelSlate), a talajt reprezentáló lap (GroundSlate), egy tárcsa amivel a forgatás szögét állíthatjuk be (RotationDisc) és egy másik tárcsa, amivel a forgatás tengelyét állíthatjuk (AxesDisc). A tárcsák a főmenü előhívását követően a menüben való navigálást szolgálják. Az eszközök a valóságban papírra nyomtatott markerek, amik rá vannak szerelve kartonlapokra és tárcsákra, amikkel mozgathatjuk és forgathatjuk azokat. A program használ továbbá egy webkamerát, aminek a feladata, hogy folyamatosan vegye az eszközöket. A kamera képe lesz a felhasználói felület. Ahogy a valóságban megváltoztatjuk az eszközöket, úgy kommunikálunk a programmal.
2.2 FELHASZNÁLT MÓDSZEREK A program implementációját Visual Studio 2008-ban valósítottam meg Windows 7 x64 operációs rendszer alatt. A Microsoft XNA keret fölött a GoblinXNA keretrendszert használom a háromdimenziós grafika megjelenítésére, amit kiegészítek az ALVAR könyvtárral, ami a markerek lekövetéséért (tracking) felelős. Hasonló marker követésre írt könyvtár az ARTag is. Kézenfekvő volt a GoblinXNA használata, hiszen átfogó keretet ad az augmented reality használatához, ugyanis biztosít interfészt az ALVAR és az ARTag könyvtárakhoz is. Továbbá segítségével a háromdimenziós jelenetek objektumai fa struktúrába szervezhetőek, aminek az előnyeire később rámutatok.
-8-
2.3 RENDSZERKÖVETELMÉNY
Processzor Memória Tárhely
Minimális hardverkonfiguráció 1.6 GHz CPU 384 MB RAM 250 MB tárterület DirecX 9.0c-t támogató videokártya, legalább Shader Model 1.1
Videokártya
támogatásával
WebCamera VGA
Processzor Memória Tárhely
Optimális hardverkonfiguráció 2.4 GHz CPU 1024 MB RAM 250 MB tárterület DirecX 9.0c-t támogató videokártya, legalább Shader Model 1.1
Videokártya
támogatásával
WebCamera VGA
Szükséges szoftverek Operációs rendszer
Microsoft Windows Xp, Vista, 7 XNA 3.1 GoblinXNA 3.5
Fejlesztéshez
Visual Studio 2008 ALVAR 1.4.0 OpenCV 1.0
-9-
2.4 TELEPÍTÉSI ÚTMUTATÓ Az első lépés az XNA Framework 3.1 keretrendszert telepítése. Ezt követi az OpenCV 1.0 program telepítése. Az AR Supervisor program nem igényel telepítést. A programhoz mellékelve vannak a felszerelt eszközök. Ha megrongálódnának vagy elvesznének, a mellékelt lemezen megtalálhatóak a nyomtatáshoz szükséges képfájlok is.
2.5 A PROGRAM HASZNÁLATA 2.5.1 INICIALIZÁLÁSA A program az „AR_supervisor_pilot” futtatható fájl indításával inicializál. Indítás után az alapértelmezett webkamera elindul, és innentől kezdve használható a program. Figyelni kell arra, hogy alapértelmezettre legyen állítva a kamera, amit használni szeretnénk. Bármilyen állapotban indítható a program. Nincs szüksége arra, hogy az eszközöket vegye a kamera, ugyanis amint érzékeli a markereket a program, automatikusan regisztrálja őket és utat enged a funkcionalitásuknak. Első lépésben elindítjuk a programot úgy, hogy a kamera az üres asztalt vegye, majd szépen sorban felpakoljuk az asztalra az eszközöket.
4. ábra – Alapállapot, üres asztal
- 10 -
A program felhasználói felülete az egyes eszközök felhelyezésével alakul ki. Az eszközök hozzáadásának nincs kötött sorrendje, bárhová elhelyezhetőek az asztalon, nincs megszabott pozíciójuk. Az eszközök pozícióijának változtatásával alakul a felhasználói felület is. Elsőként a talajt reprezentáló eszköz, a „Ground Slate” hozzáadása következik a valósághoz.
5. ábra – A Ground Slate hozzáadása a jelenethez
A Ground Slate reprezentálja a talajt, ezen felül egy nyíl segítségével mutatja a kiválasztott forgatási világtengelyhez tartozó 0 fokot. A Ground Slate mindennek a viszonyítási alapja. A segítségével számolható a különböző eszközök elfordulásának szöge, amivel vezéreljük az alapállapot és a menü funkcionalitásait. Természetesen szükség van még egy tárcsára is, amivel váltani lehet a világtengelyek között. A következő eszköz neve „Axes Disc” .
6. ábra – Az Axes Disc hozzáadása a jelenethez
- 11 -
Ez a tárcsa felel az aktuális világtengely kirajzolásáért és váltásáért. A tárcsát pozitív vagy negatív irányba forgatva, a felhasználó által meghatározott szögben, a tárcsa átváltja a tengelyt. A tengely határozza meg, hogy a kiválasztott modell, milyen irányban forduljon el a háromdimenziós térben. Ennek a tárcsának három állapota van, amivel három dimenzióban forgatható a modell. Az állapotok: X, Y és Z. Ha megvan a Ground Slate és az Axes Disc akkor már csak a forgatás szögéért felelős „Rotation Disc” és a modell transzformációs mátrixának meghatározásáért felelős „Model Slate” hozzáadása szükséges. Következő a „Rotation Disc”.
7. ábra - A Rotation Disc hozzáadása a jelenethez
A Rotation Disc határozza meg az elfordulás szögét az Axes Disc által meghatározott világtengelyen. Ezen felül kiegészíti a felhasználói felületet további információkkal. Kirajzolja a tárcsa abszolút elfordulását a nullához képest, amit a Ground Slate nyila határoz meg. Ez egy fekete színű szám a tárcsa fölött, ami nullától háromszázhatvan fokig vesz fel értékeket. Kirajzolja továbbá az adott tengelyhez tartozó elfordulás szögét pirossal. A kettő alapesetben meg fog egyezni, de ha megváltoztatjuk a tárcsa precíziós értékét, akkor láthatóvá válik a különbség. Ez később részletesebben kifejtésre kerül. Már csak egy dolog hiányzik, ez pedig a „Model Slate”, ami fölött meg fog jelenni a kiválasztott modell, amire a program elvégzi a felhasználó által meghatározott forgatási transzformációkat.
- 12 -
8. ábra - A Model Slate hozzáadása a jelenethez
A Model Slate funkciója alapvetően egyszerű. Meghatározza, hogy a térben hol jelenjen meg a modell. Ez az eszköz bármerre mozgatható a térben, a modell követni fogja a mozgását. Ugyanez igaz a többi eszközre is. 2.5.2 EGYSÉGEINEK RÉSZLETES BEMUTATÁSA V EZÉRLŐESZKÖZÖK ÉS A F ELÜLET
2.5.2.1
A vezérlőeszközök segítségével kommunikálhat a felhasználó a programmal. Ezen eszközök pozíciója határozza meg a felhasználói felület egységeinek helyzetét. A program visszajelzései ezekhez az eszközökhöz vannak kötve, így szabadon és könnyen átalakíthatóvá válik a program felülete. Ehhez csak el kell mozdítani a változtatni kívánt eszközt. Vezérlőeszközök és feladataik (9. ábra): 1) A Rotation Disc feladata meghatározni az elfordulás szögét. 2) A Ground Slate feladata meghatározni a kiválasztott tengelyhez tartozó nulla fokot. 3) Az Axes Disc feladata meghatározni az elfordulás tengelyét. 4) A Model Slate feladata kijelölni a modell helyét a térben.
- 13 -
9. ábra – A vezérlőeszközök
Á LLAPOTOK
2.5.2.2
A programnak felhasználói szinten két állapota van (10. ábra):
Alapállapot (Base State): Alapállapotban a program fő funkcionalitását érheti el a felhasználó. Ebben az állapotban forgatható és elmozdítható a modell a térben. Ezen felül kibővíthető a felhasználói felület felhasználói interakcióval anélkül, hogy a menüt elő kellene hívni. Ebben az állapotban a program minden változtatásról visszajelzést küld a felhasználónak a megváltoztatott eszköz fölött megjelenő panelen.
Menü (Menu State): A Menüben beállítások találhatóak, amikkel személyre szabható a program viselkedése. Többek között be lehet állítani a tárcsák érzékenységét (Disc Precision), a használni kívánt modellt vagy annak színét. A menüben
való
navigációért
a
tárcsák
felelnek
ugyanúgy,
ahogy az
alapállapotban is, ezek használatosak a programmal való kommunikációra.
- 14 -
10. ábra – Az alap és a menü állapot
2.5.3 VEZÉRLÉSE 2.5.3.1
A HASZNÁLAT ELŐFELTÉTELE
Miután minden eszközt lát a kamera, elkezdődhet a programmal való munka. Ahhoz, hogy minden funkció működjön, szükséges hogy a kamera mind a négy eszközt egyszerre lássa. Nem jelent ugyan problémát, ha valamelyik eszközt takarásba kerül, ugyanis a program figyel arra, hogy konzisztensen tárolja az adatokat, de amíg ki van takarva az eszköz, addig nem használható a funkciója. 2.5.3.2
H ÁTTÉRTUDÁS
A Ground Slate fölött megjelenő nyíl, ami a nulla fokot mutatja, a program kezdeti inicializálásakor beáll a Rotation Disc tárcsa piros sugarával megegyező irányba, mutatva, hogy kezdőállapotban arra van a null szög. Tudni kell továbbá, hogy amint tengelyt vált a felhasználó, a nyíl igazodni fog az adott tengelyhez eltárolt forgatási transzformációknak megfelelő aktuális null szöghöz. (11. ábra)
- 15 -
11. ábra - Ground Slate nyíl null fokban
A Rotation Disc rendelkezik két sugárral. Az egyik piros színű, a másik pedig világosszürke. A piros és a szürke sugár alapállapotban egy irányba áll. A piros sugár jelzi az elfordulás szögét a null foktól, a szürke sugár pedig arányosan úgy változik, hogy a piros és a szürke közötti szög pontosan megfeleljen az elfordulásnak a kiválasztott tengelyen. (12. ábra).
12. ábra – A képen a sárga görbe jelzi az elfordulás szögét
2.5.3.3
A G IROSZKÓP
Fontos megérteni, hogy a program a forgatási transzformációkat egy háromdimenziós Euler térben végzi, amit a legegyszerűbben úgy lehet elképzelni, mint egy giroszkópot (13. ábra).
- 16 -
13. ábra - Giroszkóp
Hogy nyomon tudjuk követni a forgatásink eredményét, a program rendelkezik egy saját giroszkóppal, amit a modell köré képes rajzolni. Ezt előhívva megfigyelhető, hogy melyik tengely körül, mekkora szöggel lett elforgatva a modell. Ha a felhasználó megérinti a Model Slate felületét, akkor előtűnik a giroszkóp a modellel együtt (14. ábra). Ugyanezzel a mozdulattal el is rejthető. Továbbá lehetőség van arra, hogy a menüben tegyük láthatóvá vagy rejtsük el a giroszkópot.
14. ábra - A Giroszkóp előhívása
A giroszkóp a tér három dimenzióját reprezentálja. A forgatás a tér abszolút tengelyei körül történik. Amint az Axes Disc tárcsa segítségével átváltjuk a tengelyt, a giroszkóp annak a tengelynek megfelelő kört jelöli ki számunkra. Minden körön található két-két tüske, amik a forgatás irányát hivatottak mutatni (15. ábra).
- 17 -
15. ábra - A forgatás iránya
2.5.3.4
A T ENGELYEK
Az Axes Disc tárcsa felelős a tengelyek váltásáért. A tárcsát pozitív vagy negatív irányba forgatva, a felhasználó által megadott szögenként tengelyt vált a tárcsa (16. ábra). A kiválasztott tengely színe sárgára vált, jelezve a kijelölést. Ezzel egy időben igazodik hozzá a giroszkóp kijelölése és a Rotation Disc sugarai. A tárcsa alapbeállításként harminc fokonként vált szöget. Ez a menüben módosítható egy és százhúsz fok közötti értékre. 2.5.3.5
A F ORGATÁSI SZÖG BEÁLLÍTÁSA
A forgatás szögének beállításáért a Rotation Disc tárcsa felelős. A tárcsa forgatásával állítható a kijelölt tengelyen való forgás szöge. A tárcsához tartozó panel kiírja az elfordulás szögét fokokban, piros színnel (16. ábra).
- 18 -
16. ábra – Forgatási szög beállítása és a tengely váltása
A M ODELLASZTAL H ASZNÁLATA
2.5.3.6
A Modellasztal (Model Slate) jelöli a modell pozícióját a térben. Valamivel nagyobb a többi eszköznél, és különleges alakja van, ami ergonómiai és technikai célokat
szolgál.
Ergonómiai
szempontból
egyértelműen
elkülöníthetővé
és
felismerhetővé teszi a modellasztalt a többi eszköztől. Technikai szempontból pedig a lekerekített sarkai miatt kisebb eséllyel takar ki más eszközöket a világban, ami fontos, hiszen a Modellasztal mozgatása, kamerához emelése szükséges lehet. Ilyen esetben a modell követni fogja a mozgását, miközben megtartja a tárcsákkal beállított forgatási értékeket is. A modell körül lévő opcionális giroszkóp, ami a Modellasztal markerének megérintésével ki és bekapcsolható, hasonlóan viselkedik (17. ábra).
17. ábra - A Modellasztal
- 19 -
2.5.3.7
A M ENÜ ELÉRÉSE
A Menü előhívásához meg kell érinteni az Axes Disc markerét (18. ábra). A marker megérintésének sebessége fontos tényező, ugyanis az határozza meg, hogy a program meghívja-e a menüt vagy sem. Ezt a sebességet „Click Speed” – nek nevezzük. Alapesetben fél másodpercre van állítva, ami azt jelenti, hogy ha a felhasználó megérinti a markert, és fél másodpercen belül le is veszi róla a kezét, akkor megjelenik a menü. A sebesség azt a célt szolgálja, hogy megvédje a felhasználót attól, hogy véletlenül meghívja a menüt, mikor nem azzal a céllal takarta ki a markert.
18. ábra – A Menü elérése
2.5.3.8
A M ENÜ E LEMEI
Négy féle Menüelemet különböztetünk meg:
Almenü Gomb (Submenu Button)
Kapcsoló (Swich)
Csúszka (Slider)
Rádió Gomb (Radio Button)
2.5.3.9
A M ENÜBEN VALÓ N AVIGÁLÁS
A Menüben való navigálás a Rotation Disc és az Axes Disc tárcsákkal vezérelhető. Ekkor a két tárcsa viselkedése eltér az alaphelyzettől. A Menüben a Rotation Disc forgatásával választhatóak ki a főmenü menüpontjai, az Axes Disc segítségével pedig a kiválasztott menüponthoz tartozó tulajdonság állítható be. Almenü Gomb esetén például az almenüben való kijelölés fel és le irányba mozgatását végezzük vele (19. ábra). Kapcsoló esetén a kapcsoló állapotát változtatjuk meg, Csúszka esetén pedig annak az értékét állíthatjuk vele.
- 20 -
19. ábra - A Menüben való navigálás
2.5.3.10
A M ENÜPONTOK
A Menü beállításai határozzák meg a program működését, a menüt pedig a menüpontok beállításai határozzák meg. A program elindítását követően minden menüpontot be kell állítani. Ha ez megtörtént, a menü megjegyzi a beállításokat, és amíg fut a program, az aktuális beállításokat használja. 2.5.3.10.1
M ODELS MENÜPONT
A navigációs részben bemutatott módon itt választható ki a megjeleníteni kívánt modell. Amint kijelölődött a modell, a menü beregisztrálja, és amint visszalépünk az alapállapotba, betölti a modellt a giroszkóp közepére, alkalmazva rá az eddigi forgatásokat. 2.5.3.10.2
M ODEL C OLOR MENÜPONT
A navigációs részben bemutatott módon itt választható ki a megjeleníteni kívánt modell színe. A kijelölt színt a menü elmenti és alapállapotba lépéskor alkalmazza. Nincs szükség a kijelölés véglegesítésére sem itt, sem a modell kiválasztásánál. A menü az alapállapotba lépéskor az aktuálisan kijelölt menüelemeknek megfelelően állítja be a programot.
- 21 -
2.5.3.10.3
M ANIPULATORS MENÜPONT
A Manipulators kapcsoló a modell köré kirajzolt giroszkópot kapcsolja ki és be. 2.5.3.10.4
C LICK S PEED MENÜPONT
A Click Speed menüpontban állítható be a Menü és az Alapállapot közötti váltógomb, az Axes Disc markerének megérintési sebessége. Száz és ezer közötti értéket vehet fel, ami ezredmásodpercben értendő. A választott érték függhet egyéni igénytől vagy fényviszonyoktól is. 2.5.3.10.5
P RECISION OF R OTATION D ISC MENÜPONT
Ezzel a csúszkával állítható be a Rotation Disc érzékenysége. Végeredményben ez egy szorzó, amivel felszorozzuk a Rotation Disc forgási szögét. Tehát egyre állítva nem változtat, de ha kilencven fokkal elfordul a tárcsa, kilencven fokkal elfordul a modell is. Azonban például, ha kettőre állítja a felhasználó, akkor a tárcsa kilencven fokos elfordulása esetén a modell száznyolcvan fokkal fordul el. Maximális értéke tíz. 2.5.3.10.6
P RECISION OF A XES D ISC MENÜPONT
Ezzel a csúszkával állítható be az Axes Disc érzékenysége. Az itt megadott értéket fokban kell érteni. Meghatározza azt a szöget, amivel elforgatva az Axes Disc tárcsát, az tengelyt vált. Könnyen megérthető, hogy ha egy kör háromszázhatvan fok, és három tengely közül lehet választani, akkor ennek a tárcsának a maximális értéke százhúsz lesz.
- 22 -
3. FEJLESZTŐI DOKUMENTÁCIÓ 3.1
FELHASZNÁLT MÓDSZEREK A program célja a valóság kiterjesztése, plusz információval való felruházása,
majd ezen információk összefésülése és egységes megjelenítése. Ehhez szükséges a valóság és a virtuális tartalmak szinkronba hozása. Ezen technológia megvalósítása érdekében felhasználtam a GoblinXNA v3.5 és az ALVAR 1.4.0 könyvtárakat, amik segítségével létre hozhatóak és értelmezhetőek a markerek, amikkel együtt a szinkronizálni kívánt virtuális tér beállíthatóvá válik. Így létrehozható a valóság kiterjesztése, és a kiterjesztéshez használt eszközökkel való vezérlése. Az én megvalósításomban nem csupán a jeleket használom fel, hanem létrehozok valós eszközöket, amik vezérlik ezeket a jeleket megadott tulajdonságokkal felruházva azokat. Ilyen eszköz például a tárcsa, amivel valós térbeli kétdimenziós forgatást végezhet a felhasználó. Lényegében ez egy megszorítás az adott eszközre. A feladata csupán a kétdimenzióban történő forgatási információk definiálása. Ennek érdekében létrehoztam ennek a tárcsának az absztrakt, program szintű definícióját, ami értelmezi és eltárolja ezeket az információkat. Egy jel nem más, mint egy fekete négyzet alakú keret, ami fekete és fehér mintákkal van kitöltve. Gyakorlatilag képinformációban tárolt háttérinformáció. Úgy lehet elképzelni, mint a QR kódot. Egy ilyen jelbe bele van kódolva az azonosítója, amelyre a programban lehet hivatkozni. A képinformáció, mint vizuális tartalom, fontos része a jel felismerésének. Ennek a tudatában értelmezi a program a jel térbeli mozgását, ugyanis minden különböző szögben felvett markerállapot egyértelműen meghatározza, hogy milyen módon változott a marker helyzete a valós térben. Erre az információra alapozva, létrehozható kiterjesztett valóságot használó program.
20. ábra - Példa Markerre
- 23 -
3.2
FELHASZNÁLT ESZKÖZÖK
3.2.1 IMPLEMENTÁCIÓ ÉS KÖNYVTÁRAK A program implementációját Windows 7 x64 operációs rendszer alatt valósítottam meg. Fejlesztői környezetként a Microsoft Visual Studio 2008-at használtam, kiegészítve a szükséges függvénykönyvtárakkal. A program készítésénél nagy hangsúlyt kapott az osztályszintű tagoltságot, az egymással kommunikáló objektumok, a jól használhatóság, a bővíthetőség lehetősége, valamint egy új kommunikációs modell kifejlesztése ember és program között. A fejlesztéshez felhasznált könyvtárak: Microsoft XNA Game Studio 3.1, GoblinXNA v3.5, ALVAR 1.4.0, DirectShow, OpenCV 1.0, Nuclex Vector Graphix Framework, CMake 2.8.0
A fejlesztéshez használt hardverkörnyezet:
CPU: Intel Core 2 Duo SU7300 1.3Ghz
Memória: 4 GB RAM
GPU: NVidia GeForce GT 335M
Webkamera: Cyris icon7 Webcam
3.2.2 MICROSOFT XNA GAME STUDIO 3.1 A Microsoft játékfejlesztéshez készített rendszere. .NET keretrendszer az alapja és C# nyelven zajlik rá a fejlesztés. Lehetőséget nyújt mind Windows, mind XBOX 360 játékkonzolra való fejlesztéshez. Az XNA Game Studio szükséges a program fejlesztéséhez és a futtatásához is. 3.2.3 GOBLINXNA V3.5 A GoblinXNA egy plusz függvénykönyvtár Augmented Reality programok készítéséhez, a Microsoft XNA Game Studio fölé. Segítségével fa struktúrába szervezhetőek a világ objektumai, amik a szerkezeti sajátosságból adódóan logikai
- 24 -
kapcsolatban állnak egymással. A jelenhez az objektumokat a rendszer a fa preorder bejárásának sorrendjáben adja hozzá. 3.2.4 ALVAR 1.4.0 Az ALVAR könyvtár a Finn VTT Technical Research Centre fejlesztése. A könyvtár
felel
a
markerek
lekövetéséért,
Augmented
Reality
technológia
felhasználásával. Az ALVAR segítségével lehet létrehozni saját jeleket és kalibrálni a kamerát. Csupán a program működéséhez szükséges, a GoblinXNA könyvtár fordításához nem, csak a fejlesztéshez van rá szükség. 3.2.5 DIRECTSHOW A DirectShow, a DirectX multimédiás tartalmainak kezeléséért felelős. Jelen esetben a kamera képének feldolgozásáért és megjelenítéséért. Windows 7 x64 rendszeren az alap DirectShowCapture Device helyett egy kiterjesztett interfészt megvalósító osztályt használtam a DirectShowCapture2–t. Az architektúra sajátosságai miatt elengedhetetlen volt az összetettebb interfész. A GoblinXNA könyvtár fordításához szükséges. 3.2.6 OPENCV 1.0 Az OpenCV (Open Source Computer Vision) az Intel Corporation fejlesztése. A grafikus megjelenítést támogató könyvtár. A GoblinXNA fordításához, az Alvar 1.4.0 könyvtár használatához, valamint a kamera kalibrálásához szükséges. 3.2.7 CMAKE A CMake egy keresztplatformos, fordítóprogram. Az ALVAR 1.4.0 fordításához felhasznált eszköz.
- 25 -
A PROGRAMOZÁSI KÖRNYEZET ÖSSZEÁLLÍTÁSA
3.3
3.3.1 GOBLINXNA V3.5
Az első lépés a Microsoft Visual Studio 2008 Professional Edition fejlesztői környezet telepítése, majd a Service Pack 1, vagy a Microsoft Visual C# 2008 Express Edition telepítése.
Miután a Visual Studio feltelepült, második lépésként fel kell telepíteni a Microsoft XNA Game Studio 3.1-et, ami elérhető a Microsoft weboldaláról.
Következő lépés az egyik tracking könyvtár letöltése, amit a GoblinXNA támogat. ALVAR vagy ARTag. Én az ALVAR könyvtárat használtam a programomhoz így annak a telepítését mutatom be; Először fel kell telepíteni az ALVAR 1.4.0-et, és az OpenCV 1.0 programot. Az utóbbi az ALVAR fordításához szükséges. Ezután meg kell nyitni az ALVARWrapper1.4.sln projectet a GoblinXNA/wrappers/ALVARWrapper1.4 könyvtárban. Le kell fordítani
és
a
generált
fájlt
ALVARWrapper.dll
a
GoblinXNA/wrappers/ALVARWrapper1.4/Release könyvtárból át kell másolni a GoblinXNA/dlls/unmanaged könyvtárba. Mikor a fordítás megtörtént, meg kell bizonyosodni arról, hogy az “Additional Include Directories” a Configurations Properties → C/C++ → General és a “Additional Library Directories” a Configurations Properties → Linker → General alatt a project beállításainál a megfelelő útvonal van megadva az ALVAR 1.4.0-hoz és az OpenCV 1.0-hoz. Következő
lépésben
át
kell
másolni
az
alvar140.dll
és
az
alvarplatform140.dll fájlokat az Alvar1.4.0/bin/msvc90 könyvtárból, a GoblinXNA/dlls/unmanaged
könyvtárba.
cvaux100.dll,
cvcam100.dll,
highgui100.dll
fileokat
az
Végül
a
cv100.dll,
cxcore100.dll
OpenCV/bin
könyvtárból
és
a
szintén
a
GoblinXNA/dlls/unmanaged könyvtárba kell másolni.
Miután minden szükséges fájl a megfelelő helyre került, meg kell nyitni a GoblinXNA.sln fájlt a GoblinXNA/src könyvtárból, és le kell fordítani. Ha a fordítás sikeresen lefutott, a GoblinXNA/bin könyvtárban megjelenik a GoblinXNA.dll fájl.
- 26 -
3.3.2 A KAMERA KALIBRÁLÁSA Szükségünk lesz egy GoblinXNA toolra aminek a segítségével kalibrációs file generálható,
ami
megfelel
az
általunk
használt
kamera
profiljának.
C:\Users\Username\Documents\GoblinXNAv3.5\tools\CameraCalibration
Ez
a
mappában
található. Itt meg kell nyitni a "CameraCalibration.sln" Visual Studio projectet. Következő lépésben fordítani és futtatni kell a projectet. Ekkor megjelenik a kiválasztott kamera képe. A kamera látószögébe kell helyezni az ALVAR keretrendszerhez járó PDF file nyolcadik
oldalán található sakktábla kinyomtatott képét ami a
SampleCamCalib nevet viseli. Ekkor a kamera feltérképezi a sakktáblát, és ennek a segítségével beállít egy kameraprofilt, ami megfelel a felhasználó által használt kamera tulajdonságainak. Ilyen tulajdonság például a látószög vagy a fókusztávolság. Ezek a tulajdonságok mind befolyásolják a markerek feltérképezésének és követésének beállításait. A tool hozzávetőlegesen ötven képet készít a sakktábláról, majd elemzi a képeket és készít egy „calib.xml” filet a "bin\x86\Debug" mappába, amit be kell másolni a project mappájába. Ezzel definiálva vannak a kamera tulajdonságai.
- 27 -
GOBLINXNA FELÉPÍTÉSE
3.4
3.4.1 A SZÍNTÉR GRÁF A GoblinXNA egy speciális gráfot épít fel amit preorder fabejárást alkalmazva értékel ki. Ennek a fának tíz féle csúcsa (node) lehet:
Geometry
Transform
Light
Camera
Particle
Marker
Sound
Switch
LOD (Level Of Detail)
Tracker
Ezek közül, hat féle csúcsnak lehet gyereke, ezeket zöld színnel jelöltem.
21. ábra – GoblinXNA példa színtér gráf
- 28 -
Az ábrán egy színtér gráf hierarchiája látható. A fa tulajdonsága, hogy módosítások esetén a gyerekcsúcsokra is kihat az őstől származó változtatás. Így, ha egy Transform csúcs változtat egy transzformáción, akkor az összes alatta lévő csúcson is megtörténik ez a változtatás. A zöld csúcstípusoknak van két fontos tulajdonsága:
Enabled Igaz és hamis értékeket vehet fel. Hamis értékre állítva önmagát és a gyerek csúcsokat is kiveszi a gráf csúcsainak listájából, aminek a következtében nem vesznek részt a bejárásban, így nem adódnak hozzá a jelenthez.
Prune Az enabled tulajdonsághoz képest itt csak a gyerek csúcsok kerülnek ki a csúcsok listájából, maga az aktuális csúcs nem.
A program fejlesztése során négy féle csúcstípust használtam:
Geometry
Transform
Light
Marker A F ONTOSABB CSÚCSFAJTÁK
3.4.1.1 Geometry node:
A geometry csúcs tartalmazza a modellt, ami megjelenik a képernyőn. A csúcsot létre lehet hozni különféle model fájlokból (.x, .fbx), vagy lehet használni beépített modelleket, mint például: Kocka (Cube), Gömb (Sphere). Néhány fontosabb tulajdonság (property):
Anyag beállítás (Material): Szín, fényesség, textúra beállításai.
Áttetszőség (Occlusion): Ha az occluder tulajdonság be van kapcsolva, a model nem látható a színtérben, viszont megmaradnak a fizikai tulajdonságai, például képes árnyékokat fogadni és vetni. - 29 -
Hálózati beállítás (Network): Hálózati beállításokat tartalmaz.
Transform node: A transform csúcs tartalmazza az objektumok transzformációs beállításait. A csúcs segítségével lehet pozícionálni, forgatni, nagyítani. Light node: Egy light csúcs tartalmazza a színtér egy fényforrását. A fényforrásnak különböző beállításai lehetnek. További két fontos tulajdonság található minden fényforrás beállításai között: szórt fény, illetve a visszaverődő fény színének beállítása. Három fajta fényforrás használatos leggyakrabban: Spotfény (Spot Light), Pontfény (Omni), Irányfényforrás (Directional Light).
Marker node: A markerek geometriai sémák. Ezek valamilyen felületre vannak kinyomtatva, ami általában fehér papír. A markerek elmozdulását érzékeli és értelmezi a kamera. A jel észrevételekor, speciális algoritmusokkal meghatározza a térbeli pozíciót és orientációt, és módosítja a transzformációs mátrixot. Mielőtt a marker csúcsot használják, inicializálni kell a marker tracker-t, valamint a video rögzítő eszközt. A GoblinXNA automatikusan bejárja a gráfot és kirajzolja a végleges, kompozitált képet. A színter gráfjának egy úgynevezett Scene osztályból a kiinduló pontja. Ez az osztály tartalmazza és kezeli a fa gyökerét. A Scene.RootNode opcióval lehet elkezdeni a fa építését. A fa tetszőleges mélységű lehet.
- 30 -
A PROGRAM FELÉPÍTÉSE
3.5
3.5.1 A PROGRAM ÉLETTARTAMA A program élettartama három fő részből áll:
Initialize
Update
Draw
Az Initialize ahogy a nevéből is kiderül egyszer lefut a program indításakor, utána az Update és a Draw metódusok váltogatják egymást. Ez az XNA alapvető felépítése. Az Update rész felel a programon belüli módosításokért, a Draw metódus pedig a kirajzolásért. Megtalálható továbbá egy LoadContent(), illetve egy UnloadContent() metódus. A LoadContent részben lehet implementálni a felhasznált fájlok betöltését. Szükség van továbbá a GoblinXNA környezethez, ezért azt manuálisan kell beállítani. A „Solution Explorer” ablakban, a képernyő jobb oldalán, jobb klikk a „Reference” pontra, majd ki kell választani az „Add Reference…” opciót. Itt meg kell adni a legenerált GoblinXNA.dll fájt, a GoblinXNA/bin könyvtárban. Minden egyéb referencia,
amit
a
GoblinXNA
használ,
előzőleg
be
lett
másolva
a
GoblinXNA/dlls/unmanaged könyvtárba, így a Visual Studio automatikusan be fogja másolni a projectbe, így nem kell külön egyesével hozzáadni a dll fájlokat referenciaként. Az ALVAR könyvtár használatához a referenciák közé fel kell venni az ALVARWrapper.dll fájlt. Miután minden be lett állítva, a „using GoblinXNA;” sort be kell írni a program tetején. Innentől kezdve használható a GoblinXNA környezet.
- 31 -
3.5.2 AZ OSZTÁLYSZERKEZET A programban használt osztályok:
_3DofDisc (Three Degrees of Freedom Disc) A _3DofDisc osztály a tengelyek kiválasztásához használt tárcsát megvalósító szerkezet. Ez a modul kulcsfontosságú szerepet tölt be a program felépítésében. Egy ilyen típusú objektumhoz csatlakozik a program összes többi vezérlő eszköze.
Axes (Tengelyek) Az Axes típusú objektum a _3DofDisc osztály egyik fontos részét képezi. Regisztrálja a kiválasztott tengelyeken való elfordulások értékét, és a hozzájuk tartozó plusz információkat.
Disc (Tárcsa) A _3DofDisc egyszerűsített változata. Működési logikája hasonló, de funkcionalitása redukált; Képes meghatározni saját elfordulási szögét és információt küldeni róla a felhasználónak, de ezt az értéket nem ő használja, hanem több más programmodul.
Gyroscope (Giroszkóp) Megvalósít egy virtuális giroszkópot, ami a fizikai világ szabályaihoz igazodva működik, és szemléletesen mutatja a modell körül a forgatások eredményét.
Menu (Menü) A Menu osztály megvalósítja a program beállításaiért felelős menü felületét és logikáját, emellett a navigálás egyedi logikáját és protokollját is tartalmazza.
MenuItem (Menüelem) A menü elemeinek absztrakt ősosztálya. Belőle származik a négy menüelem típus.
PerifericDevice (Periférikus Eszköz) A PerifericDevice három féle eszköz ősosztálya, amik a _3DofDisc, Disc és a Slate osztályok.
Program A főprogram. Innen indul a program fő eseménykezelő ciklusa. - 32 -
RadioButton (Rádió Gomb) Az alap Radio Buttont a kiterjesztett valóság vezérlésére használt eszközök működéséhez igazodva újradefiniált osztály.
Slate (Tábla) PerifericDevice ősosztályból származó lap, vagy tábla eszköz ami egy markert tartalmazva meghatároz transzformációs tulajdonságokat.
Slider(Csúszka) A MenuItem absztrakt ősosztályból származó csúszka az alap csúszka kiterjesztett valóság vezérlésére használt eszközök működéséhez igazodva
újradefiniált
menüelem.
Értéket
vesz
fel
a
tárcsa
vezérlőeszközöktől és letárolja azokat.
SubMenuButton(Almenügomb) A MenuItem absztrakt ősosztályból származó almenüt tartalmazó gomb a menüben.
supervisor(felügyelő) A program keretét adja. Tartalmazza az alapvetően szükséges XNA metódusokat, és emellett az eszközök és a fények definiálására létrehozott metódusokat. Ez az osztály három részosztályból áll (partial class): supervisor, MenuState, BaseState. A két State osztály az állapotok kezelését felügyeli.
Switch(Kapcsoló) A MenuItem absztrakt ősosztályból származó Switch az alap kapcsoló kiterjesztett valóság vezérlésére használt eszközök működéséhez igazodva újradefiniált menüelem.
Text3DInfo A
Nuclex
Framework
Vektoros
háromdimenziós
módszerén alapuló térbeli információs panelt valósít meg.
- 33 -
szövegvetítési
22. ábra - Teljes osztály és objektumdiagram I
- 34 -
23. ábra - Teljes osztály és objektumdiagram II
- 35 -
SUPERVISOR OSZTÁLY
3.5.2.1
A program keretét a Supervisor class adja. Ez az osztály tartalmazza az alap Initialize, Update, Draw, LoadContent és UnloadContent metódusokat. Ezek mellett a CreateDevices, CreateLights és SetupMarkerTracking metódusok is itt kaptak helyet. A metódusok harmadik csoportját alkotják az állapotváltásért felelős programblokkok. Ezek a ChangeState és a ChangeManipulatorState metódusok. A CreateDevices metódus létrehozza az összes PerifericDevice vagyis vezérlő eszköz objektumot és megfelelő módon össze is kapcsolja a logikailag összefüggő eszközöket, az eszközök Connect metódusain keresztül. A ChangeState metódus egy timer Elapsed eseményének eseménykezelő függvénye. Feladata a két főállapot közötti váltás; Alap és Menüállapot, ezek supervisor osztály egy-egy részosztályában vannak definiálva. Közöttük a váltás a tengelyeket reprezentáló tárcsa megfelelően rövid ideig tartó kitakarásával történik. A
ChangeManipulatorState
metódus
egy timer
Elapsed
eseményének
eseménykezelő függvénye. A modellt tartalmazó eszközt kitakarva ki és bekapcsolja a giroszkópot.
24. ábra - A supervisor osztály diagramj
- 36 -
3.5.2.1.1
B ASE S TATE RÉSZOSZTÁLY
A supervisor osztály egy részosztálya. Ez felel az alap állapotban történő események kezeléséért. Itt inicializálódnak azok az eszközök, amik a supervisor osztály CreateDevice metódusában vannak példányosítva. Alapállapotban a felhasználó a program alapvető funkcionalitását használhatja, vagyis térbeli forgási transzformációkat alkalmazhat a kiválasztott modellre, a vezérlőeszközök segítségével. Lekezeli a különböző speciális periférikus eszközökről érkező felhasználói inputokat, mint például a giroszkóp ki és bekapcsolása, vagy a menü megjelenítése.
25. ábra - A BaseState részosztály diagramja
3.5.2.1.2
M ENU S TATE RÉSZOSZTÁLY
A supervisor osztály egy részosztálya. Ez felel az menü állapotban történő események kezeléséért. Ebben az állapotban elvesszük az irányítást az alap funkcionalitástól, és átadjuk a menünek. A Menu osztály két fő metódusát hívja, amikkel a főmenü fókuszát, és az aktuális főmenüelem funkcióját állítja be.
26. ábra - A MenuState részosztály diagramja
- 37 -
3.5.2.2
P ERIFERIC D EVICE OSZTÁLY
A PerifericDevice absztrakt osztály három féle eszköz ősosztálya, amik a _3DofDisc, Disc és a Slate osztályok. Ezen eszközök alapvető definícióit tartalmazza. Főbb metódusai az InitDevice, ConnectGroundSlate, UpdateAngle, ChangeModelTo, AddGyroscope. 3.5.2.2.1
INIT D EVICE METÓDUS
Az eszközhöz tartozó marker, geometry node, transformation node, model, és material objektumok inicializálásáért, és a jelenet gráfjának egy részgráfjának felépítéséért felelős. A szükséges beállításokat a konstruktorban kell megadni. 3.5.2.2.2
C ONNECT G ROUND S LATE METÓDUS
Az eszközhöz hozzácsatolja a talajt reprezentáló eszközt, ami szükséges az elfordulás szögének kiszámításához. 3.5.2.2.3
U PDATE A NGLE METÓDUS
Frissíti az eszköz elfordulási szögét automatikusan, a csatolt GroundSlate null szöge alapján. 3.5.2.2.4
C HANGE M ODEL T O METÓDUS
Frissíti az eszköz által megjelenített modellt a paraméterként megadott modellre. Ezt a modellt a resources-ból választja ki a program. A ModellSlate eszköz modellváltására használja a program. 3.5.2.2.5
A DD G YROSCOPE METÓDUS
Hozzáad egy sztenderd giroszkópot, az eszközhöz.
- 38 -
27. ábra - A PerifericDevice osztálydiagramja
_3D OF D ISC OSZTÁLY
3.5.2.3
_3DofDisc a three degrees of freedom rövidítése. A PerifericDevice-ból származó eszköz osztály. Valójában ez egy kétdimenziós forgási transzformációk követését szolgáló eszköz osztály. A valóságban egy tárcsa forgásának értékeit figyeli, és regisztrálja. Az ok, amiért háromdimenziós eszköznek hívom az, hogy rendelkezik egy Axes típusú objektummal, ami képes tárolni és kiszámolni mind a három világtengelynek megfelelő forgatási értékeket. A programban egy ilyen objektum kapott helyet, ami az egész rendszernek az agya. Hozzá van csatolva az összes többi eszköz, amikkel szoros logikai kapcsolatot tart fent. Főbb
metódusai
a
connectAssociateDisc,
updateGroundTransformation, PrintAxesDisplay, updateModelTransformation.
- 39 -
connectModelSlate,
setPrecision,
updateAssocDiscTransformation,
3.5.2.3.1
CONNECT A SSOCIATE D ISC METÓDUS
Csatolja a forgatási szöget definiáló eszközt, a RotationDisc-et. 3.5.2.3.2
CONNECT M ODEL S LATE METÓDUS
Csatolja a ModelSlate eszközt, a későbbi kommunikációhoz. 3.5.2.3.3
SET P RECISION METÓDUS
Beállítja a tárcsa precízióját a paraméterként megadott értékre, ami ezen osztályt megvalósító objektumok esetén azt jelenti, hogy mekkora elfordulási szög kell a tengely váltásához. 3.5.2.3.4
UPDATE G ROUND T RANSFORMATION METÓDUS
A GroundSlate nyíl modelljét aktuális tengelynek megfelelő null fokba állítja. Csak akkor működik, ha csatolva van CroundSlate. 3.5.2.3.5
P RINT A XES D ISPLAY METÓDUS
Kirajzolja a tengelyeket a térbe, a megjelenítő vezérlőeszköz fölé. 3.5.2.3.6
UPDATE A SSOC D ISC T RANSFORMATION METÓDUS
Frissíti a RotationDisc fölé kirajzolt forgatási szöget reprezentáló sugarat. Csak akkor működik, ha csatolva van RotationDisc. 3.5.2.3.7
UPDATE M ODEL T RANSFORMATION METÓDUS
Frissíti a modell kiválsztott tengelyén a forgási transzformációt. Csak akkor működik, ha csatolva van ModelSlate.
- 40 -
28. ábra - A _3DofDisc osztály diagramja
3.5.2.4
D ISC OSZTÁLY
Disc (tárcsa) osztály A _3DofDisc egyszerűsített változata. Működési logikája hasonló, de funkcionalitása redukált; Képes meghatározni saját elfordulási szögét és információt küldeni róla a felhasználónak, de ezt az értéket nem ő használja, hanem több más programmodul. Többek között az AxesDisc frissíti a transzformációját miután hozzácsatoltuk a Disc objektumot. A felhasználó és a program közötti kapcsolat a Tárcsa szemszögébő is reprezentálható (30. ábra).
29. ábra – A Disc osztály diagramja
- 41 -
30. ábra - A rotation és axes tárcsák működési elve
3.5.2.5
S LATE OSZTÁLY
PerifericDevice ősosztályból származó lap, vagy tábla eszköz ami egy markert tartalmazva meghatároz transzformációs tulajdonságokat. Metódusai megegyeznek a PerifericDevice metódusaival. A ModelSlate objektum és a GroundSlate objektum implementálja ezt az osztályt. A következő ábrán bemutatom, hogy milyen a kompozíciós kapcsolat a valóságban végrehajtott transzformáció és a virtuális tér között. Ezt a ModelSlate segítségével reprezentálom (32. ábra).
- 42 -
31. ábra - A Slate osztály diagramja
32. ábra - A felhasználó és a program kompozíciós kapcsolata
- 43 -
A XES OSZTÁLY
3.5.2.4
Az Axes típusú objektum a _3DofDisc osztály egyik fontos részét képezi. Regisztrálja a kiválasztott tengelyeken való elfordulások értékét, és a hozzájuk tartozó plusz információkat. Főbb metódusai: setFocusOn, setYawPichRoll, calculateGap, getSelectedAxisAngle. 3.5.2.4.1
SET F OCUS O N METÓDUS
Beállítja a kiválasztott tengelyt, és elvégzi a szükséges felületi változtatásokat a kirajzoláshoz. 3.5.2.4.2
SET Y AW P ICH R OLL METÓDUS
Beállítja az AxesDisctől kapott kiválasztott tengelynek megfelelő szöget. 3.5.2.4.3
CALCULATE G AP METÓDUS
Tengelyváltás esetén kiszámolja az előző pozícióhoz képest történt elfordulást, hogy ezzel korrigálja a modell forgási szögét, és megtartsa a konzisztenciát. Minden tengelyállapot-váltáskor lefut.
33. ábra - Az Axes osztály diagramja
- 44 -
3.5.2.6
G YROSCOPE OSZTÁLY
Megvalósít egy virtuális giroszkópot, ami a fizikai világ szabályaihoz igazodva működik, és szemléletesen mutatja a modell körül a forgatások eredményét. Három darab transzformációs nodeot foglal magába, amik egymás alá vannak kötve egy részfába, így átvihető a transzformáció a gyerek csúcsokra, ennek következtében kialakul a giroszkóp modellje. A legfontosabb metódusa a root metódus, ami visszad egy transzformációs nodeot, ami történetesen a részfa gyökere. Ezt aztán hozzá lehet kapcsolni egy eszköz markeréhez, így a giroszkóp rácsatlakoztatható bármelyik eszközre.
34. ábra - A Gyroscope osztály diagramja
A giroszkóp kompozíciós kapcsolatokon alapuló modelljét az alábbi ábrán mutatom be (35. ábra).
- 45 -
35. ábra - A giroszkóp konstrukciós elve
- 46 -
3.5.3
A VEZÉRLÉSI MODELL Egyedi kommunikációs és vezérlési modellt használok a programban. Lényeges
különbség az általános felhasználó és program közötti kommunikációs séma, és az általam kifejlesztett között, hogy a felhasználói interakciót felvevő és továbbító perifériás eszközök nincsenek direkt módon a számítógéphez csatolva. Az általános modellben a felhasználó az inputot billentyűzet és egér segítségével adja meg a számítógépnek. Ezzel szemben az én modellem elszakad ettől a szokástól, és megvalósít egy, a jelen pillanatban talán kevésbé hatékony, de mindenképpen izgalmas, és fejlődőképes új megoldást. Az általam definiált, a fizikai valóságban létező úgynevezett beviteli eszközöknek két fajtája van: Tábla és Tárcsa. Programszinten három darab eszközt különböztetek meg: Slate, Disc, _3DofDisc. A Slate a Tábla tulajdonságainak absztrakt modellje, a Disc és a _3DofDisc pedig a tárcsát valósítja meg programlogikai szinten. Kommunikáció a felhasználó és a program között, a következőképpen írható le: A felhasználó interakcióba lép a kiválasztott eszközzel a valóságban. Egy kamera veszi az eszközre erősített markert. A program első lépésben értelmezi a marker transzformációit, hogy alapvető térinformációkat nyerjen ki belőle egy transzformációs mátrix építéséhez. Ezután az így kinyert információkat feldolgozza és a megadott program vezérlési paradigmái szerint értelmezi és végrehajtja azokat a parancsokat, amiket a legfelső szinten a felhasználó indított egyszerű kézmozdulatokkal.
36. ábra - A Tábla Eszköz
- 47 -
37. ábra - A Tárcsa eszköz
P ROGRAMSZINTŰ KOMMUNIKÁCIÓ
3.5.3.1
A program szintjén a kommunikációt a három eszköz típus példányai végzik. A megvalósítás
során
nagy
hangsúlyt
fordítottam
a
modularitásra
és
a
továbbfejleszthetőségre. A program jelenleg négy darab eszközt használ, ennek következtében programszinten négy darab PerifericDevice objeltum fogja irányítani a vezérlést. Pontosabban két darab Slate (GroundSlate, ModelSlate), egy darab Disc (RotationDisc) és egy darab _3DofDisc (AxesDisc). Az AxesDisc a vezérlés és a kommunikáció központja. Connect metódusain keresztül hozzá kell kapcsolni a többi eszközt, így létesítve kapcsolatot köztük. Update metódusai pedig frissítik a már csatolt eszközök különböző tulajdonságait. Fontos még tudni, hogy az AxesDisc magába foglal egy Axes objektumot is, ami gyakorlatilag a tengelyváltás logikájának implementációja és az AxesDisc agya. Minden objektum le tudja kérdezni a saját elfordulási szögét, ami a GroundSlate null szögében álló vektor és a saját down vektora által bezárt szög. Ezt a skaláris szorzás képletének segítségével határozom meg. Skaláris szorzat (dot product):
a*b = |a||b|cos(w) Ebböl kifejtve a képletem:
acos( (forrasvektor * célvektor) /( |forrásvektor|*|célvektor| ) )
- 48 -
Ezt a képletet alapul véve minden objektum amihez van csatolva GroundSlate (ami tartalmazza a forrásvektort) képes elfordulást számolni kétdimenzióban. Ezt a tulajdonságot a tárcsák használják ki, amik alapvetően az elfordulásul szögének segítségével vezérlik a programot. Részben a szög explicit átadásával, részben a szögből számolt maradékosztályok meghatározásával, amivel az állapotokat csoportosítja a program. Például a menü elemi közötti váltás, vagy a tengely váltása is ilyen elven működik. 3.5.4 TESZTELÉS 3.5.4.1
I LLUSZTRÁLT T ESZTESETEK
Teszteset
Hiányzó eszközök– az összes eszköz hiányzik
Felhasználói input állása
Működés
Eredmény
Nincs egy eszköz sem a kamera látószögében
A program nem jelenít meg semmit, a felhasználói adatbevitel a markerek nélkül nem lehetséges
OK
38. ábra – Minden eszköz hiányzik
- 49 -
Teszteset
Felhasználói input állása
Működés
Eredmény
Hiányzó eszközök – RotationDisc vagy AxesDisc látszik
A kamera látószögében a RotationDisc vagy az AxesDisc van
A tárcsáknak nincs funkciójuk a GroundSlate nélkül, ezért nem jelenig meg felettük felület.
OK
39. ábra - Valamelyik tárcsa van egyedül a jelenetben
Teszteset
Hiányzó markerek – egy eszköz van, a GroundSlate, vagy a ModelSlate
Felhasználói input állása
Működés
Eredmény
A GroundSlatet vagy a ModelSlatet látja a kamera
Amennyiben a GroundSlate látszik, kirajzolja a lefele vektorának irányát: a null fokot. ModelSlate megjeleníti az alapértelmezettként beállított modellt.
OK
40. ábra - A GroundSlate vagy a ModelSlate van egyedül a jelenetben
- 50 -
Teszteset
Felhasználói input állása
Működés
Eredmény
Hiányzó markerek GroundSlate és RotationDisk látszik
A RotationDisket és a GroundSlatet látja a kamera
A RotationDisk kiírja maga fölé az elfordulási abszolút szögét.
OK
41. ábra - A GroundSlate és a RotationDisc van a jelenetben
Teszteset
Későn érkező eszközök RotationDisk
Felhasználói input állása
Működés
Eredmény
A GroundSlatet látja a kamera. Ekkor érkezik a RotationDisc.
A GroundSlate az alapértelmezett nullértéket mutatja. Amikor bekerül a RotationDisk, a nyíl beáll el a RotationDisc le irányának megfelelően
OK
42. ábra - A RotationDisc később érkezik a jelenetbe
- 51 -
Teszteset Hiányzó eszközök – ModelSlate
Felhasználói input állása
Működés
Eredmény
menübe lépés
ModelSlate nélkül előjön ugyan a menu, de minden eszköz szükséges a működéséhez.
X
43. ábra - A ModelSlate hiányzik a Menü állapotban
Teszteset Későn érkező eszközök – ModelSlate
Felhasználói input állása
Működés
Eredmény
menübe lépés
Amint a ModelSlate megjelenik, elérhetővé válnak a menü funkciói.
OK
44. ábra - A ModelSlate később érkezik a Menü állapotba
- 52 -
Teszteset RotationDisk használata MenuStateben.
Felhasználói input állása Minden eszköz látszik, a program Menüállapotban van.
Működés
Eredmény
A menü elemei között navigálhatunk.
OK
45. ábra - A RotationDisc használata Menü állapotban
Teszteset
Hiányzó eszközök GroundSlate és RotationDisk és a ModelDisk látszik
Felhasználói input állása
Működés
Eredmény
A RotationDisk, a ModelSlatet és a GroundSlatet látja a kamera
Mindent megjelenít, de a modellen nem történik transzformáció, mivel nem tudja a program, hogy melyik tengelyen akarunk forgatni.
OK
46. ábra- AxesDisc hiányzik
- 53 -
3.5.4.2
T OVÁBBI T ESZTESETEK
Teszteset Az AxesDisket használjuk MenuState-ben
Teszteset Minden eszköz látszik
Teszteset
Eszközök kitakarása használat közben
Teszteset BaseStateben kitakarjuk a ModelSlatet
Teszteset Egy disk típusú eszköz nem síkban van
Felhasználói input állása Minden eszköz látszik, az AxesDisket forgatja a felhasználó
Működés
Eredmény
A Menüelemet funkcionalitásának megfelelően változtatja
OK
Működés
Eredmény
A program megfelelően működik.
OK
Felhasználói input állása
Működés
Eredmény
AxesDisket kitakarjuk a menüben beállított ClickSpeed értéken belül
Állapotváltás történik: amennyiben MenuStateben voltunk, átlépünk BaseStatebe és fordítva
OK
Működés
Eredmény
Megjelenik a giroszkóp a modell képe körül.
OK
Működés
Eredmény
Nem értelmezhető az érték. A forgatás nem tükrözi a valóságot.
OK
Felhasználói input állása Minden eszközt lát a kamera: a program megfelelő használatának kezdete
Felhasználói input állása BaseState állapotban tetszőleges időre kitakarjuk a ModelSlatet.
Felhasználói input állása Az AxesDisk vagy a RotationDisk nem egy síkban helyezkezdik el a GroundSlate-tel.
- 54 -
4. ÖSSZEGZÉS Egy izgalmas új technológia használata mindig inspiráló és fejlesztésre, újításra sarkall. A témaválasztásomat nagyban befolyásolta ez a romantikus irány. A rendszer alapkövének szántam a további fejleszthetőség nyitva hagyását, ezért amennyire lehetett általános célú modulokat hoztam létre, amik segítségével könnyen bővíthetővé válik a program. A teljesség igénye nélkül felsorolok néhány fejlesztési lehetőséget:
A program legyen képes elmenteni adott állapotokat és beállításokat későbbi használatra.
Lehessen modellt vagy animációt külső fájlból megadni.
Legyen képes a program ne csak forgatási, hanem nagyítási műveletek végrehajtására is.
Az alaptípusoknak megfelelő eszközökből tudjon egyszerre többet is kezelni, így növelni a produktivitást
Az eszközök relációs kapcsolatainak megmutatásához adjon felületet. Lehetőleg úgy hogy a lerakott markerek pozícióit feltérképezi, és egy felületi képet generál belőle, ahol grafikusan összeköthetővé válnak az eszközök.
Legyen képes
a letakart markerek
megjegyzésére, illetve pozíciójuk
kiszámítására a többi eszköz relatív pozíciója alapján.
- 55 -
ÁBRAJEGYZÉK 1. ábra - A virtuális világ és a valóság összefésülése .................................................. - 5 2. ábra - Modellek markerekre illesztve ...................................................................... - 5 3. ábra – AR Autóreklám ............................................................................................. - 6 4. ábra – Alapállapot, üres asztal ............................................................................... - 10 5. ábra – A Ground Slate hozzáadása a jelenethez .................................................... - 11 6. ábra – Az Axes Disc hozzáadása a jelenethez ....................................................... - 11 7. ábra - A Rotation Disc hozzáadása a jelenethez .................................................... - 12 8. ábra - A Model Slate hozzáadása a jelenethez ....................................................... - 13 9. ábra – A vezérlőeszközök ...................................................................................... - 14 10. ábra – Az alap és a menü állapot ......................................................................... - 15 11. ábra - Ground Slate nyíl null fokban ................................................................... - 16 12. ábra – A képen a sárga görbe jelzi az elfordulás szögét ...................................... - 16 13. ábra - Giroszkóp................................................................................................... - 17 14. ábra - A Giroszkóp előhívása............................................................................... - 17 15. ábra - A forgatás iránya ....................................................................................... - 18 16. ábra – Forgatási szög beállítása és a tengely váltása ........................................... - 19 17. ábra - A Modellasztal ........................................................................................... - 19 18. ábra – A Menü elérése ......................................................................................... - 20 19. ábra - A Menüben való navigálás ........................................................................ - 21 20. ábra - Példa Markerre .......................................................................................... - 23 21. ábra – GoblinXNA példa színtér gráf .................................................................. - 28 -
22. ábra - Teljes osztály és objektumdiagram I ......................................................... - 34 23. ábra - Teljes osztály és objektumdiagram II ........................................................ - 35 24. ábra - A supervisor osztály diagramj ................................................................... - 36 25. ábra - A BaseState részosztály diagramja ............................................................ - 37 26. ábra - A MenuState részosztály diagramja .......................................................... - 37 27. ábra - A PerifericDevice osztálydiagramja .......................................................... - 39 28. ábra - A _3DofDisc osztály diagramja ................................................................ - 41 29. ábra – A Disc osztály diagramja .......................................................................... - 41 30. ábra - A rotation és axes tárcsák működési elve .................................................. - 42 31. ábra - A Slate osztály diagramja .......................................................................... - 43 32. ábra - A felhasználó és a program kompozíciós kapcsolata ................................ - 43 33. ábra - Az Axes osztály diagramja ........................................................................ - 44 34. ábra - A Gyroscope osztály diagramja ................................................................. - 45 35. ábra - A giroszkóp konstrukciós elve .................................................................. - 46 36. ábra - A Tábla Eszköz .......................................................................................... - 47 37. ábra - A Tárcsa eszköz ......................................................................................... - 48 38. ábra – Minden eszköz hiányzik ........................................................................... - 49 39. ábra - Valamelyik tárcsa van egyedül a jelenetben .............................................. - 50 40. ábra - A GroundSlate vagy a ModelSlate van egyedül a jelenetben ................... - 50 41. ábra - A GroundSlate és a RotationDisc van a jelenetben ................................... - 51 42. ábra - A RotationDisc később érkezik a jelenetbe ............................................... - 51 43. ábra - A ModelSlate hiányzik a Menü állapotban ............................................... - 52 44. ábra - A ModelSlate később érkezik a Menü állapotba ....................................... - 52 -
45. ábra - A RotationDisc használata Menü állapotban............................................. - 53 46. ábra- AxesDisc hiányzik ...................................................................................... - 53 -
IRODALOMJEGYZÉK [1] Gyapjas Ferenc: Lineáris algebra és geometria (kézirat) Kiadó: Nemzeti Tankönyvkiadó Kiadás éve: 1994 [2] GoblinXNA Installation Guide [3] GoblinXNA User Manual [4] Alvar Documentation [5] http://nuclexframework.codeplex.com/wikipage?title=Vector%20Fonts&referrin gTitle=Documentation, 2011. 05. 10.
A projekt az Európai Unió támogatásával és az Európai Szociális Alap társfinanszírozásával valósul meg, a támogatási szerződés száma TÁMOP 4.2.1./B-09/1/KMR-2010-0003.