Professional Documents
Culture Documents
Virtualna Stvarnost
Virtualna Stvarnost
SADRŽAJ
1. Virtualna stvarnost
2. Cilj diplomskog rada
3. Uređaji za ostvarivanje virtualne stvarnosti
3.1. Ulazni uređaji
3.2. Izlazni uređaji
3.3. Virtualni sustavi
3.4. Uređaji korišteni u aplikaciji
4. Realizacija virtualne scene
4.1. Matematički opis virtualne scene
4.2. Pogreška praćenja mete
4.3. Programsko ostvarenje virtualne scene
5. Korisnik i aplikacija virtualne stvarnosti
6. Povezanost aplikacije i sklopovlja
6.1. Povezanost aplikacije sa grafičkim sklopovljem
6.2. Povezanost aplikacije sa davačem orijentacije
6.2.1. Detektiranje davača orijentacije
6.2.2. Očitavanje orijentacije
6.2.3. Prekid komunikacije
7. Korištenje aplikacije
8. Dijagram toka programa
9. Opis ulaznih i izlaznih datoteka
9.1. Ulazne datoteke
9.2. Izlazne datoteke
10. Rezultati
10.1. Kašnjenje
10.2. Pogreška praćenja mete
11. Primjena virtualne stvarnosti
12. Daljnji razvoj aplikacije
13. Zaključak
14. Literatura
Dodatak A.
Dodatak B.
Dodatak C.
Dodatak D.
1. VIRTUALNA STVARNOST
Jedna od definicija virtualne stvarnosti glasi:
U ovom radu pokušao sam se što bolje upoznati sa ovim uređajima, i pokušao
sam ostvariti virtualnu scenu. Također sam želio izvesti mjerenja s kojima bi
ispitao koliko je korisnik virtualno prisutan i koji sve tehnički uvjeti moraju biti
ispunjeni da bi se uopće moglo govoriti o nekakvom ostvarenju virtualne
stvarnosti.
T11=coscos-sinsinsin
T12=cossin+sinsincos
T13=-sincos
T14=-(txT11+tyT12+tzT13)
T21=-cossin
T22=coscos
T23=sin
T24=-(txT21+tyT22+tzT23)
T31=sincos+cossinsin
T32=sinsin-cossincos
T33=coscos
T34=-(txT31+tyT32+tzT33)
T41=0
T42=0
T43=0
T44=1
vy=sin(-)=-sin
vx=cos(-)sin=cos(-)sin=-cossin
vz=-(cos(-)cos())=coscos
Ako sa u označimo jedinični vektor smjera od očišta prema meti konačna kutna
pogreška koju učini promatrač je:
Verror=
Herror=
Svaki objekt sadrži polje vrhova, tekstura i trokuta. Slika 4.17. prikazuje način
povezivanja ova tri polja na primjeru jednostavne trostrane piramide.
Slika 4.17. Model trostrane piramide
Nakon popunjavanja ovih polja sljedeći dio koda iscrtava zadani objekt na
zaslon:
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glBindTexture(GL_TEXTURE_2D,Scene.texture[Scene.objects[i].texture]);
glTexCoordPointer(2,GL_FLOAT,0,Scene.objects[i].texdata);
glVertexPointer(3,GL_FLOAT,0,Scene.objects[i].pointdata);
glDrawElements(GL_TRIANGLES,Scene.objects[i].numpolies*3,GL_UNSIGN
ED_INT,Scene.objects[i].triangles);
Naredba glEnableClientState() omogućuje korištenje polja. Naredbe
glTexCoordPointer() i glVertexPointer() postavljaju pokazivače na polja
tekstura i vrhova. Prva dva parametra označavaju broj koordinata i tip
podataka i s njima je točno određena veličina jednog retka u polju. Naredba
glDrawElements() iscrtava zadani objekt. Prvi parametar GL_TRIANGLES
koristi se za objekte sastavljene od trokuta, drugi parametar je broj vrhova,
GL_UNSIGNED_INT je tip podatka i zadnji parametar je pokazivač na trokute
zadanog objekta.
Svaki objekt može pozivati neku zasebnu dodatnu OpenGL naredbu ukoliko ne
želimo da se svi objekti ponašaju isto. Npr. neki objekt može biti zarotiran ili
uvećan ako je u strukturi OpenGLCommand zapisano željeno ime naredbe i
njeni parametri.
U strukturu mete (targeta) zapisujemo njene trenutne koordinate. Ako se koristi
skokovito kretanje mete potrebno je znati konačni broj pozicija, vrijeme
zadržavanja na svakoj poziciji, trenutnu poziciju i u kojem trenutku je meta
smještena na tu poziciju.
III. rasterski sustav - obavlja proračun vrijednosti boje i dubine za svaki piksel.
Za ovaj dio posla zadužen isto grafički procesor.
//-----------------------------------------------------------------------------
//--- DetectTrackers - kod pokretanja aplikacije pokusaj detektirati tracker --
//-----------------------------------------------------------------------------
void __fastcall TForm1::DetectTrackers(void)
{
//pokusaj detektirati VFX3D tracker
if(!TrackerDetected)
{
Form6->Label1->Caption="Pokusavam detektirati VFX 3D tracker...";
if (VFXLoadDll()==VFX_OK)
{
TrackerDetected=true;
Tracker=VFX3D_TRACKER;
Form6->Label1->Caption="Tracker VFX3D je detektiran.";
}
}
//pokusaj detektirati InterSense tracker
if(!TrackerDetected)
{
/* Detect first tracker. If you have more than one InterSense device and would
like to have a specific tracker, connected to a known port, initialized first, then
enter the port number instead of 0. Otherwise, tracker connected to the rs232
port with lower number is found first. USB devices are always found first. */
Form6->Label1->Caption="Pokusavam detektirati InterSense tracker...";
handle = ISD_OpenTracker( NULL, 0, FALSE, FALSE );
//automatsko detektiranje trackera
//ako nije detektiran tracker
if(handle > 0)
{
TrackerDetected=true;
Tracker=INTERSENSE_TRACKER;
Form6->Label1->Caption="Tracker InterSense je detektiran.";
}
}
//ako nije detektiran nijedan tracker
if(!TrackerDetected) Form6->Label1->Caption="Tracker nije detektiran!";
}
//-----------------------------------------------------------------------------
U kodu podebljanim slovima označene su funkcije koje detektiraju davač
orijentacije i koje su integrirane u DLL datoteke.
7. KORIŠTENJE APLIKACIJE
U okviru Target odabiremo način kretanja mete (targeta). Sa prva dva radio
gumba unutar ovog okvira odaberemo jednu od dvije ponuđene parametarske
krivulje po kojima se kreće meta. Ispod Target okvira podešavamo amplitude i
kružnu frekvenciju (w) za zadanu krivulju. Trećim radio gumbom odabiremo
skokovito kretanje mete. Za to je potrebno unutar okvira Target file odabrati
neku ulaznu datoteku u kojoj su definirani položaji mete tijekom simulacije.
Kada korisnik postavi glavu u normalni položaj sa tipkom Reset angles sva tri
kuta postavljamo na 0°. Sa tipkama Start test i Stop test možemo testirati da li
davač orijentacije ispravno radi. Sa tipkom Configure dobivamo detaljnije
podatke o konfiguraciji davača orijentacije ukoliko je jedan od modela serije
Intersense.
Po završetku simulacije datoteku sa izmjerenim podacima o pokretima glave
otvaramo iz glavnog izbornika klikom na View->Data.
Kod pokretanja aplikacije, nakon što je kreirana osnovna forma, poziva se blok,
tj. funkcija FormCreate(). U ovom bloku inicijalizirane su globalne varijable
osnovne forme. Kod zatvaranja aplikacije na identičan način poziva se funkcija
FormDestroy(). U ovom bloku oslobađamo zauzetu memoriju, oslobađamo
davač orijentacije ukoliko je detektiran, oslobađamo OpenGL prozor i vraćamo
radnu rezoluciju monitora.
Ostale parametre modela kao što su boja modela, tip sjenčanja, izvor svjetlosti
za model itd. korisnik može podešavati u aplikaciji. Primjer modela glave koji
se nalazi u datoteci glava.ob sastavljen je od 5828 vrhova i 11370 poligona.
Simulacija dosta gubi na brzini ukoliko se iscrtava ovaj model glave na zaslon,
a to baš i nije poželjno jer se tako korisniku znatno otežava kretanje i snalaženje
u sceni. Veličina te datoteke je 340 KB.
//pozicija promatrača
POSX: pozx POSY: posy POSZ: posz
//opis objekta
OBJECT 0
{
//opcionalno izvođenje opengl naredbi za zadani objekat
[OPENGL_COMMANDS numcomm
{
openglcommand0(parametri)
openglcommand1(parametri)
...
openglcommandnumcomm(parametri)
}]
TEXTURE t0
NUMVERTEX nver0
NUMPOLIES npol0
POSITION x0 y0 z0
x0 y0 z0 u0 v0
x1 y1 z1 u1 v1
...
xnver0 ynver0 znver0 unver0 vnver0
10.1. KAŠNJENJE
Kašnjenje, u virtualnim sustavima, definirano je kao vrijeme između korisnikove
akcije i odgovora sustava na tu akciju. Ovo ukupno, ili sustavno kašnjenje,
možemo izraziti kao sumu pojedinih vremenskih kašnjenja:
Kod manje kvalitetnih LCD zaslona nije potrebna velika razina detalja, visoka
razlučivost i tu se također može dobiti na račun brzine.
Još jedno od zanimljivih i efikasnih rješenja je raspodijeljenost obavljanja
zadataka kod višeprocesorskih sustava (Division Ltd.?s PROvision systems i
Silicon Graphics).
Mjerenja bi bila puno vjerodostojnija da nisu rađena samo za jednu krivulju ili
da je krivulja kod svakog mjerenja slučajno generirana. Korisnik u tijeku
mjerenja nauči kretanje mete pa zbog toga radi manju pogrešku. Mjerenja su
počela sa većim brzinama prema manjim, pa tako pretpostavljam da bi korisnik
da ne poznaje kretanje mete, radio još veću pogrešku pri malim brzinama.
Svako mjerenje trajalo je oko 100 sekundi. Iz slike se vidi da pogreška kod
malih kašnjenja blago opada, a za velika kašnjenja naglo raste.
13. ZAKLJUČAK
Primarni cilj diplomskog zadatka u potpunosti je ostvaren. Izrađena je
aplikacija u kojoj se promatrač kreće po virtualnoj sceni i izvedena su mjerenja
koja pokazuju koji uvjeti trebaju biti zadovoljeni da se virtualni promatrač
osjeća neometan i virtualno prisutan.
Iako smo još uvijek daleko od "prave" virtualne stvarnosti, tehnologija svojim
napretkom povećava realnost u virtualnim sustavima. Razvijaju se brže i
kvalitetnije grafičke kartice, izrađuju se HMD-ovi sa sve većim vidnim poljem ,
vrlo fascinantan virtualni sustav CAVE i dalje se poboljšava, izrađuju se sve
manja prijenosna računala, virtualna stvarnost polako ali sigurno postaje prava
stvarnost.
14. LITERATURA
[Vince, 1995] J. Vince, Virtual Reality Systems, ACM Press, Cambridge, 1995.
[SGI, 1997.] Silicon Graphics Incorporated, OpenGL for Windows, User guide,
1997.
http://www.sgi.com
[Isense] http://www.isense.com
[NeHe] http://nehe.gamedev.net
[Rudy] Rudy Darken, Michael Zyda, Introduction to Virtual Reality [PDF]
[GRC, 1995] General Reality Company, Virtual Reality, State of the Art and
Key Chalenges, WESCON, 1995.
http://www.itl.nist.gov/iaui/ovrt/projects/health/vr-envir.htm
http://vr-atlantis.com/vr_systems_guide/vr_systems_list2.html
http://www.eureka.findlay.co.uk/archive_features/Arch_Cad/vrball/vrball.htm
http://www.ia.hiof.no/~michaell/home/vr/VirtualReality.html
DODATAK A.
Ulazna datoteka virtualne scene - SimpleScene.txt
DODATAK B.
DODATAK D.