Univerzitet u Novom Sadu
Fakultet tehničkih nauka
Odsek za računarstvo i automatiku
Katedra za računarske nauke i informatiku
PRIMER ARTIKULARNOG MODELA
SA IMPLEMENTACIJOM U DirectX OKRUŽENJU
DIPLOMSKI RAD
Kandidat:
Vladimir Savić e8549
Mentor:
Prof. dr Dragan Ivetić
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
ZADATAK DIPLOMSKOG RADA
kandidata Savić Vladimira, E8549
Prilagoditi standardni artikularni model kompjuterske animacije tako da posluži kao osnov
za kompjutersko modelovanje radnika pri vizuelizaciji organizovanja radnog mesta.
Pojednostaviti statiku i dinamiku standardnog artikularnog modela. U statici modela
izostaviti detalje vezane sa teksturu, a upravljačke elemente/tačke modela svesti na
minimum kako bi se podržala samo osnovna dinamika dovoljna za simuliranje efekata
odluka tokom organizovanja radnog mesta. Dinamiku modela svesti na pokrete udova i
glave, bez složenijih pokreta trupa (uvrtanje) i složene translacije čitavog modela u 3D sceni.
Na osnovu dobijenog modela razviti njegovu programsku apstrakciju zasnovanu na
hijerarhiji objekata i animacionim kontroleru modela sa optimalnim skupom instrukcija.
Programska apstrakcija mora podržati simulaciju izgleda i pokreta čoveka i jednostavnih
predmeta na 3D sceni kako bi se efikasnije sagledale odluke u organizaciji radnog mesta.
Vizuelizaciju obaviti posredstvom DirectX grafičke podrške. Programsku apstrakciju
ilustrovati jednostavnim animacionim programom.
Prof. dr Dragan Ivetić
2
SADRŽAJ
1. UVOD
2. ANALZA
2.1. STATIKA
2.1.1. SCENA-KOORDINATNI SISTEM
2.1.2. 3D PRIMITIVE
2.1.3. 3D MODEL ČOVEKA – ARTIKULARNI MODEL
2.1.3.1. SPECIFIKACIJA ELEMENTA
2.1.4. PRIMERI ARTIKULARNIH MODELA
2.1.5. 3D MODEL PAPIRA
2.2. DINAMIKA
2.2.1. ARTIKULARNE TAČKE
2.2.2. TAČKE ZA INTERAKCIJU
2.2.3. KORENSKI ELEMENT I REFERENTNA TAČKA
2.2.4. GEOMETRIJSKE TRANSFORMACIJE
2.2.5. ANIMACIONI KONTROLER I SETOVI INSTRUKCIJA
3. IMPLEMENTACIJA APLIKACIJE Artikularni Model ver. 1.0
3.1. PODSISTEM ZA INICIJALIZACIJU
3.2. PODSISTEM KORISNIČKOG INTERFEJSA (UPRAVLJANJE ANIMACIJOM)
3.3. PODSISTEM ZA ANIMACIJU
3.4. PODSISTEM ZA CRTANJE 3D MODELA
3.5. PODSISTEM DirectX
3.6. IMPLEMENTACIJA APLIKACIJE MODELOM KLASA, ATRIBUTI I METODE
3.6.1. SPECIFIKACIJA ELEMENTA
3.6.2. INICIJALIZACIJA HIJERARHIJSKE ORGANIZACIJE I LISTE
3.6.3. SETOVI INSTRUKCIJA I UPRAVLJANJE ANIMACIJOM
3.6.4. ANIMACIONI KONTROLER
3.6.5. CRTANJE 3D MODELA
3.6.6. KORISNIČKI INTERFEJS
4. POGLED NA KORISNIČKI INTERFEJS
5. ZAKLJUČAK
6. LITERATURA
7. BIOGRAFIJA
8. PRILOG
4.
5.
6.
6.
8.
10.
11.
17.
17.
18.
19.
20.
20.
22.
26.
32.
32.
33.
40.
41.
42.
46.
46.
47.
49.
51.
53.
53.
55.
58.
59.
59.
60.
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
1.
UVOD
Kompjuterska animacija se često i isključivo povezuje sa svetom zabave, što je pak
objašnjivo činjenicom da je tada i ona očigledna najširem krugu korisnika. Veliki broj kompjuterskih
igara i softvera za zabavu danas predstavlja osnovni razlog kupovine i korišćenja računara među
ljudima. Međutim, kompjuterska animacija je dala veliki doprinos pri vizuelizaciji rezultata rada ljudi u
različitim oblastima. Ovaj rad se bavi primenom kompjuterske animacije za potrebe organizovanja
radnog mesta čime nova odluka odmah može biti verifikovana modelom. Ovakav pristup
kompjuterskoj animaciji pomera njen fokus sa etike (zabave) na istinu [4]. U nastavku teksta sledi
nekoliko primera koji ilustruju korišćenje kompjuterske animacije u domenu organizacije rada.
Izgraditi jednu zgradu pored velikih novčanih ulaganja zahteva i organizaciju. Nakon projektovanja
zgrade sledi njena izgradnja. Izgradnja se često dešava na mestima koja su okružena stambenim
zgradama i saobraćajnicama, te isto može predstavljati veliki problem za građevinske inženjere. 3D
grafički softver za podršku organizacije rada im omogućuje da simuliraju sredinu u kojoj se gradnja
obavlja. Ovim se pored samog gradilišta mogu prikazati i okolne stambene zgrade (kako bi se
ustanovilo da li izgradnja remeti životnu okolinu), putevi (radi planiranja dopremanja materijala i
mašina), mogući priključci na elektro energetski sistem (radi napajanja električnom energijom raznih
aparata i mašina koje se koriste kao alat u izgradnji) i sve ostale stvari koje su građevinskim
inženjerima neophodne za dalje planiranje aktivnosti na gradilištu.
Proizvodne trake bazirane na industrijskim robotima neke multinacionalne automobilske industrije se
u potpunosti mogu simulirati 3D grafičkim softverom. Kako proizvodna traka predstavlja proces u
kojem se proizvod izgrađuje postepeno po koracima, to se takav proces proizvodnje može prikazati
simulacijom od prvog do zadnjeg koraka. Ukoliko se vremenom ustanovi da se neki od koraka iz
proizvodnog lanca može izvršiti sa manjim brojem koraka, čime se dobija ušteda električne energije
za pokretanje kompleksnih industrijskih robota, onda se prethodno takav korak može simulirati 3D
grafičkim softverom, a zatim ukoliko simulacija prikaže rezultate i primeniti u praksi.
Grafičke prezentacije se često koriste radi prezentovanja organizacije nekog posla. Pit stopovi su
veoma dugo sastavni deo trka Formule 1. Zbog velikih brzina kojim se formula kreće, u toku trke je
potrebno najmanje dva puta menjati pneumatike ( gume ) i dolivati gorivo. Cilj ovakvog posla je da se
uradi bez greške u što je moguće kraćem vremenu. Prosek izvršavanja ovog posla je 8 sekundi. Da bi
se ispunio prosek od 8 sekundi potrebno je učestvovanje istovremeno 21 mehaničara. U tih 8 sekundi
mehaničari trebaju da odrade 10 radnji kako bi se promenili pneumatici i dolilo gorivo. Svaki
mehaničar u svakoj sekundi vremena ima tačno definisan posao koji treba da odradi. Nakon
planiranja ovakvog posla isti se grafički prezentuje a svaki mehaničar posmatrajući svoju poziciju na
ekranu uči koje sve korake u tih 8 sekundi treba da izvrši imajući pri tome uvid i o ostalim aktivnostima
tima. Inače, ljudi koji su zaduženi za logistika u formuli 1 za planiranje koriste softver pomenute
prirode. Za celokupan uvid oko organizacije ovog posla u literaturi [2].
Iz navedenih primera nije teško uvideti koliko je jednostavnija i efikasnija organizacija rada kada se
efekat svake odluke odmah vidi na kompjuterskoj simulaciji a ne tek u gotovoj realnosti. Ukoliko se
greške uvide u gotovoj realnosti obično je kasno za bilo kakve ispravke, dok ponovno planiranje
organizacije rada kompaniji donosi nove materijalne troškove zbog sopstvenih grešaka i propusta. 3D
grafički softver logističarima omogućuje da planiranu organizaciju rada prethodno simuliraju
kompjuterskom animacijom, pa ako simulacija prikaže adekvatne rezultate, ostvareni plan se
primenjuje u praksi. Efekat koji se postiže korišćenjem 3D grafičkog softvera za simulaciju
organizacije rada su milioni ušteđenih dolara koji se ulažu u organizaciju posla izuzetne složenosti
kao što : građevinski radovi, proizvodne industrijske trake, trke Formule 1 itd.
4
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
2.
ANALIZA
Jedan od osnovnih problema koje prati realizacija 3D grafičkog softvera prikazana u uvodnom
delu ovoga rada je interno predstavljanje 3D modela (čoveka, građevinskih mašina, zgrada) na
računaru. Generalno gledano postoje sledeći tipovi za predstavljanje 3D modela na računaru:
Artikularni model – Ovakvi modeli su predstavljeni skupom hijerarhijski povezanih elemenata.
Pomeranje nekog elementa hijerarhijske organizacije utiče na pomeranje svih elemenata koji su mu
subordinirani – propagacija rotacije. Artikularni model je programabilan, jer jednom implementiran
artikularni model omogućuje generisanje različitih pokreta (to je suština - esencionalna karakteristika
artikularnih modela). Akcenat artikularnog modela je prevashodno na karakternoj animaciji tj. na
generisanju pokreta ljudskog tela, mada se istim mogu generisati i pokreti drugih živih bića
(kičmenjaci mada mogu i beskičmenjaci– primer hobotnice sa slike 29. u sekciji 2.1.4) kao i pokreti
industrijski robota, slika 30. u sekciji 2.1.4. Razvoj artikularnog modela zahteva implementaciju
hijerarhijske organizacije i implementaciju mehanizma koji omogućuje generisanje različitih pokreta.
Modeli čestica (particle systems) – Model se sastoji od skupa malih čestica čije ponašanje na 3D
sceni je kontrolisano raznim parametrima zakone fizike, na primer : gravitacija. Ovim modelom se
uspešno predstavljaju : oblak, dim, tečnost i dr. Različiti autori na različite načine implementiraju
particle sisteme što je prirodno s obzirom na probleme koji se teže rešiti. Recimo Reeves [8], [9] i
Reynolds [10] koriste različita imena particle sistema sa različitim algoritmima implementacije.
Reeves je ponudio dva različita particle sistema od kojih je jedan iskorišćen
za snimanje filma Star Trek II: The Wrath of Khan, dok je drugi korišćen za
potrebe animiranja kratko metražnog filma The Adventures of Andre and
Wally B. Efekat koji je Reeves želeo da postigne u filmu Star Trak II je
eksplozija bombe na površini planete i vatru koja se pri eksploziji širi na sve
strane. Svaki deo u ovom particle sistemu predstavlja jednu zasebnu tačku.
Slika 1. Fuzzy Objects –
Particle system je prezentovan sa hiljadama zasebnih tačaka koje eksploziji
vatra, eksplozija.
i vatri daju “fuzzy” izgled, zbog čega Reeves ovakve objekte naziva Fuzzy
Objects [8], slika 1. U filmu The Adventures of Andre and Wally B, Reeves
animira pokrete lišća drveća i šume kao i njihovu senku, [9]. Oba Reeves-ova particle sistema
predstavljaju dva različita algoritma, jer je kretanje vatre i eksplozije različito u odnosu na kretanje
lišća na drveću i njihove senke.
Reynolds je radi animiranja kretanja jata ptica (Flocking Birds - algoritam) ponudio rešenje
particle sistema u kojem se čestice/tačke zovu “boids” što je skraćenica od bird-object (objekat ptice),
[10].
Deformni modeli – Koriste se za predstavljanje objekata koji nisu po prirodi artikularni a suviše su
kompleksni po strukturi/ponašanju za skupove piksela tj. particle sisteme. Ovaj tip modela koristi se
za modelovanje: odeće, kose i sl.
Hibridni modeli – Ovaj tip modela nastao je kombinacijom prethodnih tipova. Hibridni model se
koristi za modelovanje složenih objekata. Na primer, Model čoveka (artikularni model) koji hoda, drži
upaljenu baklju u ruci (vatra je skup piksela) i ogrnut je plaštom (deformni model) predstavlja jedan
primer hibridnog modela.
O predstavljanju 3D modela na računaru pogledati literaturu [4].
Razvoj artikularnog modela je prikazan kroz njegovu statiku i dinamiku.
Statika artikularnog modela definiše hijerarhijsku organizaciju kao i odnose između elemenata koji je
čine. Statikom je potrebno pronaći rešenje za opis elemenata hijerarhijske organizacije kao i način
njene inicijalizacije u operativnoj memoriji računarskog sistema.
Dinamika artikularnog modela zahteva realizaciju sistema za generisanje pokreta tj. animiranje
artikularnog modela. Sistem za animiranje treba da obezbedi rotaciju bilo kog elementa iz hijerarhijske
organizacije uz propagaciju rotacije kroz podstablo odgovarajućeg elementa.
5
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
2.1.
STATIKA
Pre nego što se definiše artikularni model čoveka, potrebno je upoznati se sa osnovnim
elementima Direct3D API-ija (Aplication Programming Interface za generativnu grafiku, [1]) DirectX
okruženja koji služe za modelovanje tj. crtanje 3D objekata na sceni, kako bi se isti primenili u
rešavanju postavljenog zadatka. Osnovni elementi ove namene Direct3D API-ija su sledeći :
- tipovi scene tj. koordinatni sistemi, i
- primitive na osnovu kojih se modeluju tj. crtaju 3D objekti.
U nastavku teksta sledi objašnjenje svih navedenih elemenata bez ulaženja u detalje jer Direct3D API
nije tema ovoga rada. Direct3D API je iskorišćeno u ovom radu kako bi se rešenja vezana za statiku i
dinamiku artikularnog modela mogla prezentovati na odgovarajući način. Više detalja o pomenutim
elementima se može naći u specifikaciji za Direct3D DirectX 9.0 SDK okruženje,[1].
2.1.1.
SCENA - KOORDINATNI SISTEMI
3D grafičke aplikacije koriste dva tipa koordinatnih sistema: left – handed i right – handed
koordinatne sisteme (slika 2.a i 3.a). U oba koordinatna sistema, pozitivna X osa je usmerena u
desno, dok je pozitivna Y osa usmerena na gore. Da bi se odredilo usmerenje pozitivne Z ose, koristi
se pravilo leve ruke za left – handed i pravilo desne ruke za right – handed koordinatne sisteme.
Pravilo leve ruke:
Slika 2. Left – handed
koordinatni sistem.
Da bi se odredilo usmerenje pozitivne Z ose left – handed koordinatnog
sistema, potrebno je postaviti levu ruku u položaj prikazan na slici 2.b.
Očigledno, palac pokazuje na pozitivan smer Z ose. Na istoj slici opruženi
prsti pokazuju pozitivan smer X ose koji kada se saviju kao na slici 2.c
pokazuju pozitivan smer Y ose.
Pravilo desne ruke:
Slika 3. Right –handed
koordinatni sistem.
Da bi se odredilo usmerenje pozitivne Z ose right – handed
koordinatnog sistema, potrebno je postaviti desnu ruku u položaj prikazan na
slici 3.b. Očigledno, palac pokazuje na pozitivan smer Z ose. Na istoj slici
opruženi prsti pokazuju pozitivan smer X ose koji kada se saviju kao na slici
3.c pokazuju pozitivan smer Y ose.
Left – handed i right – handed koordinatni sistemi se mogu definisati skupom uređenih trojki (x,y,z)
čija je oznaka R3.
R3 = { (xi,yi,zi) | xi ∈ R, yi ∈ R, zi ∈ R, i = 1, 2, ... , n gde n ∈ N},
(1.2.1)
gde je R skup realnih brojeva, N skup prirodnih brojeva a xi, yi i zi jesu koordinate uređenih trojki.
Definisanjem skupa R3 definisan je i 3D prostor. Međutim, definicija skupa R3 nije potpuna jer ne
sadrži oznaku tipa koordinatnog sistema (left – handed, right – handed). Zbog toga se uvode posebne
oznake skupa R3 za left – handed i right – handed koordinatne sisteme.
Oznaka left – handed (LH) koordinatnog sistema je R3LH, dok je oznaka right – handed (RH)
koordinatnog sistema je R3RH.
6
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
Direct3D-uređaj za crtanje 3D grafike koristi isključivo left-handed koordinatni sistem, što predstavlja
ograničenje. 3D modeli grafičkih aplikacija koje su bazirane na right-handed koordinatnom sistemu se
prethodno moraju portovati u left-handed koordinatni sistem kako bi se mogle iscrtati Direct3Duređajem. 3D modeli se definišu različitim specifikacijama (3ds – AutoDesk 3D Studio, dwg AutoCAD,
mdl – Bioware Corporation) zbog čega je radi portovanja (Import/Export) poželjno specifikovati
koordinatni sistem i okruženje u kojem je 3D model definisan. O načinu portovanju 3D modela iz righthanded u left-handed koordinatni sistem i obratno pogledati specifikaciju [1].
Oba koordinatna sistema predstavljaju scenu na kojoj se crtaju 3D objekti. Direct3D API ne sadrži
funkciju koja se podrazumevano izvršava pri startovanju 3D grafičkog softvera, sa ciljem prikazivanja
tj. iscrtavanja scene na ekranu. Postoje razlozi zbog kojih je neophodno iscrtavanje scene tj.
koordinatnih osa R3LH koordinatnog sistema. Osnovnih razlog je taj, što bez iscrtane scene
posmatrač (čovek koji posmatra ekran monitora) nema osećaja o postojanju 3D prostora.
Slika 4. 3D model čoveka
na ne iscrtanoj sceni.
Na slici 4. je prikazan 3D model čoveka na sceni, koji je modeliran
upotrebom primitiva poligona (sekcija 2.1.2), koje propisuje specifikacija
DirectX okruženja, [1]. Sa slike 4. se jasno vidi da scena nije iscrtana na
ekranu koji je simbolično predstavljen crnim kvadratom, čime posmatrač
nema osećaja o postojanju 3D prostora. Osećaj ne postojanja 3D
prostora može dovesti posmatrača u situaciju da u toku posmatranja
animacije pokreta ljudskog tela, uoči anomalije u vidu izduženja i
povećanja ruku ili nogu. Recimo, ukoliko se animira pokret ruke na gore,
posmatrač u toku animacije može da uoči velika izduženja i povećanja
ruke, čime može da pomisli da odgovarajući mehanizam za animiranje
pokreta nije dobro rešen. Takve anomalije jesu iluzije koje čovek vidi
zbog nedostatka osećaja 3D prostora. Ovakav problem se rešava
iscrtavanjem scene na ekranu.
Iscrtavanjem scene tj. koordinatnog sistema, dobija se osećaj tri
dimenzije, slika 5. Ukoliko posmatrač sada posmatra animaciju
pokreta ruke na gore, uočeno izduženje i povećanje ruke bi bilo
sasvim prirodno i posmatrač ih ne bi smatrao anomalijom tj. iluzijom.
DirectX okruženje je tokom animacije vršilo izduženje i povećanje
ruke, jer svi objekti koji su bliže posmatraču su po dimenzijama veći
od onih objekata koji su od posmatrača udaljeniji. To je na slici 5.
prikazano pomoću kvadrata koordinatnog sistema. Oni kvadrati koji
su bliže posmatraču su prikazani sa većom površinom od onih
kvadrata koji su od posmatrača udaljeniji. Pored toga, kvadrati se
moraju i izdužiti kako bi se 3D prostor posmatraču bolje dočarao.
Slika 5. 3D model čoveka na
iscrtanoj sceni. Osećaj tri
dimenzije.
Pošto DirectX API ne poseduje funkciju za
iscrtavanje scene tj. koordinatnog sistema to je
potrebno pronaći odgovarajući način za
iscrtavanje istog. Koordinatni sistem se crta
upotrebom primitive linije koja je objašnjena u
sekciji 2.1.2.
Slika 6. Scena tj. left – handed koordinatni sistem koji
je iscrtan upotrebom primitiva linije.
Na slici 6. prikazana je scena tj. left – handed
koordinatni sistem koji je iscrtan pomoću primitiva
linije. Scena ne mora da bude koordinatni sistem,
ona može da bude i prostorija koja će imati pod i
dva zida. Bitno je da iscrtana scena kod
posmatrača stvori osećaj 3D prostora. Scena sa
slike 6. stvara osećaj 3D prostora.
7
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
2.1.2.
3D PRIMITIVE
3D objekti se modeliraju i iscrtavaju pomoću 3D primitiva. Specifikacija za Direct3D DirectX
9.0 okruženja propisuje tri tipa 3D primitiva:
- teme,
- linija, i
- poligona.
Za crtanje 3D primitiva na sceni, zadužen je Direct3D – uređaj (pogledati sekciju 3.5).
Teme
Slika 7. prikazuje teme
(tačku) nacrtan na sceni
3
–
left-handed
(R LH
koordinatni sitem).
Sve uređene trojke (x,y,z) ∈ R3 (sekcija 2.1.1), se u Direct3D terminologiji
nazivaju temenima. Teme (tačka) se označava malim slovom v, sa
identifikacionim brojem u indeksu (recimo, v1). Da bi se n temena
nacrtalo na sceni, Direct3D – uređaju je potrebno proslediti sledeće
parametre :
- n temena vi , gde je i=1,2,...,n,
- broj n (broj temena koji se iscrtava), i
- komandu D3DPT_POINTLIST kao indikator
Direct3D-uređaju da je potrebno crtati
temena
Linija
Slika
8.
prikazuje
liniju
3
nacrtanu na sceni (R LH – lefthanded koordinatni sitem).
Spajanjem dva temena (v1, v2), Direct3D – uređaj crta liniju na sceni.
Da bi se nacrtalo n linija na sceni, Direct3D – uređaju je potrebno
proslediti sledeće parametre :
- n parova temena (v1, v2),
- broj n (broj linija koji se iscrtava), i
- komandu D3DPT_LINELIST kao
indikator Direct3D- uređaju da je
potrebno crtati linije.
Poligon (mnogougao)
Poligon je površina u 3D prostoru koja mora da ispunjava uslove planarnosti i konveksnosti.
Slika 9.a
Planaran poligon.
Slika 9.b
Neplanaran poligon.
Poligon je planaran ukoliko sve tačke poligona leže u istoj
ravni. Na slici 9.a prikazan je planaran poligon odakle se
jasno vidi da sve tačke poligona leže u istoj ravni. Ukoliko
se jedan deo planarnog poligon zarotira u smeru strelice
prikazane na slici 9.b, dobija se neplanarni poligon, jer sve
tačke poligona ne leže u istoj ravni.
8
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
Poligon nije konveksan ukoliko se može nacrtati linija koja
ulazi i izlazi iz pogona više od jednog puta. Na slici 10.a
prikazan je konveksan poligon gde nacrtana linija ulazi i
izlazi iz poligona tačno jedanput, za razliku od
nekonveksnog poligona sa slike 10.b, gde nacrtana linija
ulazi i izlazi iz poligona tačno dva puta.
Slika 11.a
Trougaoni poligon.
Slika 11.b
Četvorougaoni poligon.
Slika 10.a
Konveksan poligon.
Slika 10.b
Nekonveksan
poligon.
Korišćenjem trougaonog poligona ispuni će se
uslovi planarnosti i konveksnosti, zato što sve tačke
trougla uvek leže u istoj ravni, iz čega sledi i
konveksnost trougaonog poligona, jer je ravan
uvek konveksna, slika 11.a. Poligoni sa više od tri
ugla nastaju spajanjem trougaonih poligona. Na
slici 11.b prikazan je četvorougaoni poligon koji je
nastao spajanjem dva trougaona poligona.
Osim poligona, spajanjem trouglova je moguće
modelirati bilo koji 3D objekat. Na slici 12.a i 12.b
prikazane su kocka i sfera koje su modelirane
spajanjem
trougaonih
poligona.
Spajanje
trougaonih poligona se radi na taj način da se
svaka ivica trougaonog poligona deli između
najviše dva susedna trougaona poligona, što se i
vidi sa slike 12.a i 12.b. Spajanjem poligona
nastaje mreža poligona koja se u Direct3D
terminologiji naziva Poligon mesh.
Slika 12.a Kocka
modelirana spajanjem
12 trougaonih poligona.
Slika 12.b Sfera
modelirana spajanjem
trougaonih poligona.
Radi potreba iscrtavanja trougaonog poligona isti se specificira trojkom temena (v1, v2, v3). Koordinate
temena v1, v2 i v3 specificiraju površinu i mesto iscrtavanja trougaonog poligona na sceni. Za
iscrtavanje trougaonog poligona zadužen je Direct3D – uređaj, gde isti spajanjem temena (tačaka) v1,
v2 i v3 iscrtava trougaoni poligona na sceni.
Da bi se nacrtao 3D objekat na sceni kao što su kocka ili sfera Direct3D – uređaju se prosleđuje niz
od onoliko trojki temena od koliko su trougaonih poligona kocka i sfera modelirane. Kocka je
modelirana spajanjem 12 trougaonih poligona što znači da je Direct3D - uređaju potrebno proslediti
niz od 12 trojki temena. Spajanjem temena iz trojki Direct3D- uređaj crta 3D model kocke u određenoj
veličini i na određenom mestu u 3D prostoru tj. na sceni. O sceni pogledati sekciju 2.1.1. U opštem
slučaju Direct3D-uređaju se prosleđuje:
-
n trojki temena (v1, v2, v3),
broj n (broj trougaonih poligona koji se iscrtava), i
komandu D3DPT_TRIANGLELIST kao indikator Direct3D- uređaju da je
potrebno crtati trougaone poligone.
DirectX nije jedino 3D okruženje koje koristi trougaoni poligon, isto koristi i OpenGL. Iscrtavanje
trougaonih poligona je danas hardverski podržano od strane 3D grafičkih procesora tipa NVidia
GeForce i Ati Radeon. Poznato je da se moć centralnih mikroprocesora izražava u MIPS-ima (Micro
Instruction Per Second). Moć grafičkih procesora se pored MIPS-a izražava i u broju trouglova koje
može da iscrta (renderuje) na ekran tokom jedne sekunde.
9
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
2.1.3.
3D MODEL ČOVEKA – ARTIKULARNI MODEL
Artikularni model predstavlja hijerarhijski povezanu kolekciju 3D objekata. Na slici 13.b
prikazana je hijerarhija povezanih 3D objekata koji grade 3D model čoveka prikazanog na slici 13.a.
Slika 13.a 3D model čoveka izgrađen kolekcijom hijerarhijski povezanih elemenata (3D objekata).
Slika 13.b Artikularni model – hijerarhija povezanih elemenata (3D objekata).
Svaki deo čoveka predstavlja zaseban element koji se nalazi na određenom mestu hijerarhijske
organizacije artikularnog modela. Zbog toga se svaki element hijerarhijske organizacije zasebno
modeluje do proizvoljnog nivoa detalja. Kako hijerarhija elemenata predstavlja stablo to svaki pokret
nekog elementa iz stabla uzrokuje propagaciju istog pokreta kroz podstablo, tj. kroz sve subordinirane
elemente datog elementa. Recimo, pomeranjem desne nadlaktice ujedno se pomera desna
podlaktica, desna šaka i desno rame, zato što isti elementi sačinjavaju podstablo tj. subordinirane
elemente desne nadlaktice, slika 13.b. Jednim artikularnim modelom moguće je generisati različite
pokrete ljudskoga tala, što znači da su takvi modeli programabilni – što je cilj razvoja artikularnih
modela. Kada se artikularni model jednom implementira, isti se posle samo koristi. Razvoj
artikularnog modela zahteva realizaciju hijerarhijske organizacije (kako se podaci o hijerarhijskoj
organizaciji skladište na spoljašnjoj memoriji i kako se ista izgrađuje tj. inicijalizacije u operativnoj
memoriji računara) i realizaciju mehanizma koji omogućuje generisanje različitih pokreta nad istim
artikularnim modelom (animacioni kontroler i setovi instrukcija – sekcija 2.2.5).
U daljem tekstu ovoga rada
posmatraće
se
pojednostavljeni
artikularni
model čoveka koji je prikazan
na
slici
14.
U
pojednostavljenom modelu su
izostavljeni elementi vrata,
ramena i karlice kako bi se
implementacija artikularnog
modela što je moguće
pojednostavila.
Izostavljeni
elementi ne utiču na razvoj
artikularnog modela.
Slika 14. Pojednostavljeni artikularni model čoveka.
10
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
Realizacija hijerarhijske organizacije je bazirana na opisu elemenata koji pripadaju
artikularnim modelima sa slika 13.a i 14. Kako se svaki element iz hijerarhijske organizacije zasebno
modeluje, to je potrebno razviti jedinstven mehanizam za opis tj. definisanje svih elemenata, uz
mogućnost da se svaki element modelira do proizvoljnog nivoa detalja. Opis elementa mora da
obuhvata sve parametre koji su od interesa za animiranje i izgradnju hijerarhijske organizacije
artikularnog modela. Jedinstven mehanizam za opis svih elemenata hijerarhijske organizacije je
realizovan u vidu specifikacije koja se naziva element, u verziji 1.0. Specifikacija elementa predstavlja
način da se podaci o hijerarhijskoj organizaciji artikularnog modela trajno čuvaju na spoljašnjoj
memoriji računarskog sistema, gde se na osnovu istih u toku startovanja aplikacije Artikularni Model
ver. 1.0. tj. hijerarhijsko stablo inicijalizuje u operativnoj memoriji računarskog sistema. U sekciji koja
sledi videće se da se na spoljašnjoj memoriji računarskog sistema čuva samo jedan deo hijerarhijske
organizacije.
2.1.3.1 SPECIFIKACIJA ELEMENTA
Specifikacija elementa je razvijena na osnovu sledećih kriterijuma:
1. Specifikacija treba da bude jedinstven mehanizam za opis svih elemenata iz hijerarhije
artikularnog modela.
2. Specifikaciju treba primeniti na razvoj bilo kog artikularnog modela, a ne samo na razvoj
karakterne animacije artikularnog modela čoveka. Recimo artikularni model hobotnice ili
industrijskog robota (sekcija 2.1.4).
3. Svaki element iz hijerarhijske organizacije treba da ima jedinstveni identifikator.
4. Specifikacija treba da obezbedi 3D modeliranje svakog elementa hijerarhijske organizacije do
proizvoljnog nivoa detalja, pomoću Direct3D-a DirectX okruženja.
5. Specifikacija treba da obuhvati sve parametre koji su neophodni za animiranje artikularnog
modela.
6. Specifikacija treba da sadrži mehanizam na osnovu kojeg se izgrađuje hijerarhijska organizacija u
operativnoj memoriji računarskog sistema.
7. Specifikacija treba da obezbedi mehanizme koji olakšavaju modelovanje artikularnog modela.
Struktura specifikacije elementa je prikazana na slici 15.
Slika 15. Specifikacija element
Naziv elementa – Elementu se dodeljuje naziv kao jedinstven identifikator u hijerarhijskoj organizaciji
artikularnog modela, (kriterijum 3).
Poligon Mesh model – Deo specifikacije koji obezbeđuje 3D modelovanje svakog elementa
hijerarhijske organizacije. Element se modeluje upotrebom 3D primitiva (sekcija 2.1.2.) koje propisuje
specifikacija [1], pri čemu se 3D model reprezentuje tako da se može iscrtati Direct3D – uređajem,
(kriterijum 4).
Tačke za animaciju – Deo specifikacije koji definiše sve neophodne elemente za animiranje
artikularnog modela, u šta spadaju: artikularne tačke, tačke za interakciju i referentne tačke,
(kriterijum 5).
Direktno subordinirani elementi – Deo specifikacije u kojem se pri opisu nekog elementa
hijerarhijske organizacije navode SAMO nazivi elemenata koji su mu direktno subordinirani tj.
podređeni. Recimo, za element desna nadlaktica se navodi naziv “DesnaPodlaktica”, jer ista
11
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
predstavlja direktno subordinirani elementi desne nadlaktice. Ovaj deo specifikacije služi za izgradnju
tj. za inicijalizaciju hijerarhijske organizacije artikularnog modela u operativnoj memoriji računarskog
sistema pri startovanju aplikacije, (kriterijum 6).
Zanemarivanje rotacije – Deo specifikacije koji je uveden sa ciljem generisanja pokreta ustajanja
artikularnog modela čoveka sa stolice. Objašnjenje parametra Zanemarivanje rotacije zahteva više
detalja zbog čega je isto ostavljeno za sekciju 2.2.3. poglavlja o dinamici.
Parametar simetričnosti – Parametar simetričnosti olakšava modelovanje artikularnog modela
čoveka, jer je ljudsko telo po prirodi simetrično. Gornji i donji udovi desne strane ljudskog tela su
identični sa gornjim i donjim udovima leve strane. To znači da se specifikovanjem desne nadlaktice
ujedno specifikuje i leva nadlaktica, koja se pri kreiranju artikularnog modela u operativnoj memoriji
računara dobija ogledanjem desne nadlaktice u ogledalu, (kriterijum 7).
Osnovni podaci – U delu osnovni podaci specifikuje se razvojno okruženje u kojem je modeliran
element hijerarhijske organizacije što je neophodno radi daljeg usavršavanje modela, zatim navodi se
tip koordinatnog sistema što je neophodno radi portovanja (Import/Export) modela, zatim verzija
specifikacije elementa, ko je autor modela i slično.
Naziv elementa
Svakom elementu se dodeljuje naziv kao jedinstven identifikator u hijerarhijskoj organizaciji. Da bi
naziv nekog elementa bio jedinstven potrebno je da su nazivi svih elemenata hijerarhijske
organizacije različiti, o čemu vodi računa programer tj. autor artikularnog modela. Nazivi elemenata
mogu biti proizvoljnog formata, mogu biti alfabetski, numerički ili alfanumerički. Konvencija za nazive
elemenata hijerarhijske organizacije je sledeća: NazivArtikularnogModela_NazivElementa.
NazivArtikularnogModela je naziv čitavog modela, dok je NazivElementa naziv pojedinačnih
elemenata
koje
čine
artikularni
model.
Npr.
:
ModelCoveka_DesnaNadlaktica,
ModelCoveka_DesnaPdlaktica, ModelCoveka_DesnaSaka itd. Ovakva konvencija davanja naziva
elementima omogućava da se jednim animacionim kontrolerom generišu animacije za više različitih
artikularnih modela na sceni, sekcija 2.2.5.
Poligon Mesh model
Svaki element hijerarhijske organizacije artikularnog modela predstavlja 3D objekat koji se može
prikazati sa više ili manje detalja. 3D objekti se modeliraju spajanjem trougaonih poligona gde se
čitav postupak modelovanja odvija u dve faze. O trougaonim poligonima pogledati sekciju 2.1.2.
Prva faza – obuhvata pozicioniranje tačaka na određene pozicije u R3LH
koordinatnom sistemu, slika 16. Radi toga poželjno je zamisliti konturu
svakog dela ljudskog tela a zatim na osnovu zamišljenih kontura tačke
pozicionirati na takva mesta da se njihovim spajanjem (druga faza)
mogu prikazati svi bitni detalji određenog dela tela.
Na slici 16. prikazane su zamišljene konture delova ruke na osnovu
kojih se postavljaju tačke na određene pozicije u R3LH koordinatnom
sistemu. Pošto je pozicija tačaka određena na osnovu zamišljene
konture, to se iste nazivaju konturnim tačkama. O R3LH koordinatnom
sistemu pogledati sekciju 2.1.1.
Slika 16. Pozicioniranje
konturnih tačaka u lefthanded koordinatnom
3
sistemu - R LH.
Svaki deo ljudskog tela se opisuje skupom konturnih tačaka gde se za svaku tačku iz skupa
specifikuju sledeći podaci:
- broj 2 kao indikator konturne tačke (mora se navesti jer postoje i drugi tipovi tačaka – tačke za
animaciju),
- identifikacioni broj tačke (neophodno za drugu fazu), i
- pozicija tačke definisana koordinatama (x,y,z) u R3LH.
12
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
Druga faza – obuhvata specifikovanje trougaonih poligona na osnovu
identifikacionih brojeva konturnih tačaka, koje su specifikovane u prvoj fazi.
Sledi deo specifikacije trougaonih poligona na osnovu koje se modeluje 3D
objekat nadlaktice: {1,2,5, 2,3,5, 3,4,5, ...}.
Svaka grupa od po tri identifikaciona broja iz specifikacije trougaonih
poligona definiše jedan trougaoni poligon. Brojevi 1,2 i 5 označavaju da se
spajanjem konturnih tačaka identifikovanih brojevima 1,2 i 5 dobija
trougaoni poligon koji je na slici 17. prikazan crnom bojom.
Slika 17. Mreža
trougaonih poligona –
poligon mesh.
Slika 18. 3D model
čoveka modeliran sa
većim brojem detalja.
Ukoliko se svi 3D objekti iz hijerarhijske organizacije artikularnog modela
modeliraju sa više detalja, to se nakon modelovanja istih dobija 3D model
čoveka prikazan na slici 18. Modeliranje svakog dela ljudskog tela sa više
detalja zahteva specifikovanje velikog broja konturnih tačaka i trougaonih
poligona. Međutim, isto zahteva i više operativne memorije i procesne snage
3D grafičkih procesora. Na slikama 19.a-19.c prikazano je modelovanje glave
čoveka sa velikim brojem detalja. Primećuje se da je za isto potrebno
specifikovati velik broj konturnih tačaka i trougaonih poligona, što ujedno
zahteva memorijske resurse i 3D procesnu snagu. Zato je pri modelovanju 3D
objekata potrebno vršiti optimizovanje broja konturnih tačaka i trougaonih
poligona ali na taj način da se zadrži dovoljan nivo detalja.
Slika
19.a
Prva
faza
–
pozicioniranje konturnih tačaka u
koordinatnom sistemu na osnovu
prethodno
zamišljene
konture
glave.
Slika 19.b Druga faza –
specifikovanje trougaonih poligona
{1,2,3, 1,3,4, 3,4,5, ...}
Slika 19.c Deo 3D modela glave
prikazan bez zamišljene konture
glave.
Kako lepota 3D modela čoveka nije predmet ovoga rada, već razvoj artikularnog modela to se većina
3D objekata iz hijerarhijske organizacije aproksimira geometrijskim figurama.
Udovi ljudskog tela se mogu aproksimirati cilindrom ili kvadrom gde su isit
prikazani na slici 20. Cilindar ima lepši oblik od kvadra, ali zahteva
specifikovanje većeg broja konturnih tačaka i trougaonih poligona, za
razliku od kvadra.
Slika 20. 3D model
cilindra i kvadra.
Glava se može aproksimirati kockom ili sferom koje su prikazane
na slici 21. Međutim, sfera zahteva specifikovanje velikog broja
konturnih tačaka i trougaonih poligona, za razliku od kocke koja
zahteva specifikovanje istog broja konturnih tačaka i trougaonih
poligona kao i kvadar (kvadar je izdužena kocka).
Slika 21. 3D model kocke i sfere.
13
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
Na slici 22. prikazan je 3D model čoveka, gde je glava aproksimirana 3D
modelom kocke, dok su gornji i donji udovi aproksimirani 3D modelom
kvadra.
Slika 22. 3D model
čoveka modeliran sa
malim brojem detalja.
Na osnovu specifikacije skupa konturnih tačaka i specifikacije trougaonih poligona, kreira se niz trojki
temena koji se prosleđuju Direct3D – uređaju radi iscrtavanja 3D objekta na sceni. Niz trojki temena
se kreira na sledeći način:
{v1,v2,v3,v4,v5,v6,v7,v8, ...} – skupa konturnih tačaka.
Identifikacioni broj
konturne tačke v1.
{1,2,5, 2,3,5, 3,4,5, ...} – specifikacija trougaonih poligona.
Iz specifikacije trougaonih poligona se izdvaja grupa od tri
identifikaciona broja na osnovu kojih se pronalaze odgovarajuće
tačke iz skupa konturnih tačaka. Prva grupa od tri identifikaciona
broja je 1,2 i 5. Na osnovu istih iz skupa konturnih tačaka se
pronalaze tačke v1,v2 i v5 od kojih se kreira prva trojka temena
(v1,v2,v5). Zatim se izdvaja druga grupa od tri identifikaciona broja
2,3 i 5, gde se na osnovu istih iz skupa konturnih tačaka pronalaze
tačke v2,v3 i v5, od kojih se kreira druga trojka temena (v2,v3,v5).
Zatim se izdvaja treća grupa od tri identifikaciona broja 3,4 i 5, gde
se na osnovu istih iz skupa konturnih tačaka pronalaze tačke v3,v4 i
v5, od kojih se kreira treća trojka temena (v3,v4,v5) i tako redom.
Kreiranje trojki temena se završava kada se na osnovu poslednje
grupe iz specifikacije trougaonih poligona kreira poslednja trojka
temena. Kreirani niz trojki temena se skladišti u baferu temena koji
se prosleđuje Direct3D – uređaju radi iscrtavanja 3D objekta na
sceni. Trojke temena se kreiraju pre iscrtavanja 3D objekta, jer se
Slika 23. Sistem za CRTANJE
koordinate (x,y,z) konturnih tačaka menjaju usled generisanja
POLIGON MESH modela.
pokreta artikularnog modela. Sistem za kreiranje niza trojki temena
zajedno sa Direct3D – uređajem čini sistem za CRTANJE POLIGON MESH modela koji predstavlja
sastavni deo podsistema za CRTANJE 3D MODELA ČOVEKA u aplikaciji Artikularni Model ver 1.0,
pogledati sekciju 3.4. Blok Dijagram sistema za CRTANJE POLIGON MESH modela je prikazan na
slici 23. O Direct3D-uređaju i baferima temena pogledati sekciju 3.5.
Tačke za animaciju
Postoje tri tipa tačaka koje su neophodne za animiranje artikularnog modela. To su :
artikularne tačke ( ), tačke interakcije ( ) i referentna tačka ( ). Ovom prilikom se tačke samo
navode radi definisanja svih neophodnih parametara koje specifikacija elementa treba da sadrži
(pogledati kriterijume sekcije 2.1.3), dok o detaljima svake tačke sledi u sekcijama poglavlja dinamike.
( ) – Svaki element iz hijerarhijske organizacije sem korenskog elementa se rotira oko neke
artikularne tačke. Specifikacija koordinata (x,y,z) artikularnih tačaka je neophodna za animiranje
artikularnog modela jer se na osnovu istih kreiraju matrice translacija u i iz koordinatnog sistema, koje
su neophodne pri rotaciji elementa oko proizvoljne tačke (sekcija 2.2.4). O artikularnim tačkama u
sekciji 2.2.1.
( ) – Nekim elementima iz hijerarhijske organizacije se pored artikularne tačke, dodeljuje i tačka za
interakciju. Specifikacija koordinata (x,y,z) tačaka interakcije je neophodan element za animiranje
14
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
interakcije između ljudi, kao i interakcije između čoveka i predmeta koji su sastavni deo njegovog
radnog okruženja, pogledati sekciju 2.2.2. Tačke interakcije se koriste i za modelovanje predmeta sa
kojima čovek u interakciji, sekcija 2.1.5.
( ) – Pored artikularnih tačaka i tačaka za interakciju za potrebe animacije se specificira i referentna
tačka. Koordinate referentne tačke se moraju definisati radi kreiranja matrice translacija u i iz
koordinatnog početka radi potreba rotacije korenskog elementa, što ujedno uzrokuje rotaciju
celokupnog artikularnog modela. Referentna tačka ne pripada artikularnom modelu i specificira se
samo za korenski element, pogledati sekciju 2.2.3.
Spajanjem artikularnih tačaka i tačaka interakcije dobija se skeletni
model artikularnog modela u kojem svaki par susednih tačaka
spojenih linijom, predstavlja aproksimaciju duge (cevaste) kosti od
kojih su izgrađeni gornji i donji udovi biološkog čoveka. Primećuje se
da na slici 24. nije prikazana referentna tačka, jer ista ne pripada
artikularnom modelu. Skeletni model je aproksimacija biološkog
skeletnog sistema čoveka,[7].
Svaka od navedenih tačka se specificira sledećim podacima:
Slika 24.
(a). Skeletni model
artikularnog modela.
(b). Duga (cevasta) kost.
(c). Aproksimacije duge kosti.
- identifikator tipa tačke (1 – artikularna tačka, 4 – tačka interakcije, 3 –
referentna tačka; brojem 2 se specificira konturna tačka ),
- identifikacioni broj tačke (jer postoji više artikularnih tačaka i tačaka
interakcije, slika 24.)
- koordinate tačke (x,y,z) u R3LH koordinatnom sistemu.
Skeletni model artikularnog modela se iscrtava primitivama linije koje
se kreiraju na osnovu koordinata artikularnih tačaka i tačaka
interakcije. Sistemu za CRTANJE SKELETNOG MODELA koji je blok
dijagramom prikazan na slici 25. prosleđuje se niz koordinata
artikularnih tačaka i tačaka interakcije, na osnovu kojeg se kreiraju
parovi temena (vi,vj), gde svaki par temena predstavlja spoj između
susednih tačaka, slika 24. Kreirani uređeni parovi se skladište u baferu
temena koji se prosleđuje Direct3D – uređaju radi iscrtavanja skeletnog
modela na sceni. Sistem za CRTANJE SKELETNOG MODELA
predstavlja deo podsistema za CRTANJE 3D MODELA ČOVEKA u
aplikaciji Artikularni Model ver. 1.0, pogledati sekciju 3.4. O sceni
pogledati sekciju 2.1.1, o primitivama linije pogledati sekciju 2.1.2, dok
o Direct3D-uređaju i baferima temena pogledati sekciju 3.5.
Slika 25. Sistem za
CRTANJE SKELETNOG
MODELA artikularnog modela
čoveka.
Direktno subordinirani elementi
Nakon specifikacije tačaka za animaciju sledi specifikacija direktno subordiniranih elemenata.
Navođenjem imena direktno subordiniranog elementa, isti se ulančava u hijerarhijsku organizaciju
artikularnog modela, čime postaje njen sastavni deo. U delu direktno subordinirani elementi
specifikacije elementa navodi se onoliko imena koliko element ima direktno subordiniranih
elemenata. Recimo element trup ima tri direktno subordinirana elementa: desnu nadlakticu, levu
nadlakticu i glavu, zbog čega se nazivi istih elemenata navode u specifikaciji direktno subordiniranih
elemenata trupa. Nazivi podlaktice i šake se ne navode zato što isti nisu direktno već indirektno
subordinirani elementi trupa. Nazivi podlaktica se navode kao direktno subordinirani elementi
nadlaktica, dok se nazivi šaka navode kao direktno subordinirani elementi podlaktica. Pogledati
hijerarhijsku organizaciju artikularnog modela čoveka sa slike 14.
15
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
Parametar simetričnost
Simetričnost ljudskog tela je osobina koja se može iskoristiti
kao pomoć pri modeliranju artikularnog modela. Recimo, nakon
modelovanja desne nadlaktice ogledanjem iste u ogledalu se dobija
projekcija leve nadlaktice, slika 26.
Slika 26. Projekcija desne
nadlaktice u levu, pomoću
ogledala.
Ogledanje elemenata u ogledalu je
realizovano algoritmom preslikavanja po X osi.
Algoritam preslikavanja je ilustrovan na primeru
ogledanja kvadrata, gde se preslikavanje dobija
sledećim matematički aparatom:
x’1 = Xs + ( Xs – x1 )
y’1 = y1
z’1 = z1
(2.1.3.1)
XS – je koordinata X ose koja reprezentuje ogledalo.
Slika 27. Preslikavanje kvadrata.
Algoritam preslikavanja se koristi u trenucima inicijalizacije hijerarhijske organizacije artikularnog
modela u operativnoj memoriji računara, ukoliko je za neki element parametar simetričnosti
postavljen na logičnu vrednost true. Algoritmom se preslikavaju artikularne tačke, tačke za interakciju
i sve konturne tačke. Tačke se preslikavaju jednakostima (2.1.3.1), dok se specifikacija trougaonih
poligona za preslikani element samo kopira.
Na slici 28. prikazani su svi elementi iz hijerarhijske organizacije artikularnog modela koji su definisani
specifikacijom elementa. Svi elementi gornjih i donjih udova sa desne strane ljudskog tela imaju
podešen parametar simetričnosti na logičnu vrednost true, na osnovu čega će se u toku inicijalizacije
hijerarhijske organizacije artikularnog modela putem algoritma preslikavanja inicijalizovati gornji i donji
udovi leve strane.
Slika 28. Deo hijerarhijske organizacije artikularnog modela čoveka koji se
čuva na spoljašnjoj memoriji računarskog sistema.
Upotrebom simetričnosti je implementirano rešenje ovoga rada, gde je specifikacija elemenata sa
slike 28. definisana u funkcijama: InitDesnaSaka(), InitDesnaPodlaktica(), InitDesnaNadlaktica(),
InitDesnoStopalo(), InitDesnoPodkoleno(), InitDesnaButina(), InitGlava(), InitTrup() i InitRoot().
Parametrom simetričnosti je omogućena ušteda memorijskog prostora spoljašnje memorije
16
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
računarskog sistema jer se na istoj ne čuva kompletna specifikacija hijerarhijske organizacije već
samo jedan njen deo.
2.1.4.
PRIMERI ARTIKULARNIH MODELA
Specifikacijom elementa propisanom u sekciji 2.1.3.1. moguće je modelirati bilo koji
artikularni model a ne samo artikularni model čoveka. Radi toga prikazuju se primeri artikularnih
modela hobotnice i industrijskog robota, čime je dokazano da specifikacija elementa ispunjava
kriterijum (2) o kojem je bilo reči u sekciji 2.1.3.
Slika 29. Elementi
artikularnog modela
hobotnice.
Primer hobotnice je namerno odabran kako čitalac ovoga rada ne bi
pomislio s obzirom na skeletni modela artikularnog modela čoveka (slika
24. u sekciji 2.1.3.1), da je artikularnim modelima moguće modelirati
samo živa bića koja imaju skelet. Slika 29. prikazuje da su pipci
hobotnice podeljeni na delove gde svaki deo predstavlja jedan element
artikularnog modela. Hijerarhijska povezanost delova pipaka je
očigledna.
Elementi artikularnog modela industrijskog robota su prikazani na slici 30.
Slika 30. Elementi
artikularnog modela
industrijskog robota.
2.1.5.
3D MODEL PAPIRA
U jednom radnom okruženju kao što je kancelarija na radnom stolu se mogu uočiti različiti
predmeti kao što su olovke, sveske, digitron, razni papiri, telefon, kompjuter itd. Čovek često u toku
rada preuzima papire od svojih kolega ili ih premešta iz jedne fioke u drugu. Da bi se omogućilo
animiranje interakcije između čoveka i predmeta koji su neophodnih za njegov svakodnevni rad,
pomenuti predmeti se modeliraju na način da se njima može manipulisati. U ovom radu
implementirana je animacija preuzimanja papira sa šalterskog otvora, što je uslovilo modeliranje
papira na način koji je objašnjen u tekstu koji sledi.
Spajanjem dva trougaona poligona dobija se 3D model papira koji je prikazan na slici 31. Trougaoni
poligoni papira se mogu kreirati na osnovu koordinata (x,y,z) tačke v i vrednosti diferencijala dx,dy i
dz. Tačka v definiše poziciju u odnosu na koju se vrši kreiranje/iscrtavanje 3D modela papira i zove se
tačkom interakcije koja je na slici 31 reprezentovana crvenim trouglićem. O trougaonim poligonima
pogledati sekciju 2.1.2.
Sledi postupak kreiranja dva trougaonih poligona sa ciljem kreiranja 3D modela papira.
Koordinate tačaka v1,v2,v3 i v4 sa slike 31. se izračunavaju
na osnovu sledećih jednačina:
v1 ) x1 = x-dx,
v2 ) x2 = x,
v3 ) x3 = x-dx,
v4 ) x4 = x,
y1 = y+dy,
y2 = y+dy,
y3 = y-dy,
y4 = y-dy,
z1 = z+dz
z2 = z+dz
z3 = z-dz
z4 = z-dz
(2.1.5.1)
Slika 31. Izračunavanje koordinata tačaka
v1, v2, v3 i v4 na osnovu koordinata tačke
v i vrednosti diferencijala dx, dy i dz.
17
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
Nakon što se koordinate (x,y,z) tačaka v1,v2,v3 i v4 izračunaju na osnovu jednačina (2.1.5.1), sledi
kreiranje dve uređene trojke temena (v1,v2,v3) i (v2,v3,v4), koje se zatim prosleđuju Direct3D –
uređaju kako bi se 3D model papira iscrtao u odnosu na koordinate (x,y,z) tačke v.
Prethodno opisan postupak za kreiranje 3D modela papira
je realizovan u vidu sistema koji je prikazan blok dijagramom na
slici 32. Ulazni parametri koji se prosleđuju sistemu za
KREIRANJE/CRTANJE 3D MODELA PAPIRA su koordinate tačke
v i vrednosti diferencijala dx, dy i dz. Prosleđivanje ulaznih
parametara sistemu sa slike 32. vrši se komandom (2.1.5.2).
Rezultat sistema za KREIRANJE/CRTANJE 3D MODELA PAPIRA
nakon izvršenja komande (2.1.5.2) su dve uređene trojke temena
(v1,v2,v3) i (v2,v3,v4), koje se skladište u baferu temena kako bi
se prosledile Direct3D – uređaju radi iscrtavanja 3D modela papira
u odnosu na koordinata (x,y,z) tačke v, slika 31.
Slika 32. Sistem za
KREIRANJE/CRTANJE 3D
MODELA PAPIRA.
(2.1.5.2)
Sistem za KREIRANJE/CRTANJE 3D MODELA PAPIRA predstavlja sastavni deo podsistema za
CRTANJE 3D MODELA u aplikaciji Artikularni Model ver. 1.0. (sekcija 3.4) koji omogućava
jednostavno animiranje preuzimanja i nošenja papira, jer koordinate (x,y,z) tačke v određuju mesto
kreiranja/iscrtavanja papira u 3D prostoru. Recimo, ukoliko se nakon svakog generisanog pokreta
ruke, koordinate (x,y,z) tačke interakcije koja aproksimira prste na rukama, proslede sistemu za
KREIRANJE/CRTANJE 3D MODELA PAPIRA komandom (2.1.5.2), isti sistem će 3D model papira
iscrtati u odnosu na šaku čime se postiže animiranje držanja tj. nošenja papira u ruci (videti sekciju
2.2.2). O Direct3D-uređaju i baferima temena pogledati sekciju 3.5.
2.2.
DINAMIKA
Sistem organa za kretanje biološkog čoveka čine kosti i skeletni mišići. Kretanje i obavljanje
najraznovrsnijih radnji zavisi od usklađenosti ova dva organska sistema. Oni čine funkcionalnu celinu
jer se nalaze pod kontrolom nervnog sistema.
Robotika već duže vreme nastoji da svojim znanjima napravi mehanizam koji će biti nalik čoveku i po
izgledu i po ponašanju (humanoidni automat). Jedan od problema sa kojim se robotičari susreću u
takvim konstrukcijama, jeste pronalaženje adekvatne elektro/mehaničke zamene nervnim
ćelijama/mišićima. Mišići su zamenjeni servomotorima a nervni sistem primitivnim neuralnim mrežama
(u odnosu na ljudski nervni sistem) i digitalnim signal procesorima, gde se putem istih kontrolišu
servomotori čime se generiše kretanje humanoidnog automata.
I biološki i elektromehanički sistemi kretanja imaju prednosti u odnosu na softverski sistem za
animiranje artikularnog modela. Prednost biološkog i elektromehaničkog sistema se ogleda u tome
što između elemenata od kojih su sačinjeni postoji fizička veza. Kod biološkog sistema fizička veza je
zglob koji omogućuje da se pomeranjem nadlaktice ujedno pomera i podlaktica i šaka. Kod
elektromehaničkog sistema fizičke veze su ostvarene putem servomotora. Kod softverskog sistema,
fizička veza između elemenata ne postoji, jer elementi iz hijerarhijske organizacije u operativnoj
memoriji računara, predstavljaju samo podatke koji su definisani putem specifikacije elementa (sekcija
2.1.3.1). Sistem kretanja artikularnog modela se u 3D animaciji zasniva na određenim algoritmima tj.
programskim rešenjima. Algoritam kretanja u ovom radu je implementiran u vidu animacionog
kontrolera i setova instrukcija – sekcija 2.2.5.
18
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
2.2.1.
ARTIKULARNE TAČKE
Artikularni modeli su pre svega namenjeni karakternoj animaciji mada se mehanizam
animiranja može primeniti na bilo koje artikularne modele, pogledati sekciju 2.1.4. Posmatranjem
čoveka koji hoda može se zapaziti da se ni u jednom trenutku vremena odnosi između delova tela
(trupa, nadlaktica, nadkolena itd.) ne opisuju translacijom već rotacijom. Npr. ne postoji translacija
nadlaktice u odnosu na podlakticu čoveka koji pomera ruku. Znači da je za animiranje artikularnog
modela čoveka potrebno realizovati sistem rotacije koji je baziran na geometrijskim transformacijama,
sekcija 2.2.4. Pored toga neophodni elementi za rotaciju svih elemenata hijerarhijske organizacije
sem korenskog elementa je skup artikularnih tačaka. Sledi njihova definicija.
Kako je hijerarhijska organizacija artikularnog modela stablo (sekcija
2.1.3), to rotacija nekog elementa iz stabla uzrokuje propagaciju
rotacije kroz sve elemente koji čine podstablo rotiranog elementa.
Recimo, rotacija desne nadlaktice oko tačke v1 uzrokuje i rotaciju
desne podlaktice i desne šake oko iste tačke, jer desna podlaktica i
desna šaka pripadaju podstablu desne nadlaktice, slika 33.a.
Rotacija desne podlaktice oko tačke v2 uzrokuje i rotaciju desne šake
oko iste tačke, jer desna šaka pripada podstablu desne podlaktice,
slika 33.b. Rotacija desne šake oko tačke v3 ne uzrokuje rotaciju ni
jednog elementa iz hijerarhijske organizacije, jer desna šaka nema
subordiniranih elemenata tj. nema podstablo, slika 33.c.
Slika 33. Rotacija elemenata
oko artikularnih tačaka.
Tačkama v1,v2 i v3 definisana su ključna mesta za animiranje pokreta desne ruke. Tačkom v1
definisana je pozicija u odnosu na koju se vrši pokretanje cele ruke u zglobu ramena. Tačkom v2
definisana je pozicija u odnosu na koju se vrši savijanje ruke u zglobu lakta, dok je tačkom v3
definisana pozicija u odnosu na koju se vrši savijanje šake u zglobu šake.
Na slici 34. prikazan je 3D model čoveka sa svim ključnim
tačkama koje su neophodne za animiranje artikularnog modela čoveka.
Ključne tačke su reprezentovane sivim kružićem ( ) i na njih pokazuju
strelice koje označavaju mesto u odnosu na koje se rotira odgovarajući
element i svi elementi iz njegovog podstabla. Recimo, strelica koja
pokazuje na tačku v2 označava poziciju u odnosu na koju se rotira
element desna podlaktica ali i element desna šaka jer ista pripada
podstablu desne podlaktice.
Slika 34. Artikularne tačke i
tačke interakcije.
Kako se ključne tačke v1, ... , v7 i ostale, nalaze na zglobnim
mestima, to se iste nazivaju artikularnim tačkama, jer reč artikularni
potiče od latinske reči articularis, što znači zglobni. Zbog toga,
artikularni model pored toga što predstavlja hijerarhijsku organizaciju,
predstavlja i zglobni mehanizam, gde artikularne tačke definišu ključne
pozicije u odnosu na koje se rotiraju elementi artikularnog modela
čoveka. Tačka v7 je specifična jer ujedno definiše artikularnu tačku u
odnosu na koju se rotira trup artikularnog modela i ujedno predstavlja
korenski element – pogledati sekciju 2.2.3.
Specifikacija artikularne tačke za svaki element iz hijerarhijske organizacije je neophodna za
animiranje artikularnog modela kako bi animacioni kontroler odredio koordinate (x,y,z) u odnosu na
koje je potrebno rotirati željeni element kao i elemente koji pripadaju njegovom podstablu. Za desnu
nadlakticu specifikuje se artikularna tačka v1, za desnu podlakticu tačka v2, dok za desnu šaku tačka
v3 itd. Specifikacija artikularnih tačaka svakog elementa iz hijerarhijske organizacije se vrši u delu
tačke za animaciju specifikacije elementa (sekcija 2.1.3.1).
Na slici 34. su crvenim trouglićima (
sledi.
) prikazane tačke za interakciju o kojima govori sekcija koja
19
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
2.2.2
TAČKE ZA INTERAKCIJU
Prilikom uzimanja nekog predmeta sa kancelarijskog stola, pritiskanja tastera na tastaturi,
preuzimanja papira ili rukovanja sa drugim čovekom, čovek koristi prste na svojim rukama. Prsti na
rukama su osnovni deo ljudskog tela koji čoveku omogućuju interakciju sa životnom okolinom. Radi
animiranja interakcije, potrebno je na odgovarajući način modelirati prste, kao i predmete sa kojima je
čovek u interakciji. Prsti i predmeti se modeliraju tačkom interakcije koja je na slici 35. prikazana
crvenim trouglićem. Sledi primer koji oslikava proces na osnovu kojeg se animira prihvatanje i nošenje
papira. Isti primer implementiran je u ovom radu.
Na slici 35. crvenim trouglićima prikazane su
tačke interakcije v1 i v2. Tačka v1 aproksimira
prste, dok tačka v2 definiše poziciju u odnosu na
koju se iscrtava 3D model papira u 3D prostoru.
Proces animiranja interakcije započinje u
trenutku kada se usled generisanja pokreta ruke
u pravcu papira, tačka interakcije v1 nađe u
zamišljenoj okolini tačke v2, koja je isprekidanim
linijama prikazana na slici 35. U tom trenutku,
sistemu za KREIRANJE/CRTANJE 3D MODELA
Slika 35. Proces animiranja interakcije između čoveka
PAPIRA komandom (2.1.5.2) prosleđuju se
i papira.
koordinate (x,y,z) tačke v1 kao i vrednosti
diferencijala dx, dy i dz, kako bi se 3D model papira iscrtao u odnosu na šaku i time stekao utisak da
je papir prihvaćen prstima ruke, slika 35.a. Nakon prihvatanja papira, usled svakog narednog
generisanog pokreta ruke, sistemu za KREIRANJE/CRTANJE 3D MODELA PAPIRA komandom
(2.1.5.2) se prosleđuju nove koordinate tačke v1 ( redom v1’ i v1’’) kao i odgovarajuće vrednosti
diferencijala dx, dy i dz, kako bi se 3D model papira sinhronizovano iscrtavao u odnosu na šaku i na
taj način stekao utisak da čovek nosi papir u ruci, slike 35.b i 35.c. Generisanje pokreta ruke se vrši
setovima instrukcija (2.2.5.1) koje se prosleđuju ANIMACIONOM KONTROLERU na izvršavanje. O
sistemu za KREIRANJE/CRTANJE 3D MODELA PAPIRA se može pročitati u sekciji 2.1.5, dok se o
ANIMACIONOM KONTROLERU može pročitati u sekciji 2.2.5.
Iako se tačkom interakcije modeliraju prsti i predmeti, ista se može definisati za glavu i stopala.
Ukoliko je tačka interakcije pridružena glavi to se ista može upotrebiti za animiranje stavljanja i
nošenja šešira. Ukoliko se tačke interakcije pridruže stopalima moguće je animirati šutanje lopte ili
animirati bilo koju sličnu situaciju. Model šešira i lopte mora biti modeliran načinom koji je prikazan u
sekciji 2.1.5 (model papira). U implementiranom rešenju tačke interakcije su definisane za desnu i
levu šaku, desno i levo stopalo i glavu, što su ujedno elementi iz hijerarhijske organizacije artikularnog
modela koji nemaju subordiniranih elemenata. Pomoću tačaka interakcije moguće je simulirati i
rukovanje između dva čoveka.
Na slici 35. sivim kružićima ( ) su prikazane artikularne tačke o kojima se može pročitati u sekciji
2.2.1.
2.2.3.
KORENSKI ELEMENT I REFERENTNA TAČKA
Svi elementi iz hijerarhijske organizacije sem korenskog imaju svoj superordinirani (nadređeni)
element. Zbog toga se korenski element nalazi na vrhu hijerarhijske organizacije i predstavlja
superordinirani element svim ostalim elementima. Korenski element se u mnogome razlikuje od
ostalih elemenata jer predstavlja samo artikularnu tačku koja objedinjuje sva podstabla u hijerarhijsko
stablo artikularnog modela (pogledati slike 13.b i 14. sekcije 2.1.3). Kako je korenski element
superordinirani element svim ostalim, to pomeranje artikularne tačke korenskog elementa uzrokuje
pomeranje celokupnog artikularnog modela. Jedan od velikih problema u realizaciji sistema za
animiranje je algoritam za generisanje pokreta ustajanja artikularnog modela čoveka sa stolice
(zadatkom diplomskog rada je zahtevano da artikularni model sedi na stolici). Posmatrajući stvarni
svet zapaža se da čovek ustaje sa stolice snagom svojih butnih mišića pri čemu se obe butine
(nadkolena) rotiraju u odnosu na kolena podižući pri tome gornju polovinu tela, u šta spada trup, obe
20
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
ruke i glava. Ovde nastaje problem zbog toga što nadkolena nisu superordinirani elementi trupa, kao
ni svih ostalih elemenata koji pripadaju gornjoj polovini tela. Zbog toga, rotacija nadkolena ne uzrokuje
i rotaciju trupa a samim tim i rotaciju ruku i glave, već uzrokuje rotaciju podkolena i stopala, jer se
rotacija nekog elementa propagira samo kroz podstablo datog elementa. Hijerarhijske organizacije
prikazane na slikama 13.b i 14. sekcije 2.1.3. jasno pokazuju da se rotacija nadkolena ni u jednom
slučaju ne može propagira kroz trup i njegovo podstablo, zato što trup nije subordinirani element
nadkolena i zato što su to dva različita podstabla artikularnog modela. Međutim, kako je cilj razvoja
artikularnog modela stvoriti model koji će omogućiti generisanje raznolikih pokreta, to se izloženi
problem mora rešiti na neki od načina. Moguće rešenje je da se hijerarhijska organizacija artikularnog
modela odgovarajućim programskim rešenjima učini inverznom, tako da se rotacija nadkolena
propagira kroz trup a samim tim i kroz sve ostale elemente gornje polovine tela. Ovako rešenje ima
nedostatak zbog toga što se rotacija trupa propagira kroz korenski element hijerarhijske organizacije
zbog čega isti više nije superordinirani element svim ostalim, te ovakav pristup u generisanju pokreta
ustajanja krši osnovne definicije korenskog elementa i artikularnog modela u opšte.
Drugo moguće rešenje za generisanje pokreta ustajanja je uvođenje referentne tačke ( ) oko koje se
vrši rotacija korenskog elementa (ujedno se rotira i ceo artikularni model). Referentna tačka se
postavlja na odgovarajuću poziciju u R3LH koordinatnom sistemu, zbog čega ne predstavlja sastavni
deo artikularnog modela čoveka, slika 36.a. O R3LH koordinatnom sistemu pogledati sekciju 2.1.1.
Postavljanje referentne tačke između artikularnih tačaka kolena kroz koje na slici 36.a prolazi crvena
linija, eliminišu potrebu za bilo kakvim inverzijama hijerarhijske organizacije pri čemu ni korenski
element ne gubi svoj superordinirani položaj nad svim ostalim elementima. Međutim kako rotacija
korenskog elementa oko referentne tačke za ugao θ u smeru crvene strelice prikazane na slici 36.a,
uzrokuje i rotaciju celokupnog artikularnog modela, rotiraju se i podkolena i stopala što je prikazano
na slici 36.b - stopala ne dodiruju površinu zemlje. Ovakva situacija nije dobra i predstavlja dodatni
problem jer ustajanje čoveka zahteva položaje stopala koja su na površini zemlje, slika 36.c. Izloženi
problem se može rešiti tako što se rotacija podkolena i stopala zanemaruje u slučaju rotacije
korenskog elementa. Zanemarivanje rotacije nekog elementa iz hijerarhijske organizacije se radi uz
pomoć parametra Zanemarivanje rotacije koji je propisan specifikacijom elementa u sekciji 2.1.3.1.
Elemente za koje je parametar zanemarivanja rotacije postavljen na vrednost true, propagacioni
algoritam neće rotirati samo u slučaju rotacije korenskog elementa ( pogledati propagacioni algoritam
– sekcija 2.2.5). Za elemente podkolena i stopala parametar zanemarivanja rotacije je postavljen na
vrednost true čime se iste neće rotirati u slučaju rotacije korenskog elementa. Parametrom
zanemarivanja rotacije obezbeđen je mehanizam za animaciju ustajanja čoveka sa stolice. I ovo
rešenje poseduje nedostatke zbog zanemarivanja rotacije pojedinih elemenata iz hijerarhijske
organizacije u slučaju rotacije korenskog elementa, jer se rotacija treba propagirati kroz sve elemente
hijerarhijskog stabla. Međutim ovo rešenje je mnogo naprednije od prvog jer ne remeti superordinirani
položaj koji uživa korenski element nad svim ostalim elementima iz hijerarhijske organizacije. Ali kao
što je rečeno, generisanje pokreta ustajanja artikularnog modela čoveka sa stolice je izuzetno težak
problem jer nadkolena nemaju takav položaj u hijerarhijskoj organizaciji usled čije rotacije se ujedno
može rotirati i gornja polovina tela. U ovom radu je implementiran sistem za generisanje pokreta
ustajanja na bazi referentne tačke, jer su istim postignuti dobri rezultati. Posmatranjem animacije
ustajanja artikularnog modela čoveka sa stolice na bazi referentne tačke, posmatrač neće uvideti
nikakve anomalije u vidu ne prirodnosti pokreta, tako da je referentnom tačkom postignut dobar
rezultat, slika 36.c.
Slika 36. Referentna tačka u R3LH i zanemarivanje rotacije podkolena i stopala.
21
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
Prilikom opisivanja korenskog elementa specifikacijom elemenata koja je propisana u sekciji 2.1.3.1.
specifikuju se podaci za sledeće delove: naziv elementa, tačke za animaciju, direktno subordinirani
elementi i osnovni podaci.
Specifikuje se naziv korenskog elementa.
Polygon mesh se ne specificira jer korenski
element predstavlja samo artikularnu tačku.
Specificiraju se koordinate (x,y,z) za artikularnu i referentnu tačku.
Navode se imena svih elemenata koji su direktno subordinirani korenskom
elementu – Trup, DesnoNadkoleno i LevoNadkoleno.
Postavljanje ovih parametar na vrednost true,
nema smisla za korenski element.
Navodi se za svaki elment pa i za korenski.
2.2.4.
GEOMETRIJSKE TRANSFORMACIJE
Geometrijske transformacije nad elementima hijerarhijske organizacije artikularnog modela
mogu se prikazati u matričnom obliku na sažet i jednostavan način. Elementi artikularnog modela
uobičajeno sadrže velik broj konturnih tačaka pa i transformacije sadrže velik broj istovrsnih
aritmetičkih operacija. Transformacija nad elementima artikularnog modela obavlja se tako da se ista
transformacija primeni na sve njegove tačke koje su definisane specifikacijom elementa, koja je
propisana u sekciji 2.1.3.1.
Ako je opšta transformacija homogene tačke u 3D prostoru definisana matricom M4x4 tada se njena
transformacija može opisati na sledeći način:
1. homogena predstava tačke (x,y,z) ∈ R3LH koordinatnom sistemu u homogenom prostoru je
homogena tačka (x,y,z,w) ,
2. koordinate transformisane homogene tačke [x’ y’ z’ w’] određene su sledećom jednačinom
[x’ y’ z’ w’] = [x y z w] M4x4, i
3. za koordinatu w odabira se proizvoljna vrednost, najčešća vrednost je 1.
Opšti oblik matrice transformacije M4x4 u slučaju da je w=1 je sledeći:
⎡ A1
⎢ B1
M4x4 = ⎢
⎢ C1
⎢
⎣ D1
A2 A3
B 2 B3
C 2 C3
D 2 D3
0⎤
0⎥⎥
0⎥
⎥
1⎦
(2.2.4.1)
Rezultat množenja vektora vrste [x y z 1] i matrice transformacije (2.2.4.1), je vektor vrste [x’ y’ z’ 1]
koji je određen sistemom jednačina (2.2.4.2).
x’ = A1 x + B1 y +
y’
= A2 x + B 2 y +
z’ =
C1 z + D1
C 2 z + D2
(2.2.4.2)
A3 x + B3 y + C 3 z + D3
1 = 0x1 + 0y1 + 0z1 + 1
22
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
Sistem jednačina (2.2.4.2) je sistem sa homogenim koordinatama i predstavlja uniformni (jedinstveni)
matematički aparat za računanje svih transformacija, gde se svaka transformacija predstavlja
adekvatnom zamenom parametara A1 ,..., D3 tj. adekvatnom matricom M4x4. Uniformni matematički
aparat je realizovan u vidu metode MultiplyVM klase TTransfomacije (sekcija 3.6.4), koja se poziva u
for petlji onoliko puta, koliko tačaka je specifikovano za jedan element hijerarhijske organizacije:
for ( int i=1; i <= BrojTacakaElementa; i++ )
[x’i y’i z’i 1] = MultiplyVM ( M4x4, [xi yi zi 1] ) ;
Više o homogenim koordinatama u literaturi,[4]. O R3LH koordinatnom sistemu pogledati sekciju 2.1.1.
Transformacija translacije:
Ukoliko se za parametre A1 ,...,
D3 jednačine (2.2.4.2) odaberu sledeće vrednosti:
A1 = 1,
B1 = 0,
C1 = 0,
D1 =Tx,
A2 = 0,
B 2 = 1,
C 2 = 0,
D 2 =Ty,
A3 = 0
B3 = 0
C3 = 1
D3 = Tz
(2.2.4.3)
dobija se sistem jednačina (2.2.4.4) za translaciju tačke V u R3LH koordinatnom sistemu za vrednost
pomeraja Tx, Ty i Tz.
x’ = x + Tx
(2.2.4.4)
y’ = y + Ty
z’ = z + Tz
1=1
Nakon zamene parametara (2.2.4.3) u matricu (2.2.4.1) dobija se matrica translacije (2.2.4.5) :
⎡1
⎢0
T= ⎢
⎢0
⎢
⎢⎣Tx
0
0
1
0
0
1
Ty
Tz
0⎤
0⎥⎥
0⎥
⎥
1⎥⎦
(2.2.4.5)
Primer:
Translacija trougaonog poligona za vrednosti priraštaja Tx = 1.5, Ty = 1 i Tz = 0, slika 37.
Koordinate tačaka v1, v2 i v3 pre transformacije translacije su sledeće:
v1=(1,1,0), v2=(2,1,0) i v3=(1,2,0).
Nakon zamene zadatih priraštaja Tx, Ty i Tz u matricu
translacije (2.2.4.5) dobija se sledeća matrica translacije:
⎡1
⎢0
T1 = ⎢
⎢0
⎢
⎣1.5
0
1
0
1
0
0
1
0
0⎤
0⎥⎥
0⎥
⎥
1⎦
Pre translacije tačaka v1, v2 i v3, potrebno je iste konvertovati
u homogene koordinate [x y z 1] nakon čega sledi
transformacija tačaka sledećom petljom:
for ( int i=1; i <= 3; i++ )
[x’i y’i z’i 1] = MultiplyVM (T1, [xi yi zi 1] );
Slika 37. Translacija trougaonog polygona u
3
R LH koordinatnom sistemu (left-handed).
23
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
Nakon završetka for petlje, sledi konvertovanje svih tačaka iz homogenih koordinata [x’ y’ z’ 1] u
koordinate (x',y',z') ∈ R3LH.
Koordinate tačaka v1, v2 i v3 posle transformacije translacije su sledeće:
v'1=(2.5,2,0), v'2=(3.5,2,0) i v'3=(2.5,3,0).
Transformacija rotacije oko X ose:
Ukoliko se za parametre A1 ,...,
D3 jednačina (2.2.4.2) odaberu sledeće vrednosti:
A1 = 1,
B1 = 0,
C1 = 0,
D1 = 0,
A2 = 0,
B 2 = cos θ ,
C 2 = -sin θ ,
D 2 =0,
A3 = 0
B3 = sin θ
C 3 = cos θ
D3 = 0
(2.2.4.6)
dobija se sistem jednačina (2.2.4.7) za rotaciju tačke V u R3LH koordinatnom sistemu oko ose X za
ugao θ .
x’ = x
y’ = y cos θ - z sin θ
z’ = y sin θ + z cos θ
1=1
(2.2.4.7)
Nakon zamene parametara (2.2.4.6) u matricu (2.2.4.1) dobija se matrica rotacije (2.2.4.8) oko ose X
za ugao θ :
0
⎡1
⎢0 cos θ
RX = ⎢
⎢0 − sin θ
⎢
0
⎣0
0⎤
0⎥⎥
0⎥
⎥
1⎦
0
sin θ
cos θ
0
Primer:
Transformacija rotacija trougaonog poligona za ugao
θ
=
π
2
(2.2.4.8)
, slika
38.
Koordinate tačaka v1, v2 i v3 pre transformacije rotacije su sledeće:
v1=(1,1,0), v2=(2,1,0) i v3=(1,2,0).
Nakon uvrštavanja izračunatih vrednosti za cos
π
2
=0 i sin
π
2
=1 u
matricu (2.2.4.8) dobija se sledeća matrica rotacije:
⎡1 0
⎢0 0
RX1 = ⎢
⎢0 − 1
⎢
⎣0 0
0
1
0
0
0⎤
0⎥⎥
0⎥
⎥
1⎦
Pre rotacije tačaka v1, v2 i v3, potrebno je iste konvertovati u
homogene koordinate [x y z 1] nakon čega sledi transformacija
tačaka sledećom petljom:
for ( int i=1; i <= 3; i++ )
[x’i y’i z’i 1] = MultiplyVM (RX1, [xi yi zi 1] );
Slika 38. Rotacija trougaonog polygona u
3
R LH koordinatnom sistemu (left-handed)
oko ose X za ugao θ = π /2.
24
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
Nakon završetka for petlje, sledi konvertovanje svih tačaka iz homogenih koordinata [x’ y’ z’ 1] u
koordinate (x',y',z') ∈ R3LH. Koordinate tačaka v1, v2 i v3 posle transformacije rotacije su sledeće:
v'1=(1,0,-1), v'2=(2,0,-1) i v'3=(1,0,-2).
Pored matrice rotacije oko X ose postoje i matrice rotacije oko Y i Z ose. Postupak rotacije oko Y i Z
ose je identičan postupku rotacije oko X ose, jedina razlika je u matricama rotacije:
⎡cos θ
⎢ 0
RY = ⎢
⎢ sin θ
⎢
⎣ 0
0 − sin θ
1
0
0 cos θ
0
0
0⎤
0⎥⎥
RZ =
0⎥
⎥
1⎦
⎡ cos θ
⎢− sin θ
⎢
⎢ 0
⎢
⎣ 0
sin θ
cos θ
0
0
0
0
1
0
0⎤
0⎥⎥
0⎥
⎥
1⎦
(2.2.4.9)
Kompozicija transformacija:
Matricama (2.2.4.8) i (2.2.4.9) moguće je rotirati 3D modele jedino oko osa koordinatnog
sistema. Rotacija 3D modela oko proizvoljne tačke se ostvaruje kompozicijom matrica transformacija
(2.2.4.5), (2.2.4.8) i (2.2.4.9). Postupak rotacije trougaonog poligona oko proizvoljne tačke V u odnosu
na osu X za ugao θ prikazan je na slici 39. i sastavljen je iz tri faze. Postupak rotacije trougaonog
poligona oko proizvoljne tačke V u odnosu na Y i Z ose je identičan postupku rotacije u odnosu na X
osu, pri čemu je jedina razlika u korišćenim matricama rotacije (2.2.4.9).
DRUGA FAZA
PRVA
TREĆA FAZA
Sliaka 39. Rotacija trougaonog polygona oko proizvoljne tačke V.
Prva faza
Trougaoni poligon se translira u koordinatni početak matricom translacije (2.2.4.5) tako što se za Tx,
Ty i Tz uzimaju sledeće vrednosti: Tx = - x, Ty = -y i Tz = - z, gde su (x,y,z) koordinate tačke V. Matrica
translacije u koordinatni početak je označena sa TUKP. Translacijom trougaonog poligona u
koordinatni početak tačka v dobija koordinate (0,0,0).
⎡ 1
0⎤
0⎥⎥
⎢ 0
0
1 0⎥
⎢
⎥
⎣− x − y − z 1⎦
TUKP = ⎢ 0
⎢
0
0
1
0
Druga faza
Trougaoni poligon se rotira oko ose X za ugao θ matricom rotacije (2.2.4.8) tako što se za istu
prethodno izračunavaju vrednosti sinusa i kosinusa.
⎡1
RX = ⎢0
0
cosθ
⎢
⎢0 − sin θ
⎢
0
⎣0
0
sin θ
cosθ
0
0⎤
0⎥⎥
0⎥
⎥
1⎦
Treća faza
Trougaoni poligon se nakon rotacije oko X ose translira iz koordinatnog početka tako da tačka v
dobije koordinate (x,y,z) koje je imala pre prve faze. Translacija iz koordinatnog početka se vrši na
osnovu matrice translacije (2.2.4.5) tako što se za Tx, Ty i Tz uzimaju sledeće vrednosti: Tx = x, Ty = y i
25
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
Tz = z, gde su (x,y,z) koordinate tačke v. Matrica translacije iz koordinatnog početka je označena sa
TIKP.
⎡1 0 0 0⎤
⎥
⎢
TIKP = ⎢0 1 0 0⎥
⎢ 0 0 1 0⎥
⎥
⎢
⎣ x y z 1⎦
Sve tri prethodne matrice se mogu pomnožiti čime se dobija jedna matrica koja obuhvata sve tri faze.
To zahteva pisanje mehanizma za množenje matrica dimenzija 4x4 što ovim radom nije urađeno. U
ovom radu rotacija elemenata hijerarhijske organizacije se vrši u zasebnim fazama kao što je
ilustrovano na primeru rotacije trougaonog poligona. Proizvoljne tačke V oko kojih se rotiraju elementi
hijerarhijske organizacije su artikularne tačke (pogledati sekciju 2.2.1.) i referentan tačaka (pogledati
sekciju 2.2.3).
Sistem za ROTACIJU oko proizvoljne tačke predstavlja podsistem izvršnog dela arhitekture
animacionog kontrolera. Sledi deo koda koji oslikava rad podsistema animacionog kontrolera za
ROTACIJU elemenata oko proizvoljne tačke:
// Prva faza - translacija elementa u koordinatni početak matricom TUKP
for ( int i=1; i <= BrojTacakaElementa; i++ )
[x’i y’i z’i 1] = MultiplyVM (TUKP, [xi yi zi 1] );
// Druga faza - rotacija elementa oko X ose matricom RX
for ( int i=1; i <= BrojTacakaElementa; i++ )
[x’i y’i z’i 1] = MultiplyVM (RX, [xi yi zi 1] );
// Treća faza - translacija elementa iz koordinatnog početka matricom TIKP
for ( int i=1; i <= BrojTacakaElementa; i++ )
[x’i y’i z’i 1] = MultiplyVM (TIKP, [xi yi zi 1] );
Iz gornjeg koda se primećuje da je za sve tri faze rotacije oko proizvoljne tačke korišćen uniformni
matematički aparat MultiplyVM kome se pored homogenih koordinata svake tačke prosleđuje i
odgovarajuća matrica. Sve tri matrice TUKP RX i TIKP su prethodno kreirane podsistemom animacionog
kontrolera koji se zove KREIRANJE GEOMETRIJSKIH TRANSFORMACIJA.
O podsistemima za KREIRANJE GEOMETRIJSKIH TRANSFORMACIJA i ROTACIJU elemenata
može se pročitati u sekciji koja sledi.
2.2.5.
ANIMACIONI KONTROLER I SET INSTRUKCIJA
Animacioni kontroler je mehanizam za animiranje artikularnog modela. Rad animacionog
kontrolera se bazira na upotrebi geometrijskih transformacija i na propagacionom algoritmu koji
obezbeđuje propagaciju rotacije kroz elemente iz podstabla.
Arhitektura animacionog kontrolera sa slike 40. se deli na tri dela:
-
instrukciju,
prihvatni deo, i
izvršni deo.
Slika 40. Arhitektura animacionog
kontrolera.
Instrukcija predstavlja ulazni parametar animacionog kontrolera na osnovu koje se zahteva rotacija
odgovarajućeg elementa iz hijerarhijske organizacije, sa ciljem generisanja pokreta artikularnog
modela.
26
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
U prihvatnom delu animacionog kontrolera vrši se pronalaženje zahtevanog elementa iz hijerarhijske
organizacije i kreiraju se sve neophodne matrice geometrijskih transformacija. U prihvatni deo
spadaju podsistem za PRONALAŽENJE ELEMENTA i podsistem za KREIRANJE GEOMETRIJSKIH
TRANSFORMACIJA.
U izvršnom delu vrši se rotacija elementa zahtevanog instrukcijom uz propagaciju rotacije kroz sve
elemente iz podstabla zahtevanog elementa. U izvršni deo spadaju sledeći podsistemi: ROTACIJA i
PROPAGACIJA ROTACIJE.
O hijerarhijskoj organizaciji tj. o artikularnom modelu pogledati sekciju 2.1.3. O geometrijskim
transformacijama pogledati sekciju 2.2.4.
Instrukcija
NAZIV ELEMENTA, OSA ROTACIJE, UGAO I KOREN su delovi instrukcije koja se
prosleđuje animacionom kontroleru kao ulazni parametar i predstavlja zahtev za rotaciju određenog
elementa iz hijerarhijske organizacije sa ciljem generisanja pokreta artikularnog modela.
NAZIV ELEMENTA - određuje element koji je potrebno rotirati iz hijerarhijske organizacije artikularnog
modela.
OSA ROTACIJE – određuje jednu od tri matrice rotacije za rotiranje zahtevanog elementa : matricu
rotacije oko X, Y ili Z ose.
UGAO - definiše ugao za koji se element rotira u odnosu na željenu tačku (ugao je zadat u
radijanima).
KOREN – logička vrednost koja definiše da li se rotira korenski element ili ne (true – rotira se korenski
element, false – ne rotira se korenski element). Parametar KOREN je neophodan element instrukcije
(2.2.5.1) kako bi se animacionom kontroleru naznačilo da je potrebno rotirati korenski element, jer se
isti razlikuje od ostalih elemenata iz hijerarhijske organizacije o čemu je bilo reči u sekciji 2.2.3. (
Korenski element se rotira oko referentne tačke dok se ostali elementi iz hijerarhijske organizacije
rotiraju oko artikularnih tačaka.). Ako se parametar KOREN eliminiše iz instrukcije (2.2.5.1) onda je
potrebno ograničiti naziv korenskog elementa, recimo na naziv “Koren” kako bi se istim animacionom
kontroleru naznačila rotacija korenskog elementa. Ograničavanje naziva korenskog elementa
narušava konvenciju davanja naziva elementima koja je definisan specifikacijom elementa u sekciji
2.2.3. i ograničava animacioni kontroler na mogućnost kontrolisanja više od jednog artikularnog
modela na sceni (jer svaki artikularni model bi za korenski element imao isti naziv čime se javlja
kolizija u nazivu korenskih elementa). U tom slučaju, ukoliko je na sceni potrebno kontrolisati više
artikularnih modela za svaki od njih bi morao da se koristi zaseban animacioni kontroler što za sobom
nosi mnogo veći problem, a to je način raspoređivanja rada animacionih kontrolera.
Na slici 41 prikazan je format instrukcije. O sceni pogledati sekciju 2.1.1.
(2.2.5.1)
Slika 41. Instrukcija animacionog kontrolera.
Prihvatni deo
Prihvatni deo animacionog kontrolera se sastoji iz dva podsistema : podsistem za
PRONALAŽENJE ELEMENTA i podsistem za KREIRANJE GEOMETRIJSKIH TRANSFORMACIJA.
Parametar NAZIV ELEMENTA instrukcije (2.2.5.1) prosleđuje se podsistemu animacionog kontrolera
koji se naziva PRONALAŽENJE ELEMENTA. Podsistem za PRONALAŽENJE ELEMENTA je
zadužen za pretraživanje hijerarhijskog stabla artikularnog modela sa ciljem pronalaženja specifikacije
27
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
(specifikacija elementa propisana u sekciji 2.1.3.1) elementa koji je zahtevan instrukcijom. Ukoliko
element ne postoji u hijerarhijskoj organizaciji, podsistem za PRONALAŽENJE ELEMENTA generiše
exception – element ne postoji u hijerarhijskoj organizaciji artikularnog modela, slika 42. U protivnom
podsistem za PRONALAŽENJE ELEMENTA prosleđuje specifikaciju pronađenog elementa
podsistemu za KREIRANJE GEOMETRIJSKIH TRANSFORMACIJA.
Nakon pronalaženja odgovarajućeg elementa sledi
provera logičke vrednosti ulaznog parametra KOREN.
Parametar KOREN je indikator na osnovu kojeg
animacioni kontroler odlučuje da li se podsistemu za
KREIRANJE GEOMETRIJSKIH TRANSFORMACIJA
prosleđuju koordinate (x,y,z) referentne ili artikularne
tačke. Ako je ulazni parametar KOREN podešen na true,
to znači da se instrukcijom zahteva rotiranje korenskog
elementa
i
da
podsistemu
za
KREIRANJE
GEOMETRIJSKIH TRANSFORMACIJA treba proslediti
koordinate referentne tačke. U suprotnom podsistemu za
KREIRANJE GEOMETRIJSKIH TRANSFORMACIJA
prosleđuju se koordinate (x,y,z) artikularne tačke.
Koordinate referentne/artikularne tačke se izčitavaju iz
dela tačke za animaciju specifikacije elementa (sekcija
2.1.3.1).
Slika 42. Arhitektura prihvatnog
dela animacionog kontrolera
Na osnovu koordinata (x,y,z) referentne/artikularne tačke, podsistem za KREIRANJE
GEOMETRIJSKIH TRANSFORMACIJA kreira matrice translacija u i iz koordinatnog sistema, dok na
osnovu parametra instrukcije (2.2.5.1) OSA ROTACIJE i UGAO kreira jednu od tri matrice rotacije.
Ove tri matrice geometrijskih transformacija neophodne su za rotaciju elementa oko željene tačke što
je u ovom slučaju referentna/artikularna tačka (pogledati sekciju 2.2.4. o geometrijskim
transformacijama). Kreirane matrice geometrijskih transformacija se zatim prosleđuju podsistemu za
ROTACIJU koji spada u izvršni deo animacionog kontrolera.
Izvršni deo
ROTACIJA je podsistem animacionog kontrolera koji služi za rotaciju elemenata iz
hijerarhijske organizacije artikularnog modela na osnovu matrica geometrijskih transformacija koje su
prethodno kreirane u prihvatnom delu animacionog kontrolera, putem podsistema za KREIRANJE
GEOMETRIJSKIH TRANSFORMACIJA. Način na koji se elementi rotiraju objašnjen je u primeru
rotacije trougaonog poligona u sekciji 2.2.4.
Nakon rotacije elementa zahtevanog ulaznim parametrom NAZIV ELEMENTA instrukcije
(2.2.5.1), potrebno je rotirati sve elemente koji se nalaze u podstablu datog elementa, slika 43. Za
propagaciju rotacije kroz podstablo nekog elementa zadužen je podsistem animacionog kontrolera
koji se zove PROPAGACIJA ROTACIJE. PROPAGACIJA ROTACIJE je podsistem koji radi u jednom
od dva režima. Režim u kojem će podsistem za PROPAGACIJU ROTACIJE raditi zavisi od logičke
vrednosti parametra KOREN koji se prosleđuje animacionom kontroleru kao deo instrukcije (2.2.5.1).
Ako je logička vrednost parametra KOREN postavljena na vrednost true, znači da se vrši rotacija
korenskog elementa i da podsistem za propagaciju rotacije treba da zanemari rotaciju onih elemenata
iz hijerarhijske organizacije kojima je parametar Zanemarivanje rotacije postavljen na vrednost true. U
suprotnom korenski element se ne rotira, čime podsistem za PROPAGACIJU ROTACIJE ne
proverava parametar Zanemarivanje rotacije. O parametru Zanemarivanje rotacije pogledati sekciju
2.2.3.
28
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
Na slici 43. prikazana je propagacija rotacije kroz elemente iz podstabla hijerarhijske organizacije
nakon što je instrukcijom (2.2.5.1) zahtevana rotacija ne korenskog elementa B.
Numerisane strelice sa slike 43. prikazuju da se rotacija
elemenata iz podstabla elementa B propagira u dubinu
hijerarhijskog stabla sve dok neki element ima bar jedan
direktno subordinirani element. Onoga trenutka kada se
ustanovi za neki element da nema direktno subordiniranih
elemenata, propagacija rotacije u dubinu se zaustavlja,
čime sledi povratak na prethodne elemente iz
hijerarhijskog stabla. Povratak na prethodne elemente iz
hijerarhijskog
stabla
(prikazano
ne
numerisanim
strelicama) se zaustavlja onoga trenutka kada se pronađe
element od kojeg se može nastaviti dalja propagacija
rotacije u dubinu. Recimo, nakon rotacije elementa B
redom je usledila rotacija elemenata D,F,H i K. Međutim,
kako element K nema direktno subordiniranih elemenata,
propagacija rotacije u dubinu se zaustavila, čime je usledio
povratak na prethodne elemente. Povratak na prethodne
elemente hijerarhijskog stabla je zaustavljen na elementu
Slika 43. Propagacija rotacije u dubinu
D jer isti ima još direktno subordiniranih elemenata koje je
kroz podstablo elementa B.
potrebno rotirati. Nakon povratka na element D usledila je
ponovna propagacija rotacije u dubinu čime su redom rotirani elementi G i I, itd. Propagacija rotacije u
dubinu se zaustavlja onoga trenutka kada se prilikom povratak na element B ustanovi da isti više
nema direktno subordiniranih elemenata od kojih se može nastaviti sa daljom propagacijom rotacije u
dubinu. Nakon završetka propagacionog algoritma, izvršavanje instrukcije je završeno.
Algoritam za propagaciju rotacije elemenata u dubinu zahteva upotrebu strukture LIFO (Last In First
Out) steka. Algoritam za propagaciju rotacije u dubinu je prikazan na slici 44.a. Nakon rotacije
elementa K stanje na steku je prikazano na slici 44.b. Svi elementi na prikazanom steku su upisivani
na vrh steka nakon što su rotirani i nakon što se za iste utvrdilo da imaju bar jedan direktno
subordinirani element, pogledati algoritam sa slike 44.a. Element K se nakon rotacije ne upisuje na
vrh steka jer isti element nema ni jedan direktno subordinirani element, slika 43. Kako element K
nema direktno subordiniranih elemenata sledi povratak na element H. Povratak na element H se vrši
naredbom POP na osnovu čega sledi provera da li element H ima još neki direktno subordinirani
element sem elementa K, slika 43. Kako element H nema više direktno subordiniranih elemenata
naredbom POP sledi povratak na element F. Kako ni element F nema više direktno subordiniranih
elemenata naredbom POP se prelazi na element D. Element D pored elementa F ima i direktno
subordinirani element G, zbog čega se element D naredbom PUSH ponovo smešta na vrh steka pre
nego što se element G rotira itd, pogledati algoritam sa slike 44.a. Nakon rotacije elementa I stanje na
steku je prikazano na slici 44.c.
Slika 44.b
Slika 44.a. Algoritam propagacije u dubini zasnovan na
upotrebi strukture podataka LIFO stek radi implementacije
algoritma prikazanog na slici 46.
Slika 44.c
29
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
Stanja na steku prikazana na slici 44.b. i 44.c. oslikavaju propagaciju rotacije elemenata u dubinu
nakon rotacije elementa B. Naredbom PUSH elementi koji imaju bar jedan direktno subordinirani
element, nakon rotacije se smeštaju na vrh steka. Naredbom POP elementi sa vrha steka se skidaju
kako bi se pronašao element od kojeg se dalje može nastaviti sa propagacija rotacije u dubinu.
Kao primer celokupnog rada animacionog kontrolera, sledi prikaz rotacije desne nadlaktice u odnosu
na osu X za ugao od π /4. Za rotaciju desne nadlaktice animacionom kontroleru se prosleđuje
sledeća instrukcija:
Animacioni kontroler na osnovu podsistema PRONALAŽENJE ELEMENATA pretražuje hijerarhijsku
organizaciju sa ciljem pronalaženja elementa desne nadlaktice. Nakon uspešnog pronalaženja
elementa sledi provera parametra KOREN. Kako je parametar instrukcije KOREN podesan na logičku
vrednost false (NE) to se podsistemu za KREIRANJE GEOMETRIJSKIH TRANSFORMACIJA
prosleđuju koordinate artikularne tačke v1 na osnovu kojih se kreiraju matrice translacija u i iz
koordinatnog sistema. Zbog parametra instrukcije X OSA i π /4 podsistem za KREIRANJE
GEOMETRIJSKIH TRANSFORMACIJA kreira matricu rotacije oko X ose za ugao od π /4. Nakon
kreiranja matrica geometrijskih transformacija sledi rotacija elementa desne nadlaktice za ugao od
π /4 podsistemom za ROTACIJU elemenata. Stanje nakon rotacije desne nadlaktice je prikazano na
slici 46. – (1). Nakon rotacije desne nadlaktice sledi izvršavanje algoritma propagacije rotacije u
dubinu kako bi se rotirale desna podlaktica i desna šaka. Prvo se ispituje da li element desna
nadlaktica ima direktno subordiniranih elemenata, kako ima element desnu podlakticu, desna
nadlaktica se smešta na vrh LIFO steka naredbom PUSH, nakon čega sledi pronalaženje elementa
desne podlaktice iz hijerarhijske organizacije, a zatim i rotacija iste što je prikazano stanjem (2) na
slici 46. Nakon rotacije desne podlaktice za istu se ispituje da li ima direktno subordiniranih
elemenata, kako ima element desnu šaku, desna podlaktica se smešta na vrh LIFO steka naredbom
PUSH, nakon čega sledi pronalaženje elementa desne šake iz hijerarhijske organizacije a zatim i
rotacija iste što je prikazano stanjem (3) na slici 46. Nakon rotacije desne šake ispituje se da li ista
ima direktno subordiniranih elemenata. Kako desna šaka nema ni jedan subordinirani element to se
vrši povratak na prethodni element tako što se naredbom POP desna podlaktica skida sa vrha steka,
nakon čega sledi provera da li ista ima još direktno subordiniranih elemenata se desne šake. Kako
desna podlaktica više nema subordiniranih elemenata sledi povratak na prethodni element desnu
nadlakticu tako što se ista naredbom POP skida sa vrha steka, nakon čega sledi provera da li element
desna nadlaktica ima još direktno subordiniranih elemenata sem desne podlaktice. Kako desna
nadlaktica nema više subordiniranih elemenata a LIFO stek je prazan to se algoritam propagacije
završava čime stanje (3) sa slike 46. predstavlja rezultat izvršenja instrukcije. Instrukcijom za rotaciju
desne nadlaktice izvršeno je generisanje pokreta cele ruke u zglobu ramena što je i prikazano na slici
46.-(3). Animacioni kontroler prilikom izvršavanja instrukcije za rotaciju desne nadlaktice nije radio u
režimu zanemarivanju rotacije jer je parametar instrukcije KOREN postavljen na logičku vrednost
false (NE).
Slika 45. Propagacija rotacije kroz
hijerarhijsko stablo nakon rotacije elementa
desne nadlaktice.
Slika 46. Stanja usled propagacije
rotacije
kroz podstablo elementa
desne nadlaktice.
Slika 47. Stanje LIFO steka
nakon rotacije elementa
desne šake.
30
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
Da bi se u isto vreme generisao pokret savijanja ruke u laktu i njeno pomeranje u zglobu ramena
animacionom kontroleru se prosleđuje set od dve instrukcije:
Redosled prosleđenih instrukcija nije bitan, jer se iscrtavanje 3D modela čoveka
vrši nakon što animacioni kontroler izvrši sve instrukcije koje pripadaju jednom setu
instrukcija. Da li će se prvo generisati savijanje ruke u laktu ili ramenu je ne bitno,
jer kao što je rečeno iscrtavanje generisanog pokreta sledi nakon što animacioni
kontroler izvrši sve instrukcije iz jednog seta instrukcija. Rezultat izvršenja
prethodne dve instrukcije je prikazan na slici 48. Jedan set instrukcija može imati
proizvoljan broj instrukcija (2.2.5.1).
Slika 48. Rezultat izvršenja
instrukcija za rotaciju desne
nadlaktice i podlaktice.
Ovakva arhitektura animacionog kontrolera podseća na hardversku organizaciju centralnih procesora
i mikrokontrolera zbog čega je sistem za animiranje i nazvan animacioni kontroler. Razlog tome je što
animacioni kontroler na osnovu seta instrukcija upravlja generisanjem pokreta artikularnog modela,
isto kao što mikrokontroler na osnovu seta instrukcija upravlja nekim proizvodnim procesom. Pored
toga, podsistem za PRETRAŽIVANJE ELEMENTA podseća na FETCH fazu sa kojom centralni
procesori i mikrokontroleri pribavljaju instrukciju iz operativne memorije, gde nakon pribavljanja iste
sledi njeno izvršavanje,[3]. Iako je arhitektura animacionog kontrolera prikazana kao hardverska
organizacija, ista se može implementirati i softverski ukoliko se za implementaciju koriste objektno
orjentisani principi programiranja.
Algoritam propagacije prikazan na slici 44.a u implementaciji zahteva realizaciju strukture podataka
LIFO steka, kao zasebne klase. Međutim pisanje klase za LIFO stek se može izbeći ukoliko se uzme
u obzir način izvršavanja funkcije. Lokalne promenljive svake funkcije su dinamičke promenljive i
postoje samo za vreme izvršavanja funkcije. Na početku izvršavanja funkcije za lokalne promenljive
se zauzimaju memorijske lokacije, gde se iste nakon završetka funkcije moraju osloboditi. Zbog toga
se memorijske lokacije za lokalne promenljive funkcije zauzimaju na vrhu LIFO steka (naredbom
PUSH) gde se iste oslobađaju sa vrha LIFO steka nakon završetka funkcije. Isto veži i za argumente
koji se prosleđuju funkciji kao vrednosti ulaznih parametara, [6]. Ukoliko se elementi iz hijerarhijske
organizacije uzmu za lokalne promenljive, rekurzivnim izvršavanjem funkcije može se implementirati
algoritam propagacije u dubinu i time postići adekvatno postavljanje i skidanje elemenata sa vrha
LIFO steka. Način izvršavanja funkcije eliminiše potrebe za pisanjem klase LIFO steka jer se isti
automatski obezbeđuje od strane računarskog sistema pri izvršavanju programa. Animacioni kontroler
predstavlja podsistem aplikacije ArtikularniModel ver 1.0 koji je realizovan nizom metoda u obliku
setova instrukcija čiji se rad zasniva na većem broju drugih metoda iz različitih klasa. Za više detalja o
tome pogledati redom sekcije 3.3 i 3.6.4.
31
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
3.
IMPLEMENTACIJA APLIKACIJE Artikularni Model ver. 1.0.
Arhitektura aplikacije Artikularni Model ver 1.0. se sastoji iz više podsistema koji su prikazani na slici
49. Svaki podsistem ima odgovarajući zadatak zbog čega i zauzima odgovarajući nivo u arhitekturi
aplikacije.
Slika 49. Arhitektura aplikacije Artikularni Model
ver 1.0.
Podsistem za inicijalizaciju se izvršava odmah po startovanju aplikacije (i nikada više u toku
izvršavanja aplikacije) jer se istim vrši inicijalizacija hijerarhijske organizacije artikularnog modela i
inicijaliyacija korisničkog interfejsa. Podsistem za inicijalizaciju je neophodan, ali kako se izvršava
samo jedanput (odmah po startovanju aplikacije) isti ne pripada ni jednom nivou arhitekture aplikacije,
zbog čega je na slici 49. odvojeno prikazan. Prvi nivo u arhitekturi aplikacije čini korisnički interfejs
putem kojeg korisnik interaguje sa aplikacijom za animiranje artikularnog modela. Putem ulaznog
uređaja i korisničkog interfejsa korisnik animacionom kontroleru prosleđuje setove instrukcija, upravlja
tokom animacije, rotira/zumira scenu itd. Drugi nivo je animacioni kontroler koji izvršava prosleđene
setove instrukcija na način definisan upravljačkim signalima. Treći nivo služi za iscrtavanje svakog
generisanog pokreta artikularnog modela zbog čega se i nalazi ispod nivoa animacionog kontrolera.
Četvrti nivo je DirectX podsistem koji obezbeđuje API (Aplication Programming Interface) za crtanje
generativne grafike koji se zbog izvršavanja metode Render() u while petlji nalazi na najnižem nivou u
arhitekturi aplikacije. Metoda Render() objedinjuje podsistem za animaciju i crtanje 3D modela. Sledi
detaljno objašnjenje svakog podsistema u redosledu prikazanom na slici 49.
3.1
PODSISTEM ZA INICIJALIZACIJU
Inicijalizacija je podsistem aplikacije koji služi za inicijalizaciju hijerarhijskog stabla
artikularnog modela čoveka u operativnoj memoriji računara.
Podsistem za inicijalizaciju iščitava iz spoljašnje memorije (Hard Disk) računarskog sistema podatke o
elementima artikularnog modela koji su definisani specifikacijom elementa, gde zatim na osnovu istih
gradi hijerarhijsko stablo u operativnoj memoriji računarskog sistema. Tokom inicijalizacije
artikularnog modela podsistem za inicijalizaciju proverava da li je nekom elementu parametar
simetričnosti postavljen na logičku vrednost true. Ukoliko jeste, podsistem za inicijalizaciju koristi
algoritam preslikavanja po X osi kako bi se inicijalizovao i simetričan element. Recimo, prilikom
inicijalizacije desne nadlaktice podsistem za inicijalizaciju koristiti algoritam preslikavanja po X osi
kako bi se inicijalizovala i leva nadlaktica, jer ista predstavlja simetričan element desnoj nadlaktici. Za
specifikaciju elementa i algoritam preslikavanja po X osi pogledati sekciju 2.1.3.1.
Implementacija podsistema za inicijalizaciju nije realizovana u vidu interpretera, jer realizacija
interpretera nije tema ovog rada. Međutim, struktura specifikacije elementa omogućava da se
podsistem za inicijalizaciju artikularnog modela realizuje kao interpreter. Realizacija interpretera bi
zahtevala pisanje parsera za iščitavanje podataka o elementu iz specifikacije elementa, gde bi se
iščitani podaci zatim prosleđivali kao parametri konstruktorima odgovarajućih klasa. Podsistem za
inicijalizaciju je ovim radom implementiran u vidu niza metoda klase TArtikularniModel koje se
oslanjaju na veći broj metoda drugih klasa povezanih asocijativnim vezama na odgovarajući način.
Objašnjenje izgradnje hijerarhijske organizacije zahteva posmatranje modela klasa zbog čega je isto
ostavljeno za sekciju 3.6.2.
32
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
Sledi nabrajanje svih implementiranih metoda podsistema za inicijalizaciju hijerarhijske organizacije:
-
InitDesnaSaka(), InitDesnaPodlaktica(),InitDesnaNadlaktica(),
InitDesnoStopalo(), InitDesnoPodkoleno(),InitDesnoNadkoleno(),
InitGlava(),InitTrup(), i InitRoot().
Iz navedenih metoda se vidi da su iz hijerarhijske organizacije artikularnog modela definisani elementi
sa desne strane ljudskog tela. Razlog tome je što su elementi sa desne strane simetrični sa
elementima leve strane, tako da se u okviru navedenih metoda za inicijalizaciju desne strane (gornji i
donji udovi) koristi algoritam preslikavanja po X osi kako bi se inicijalizovali u operativnoj memoriji
računara i elementi sa leve strane. Prikazanim metodama je definisana hijerarhijske organizacija koja
je prikazana na slici 28. u sekciji 2.1.3.1. Prilikom izvršavanja konstruktora klase TArtikularniModel
izvršiće se i navedene metode, gde je nakon izvršavanja istih celokupna hijerarhijska organizacija
artikularnog modela inicijalizovana u operativnoj memoriji računara.
Pored inicijalizacije hijerarhijske organizacije metodom InitWidgets() klase TArtikularniModel
inicijalizuju se i widgeti korisničkog interfejsa. Svi inicijalizovani widgeti u operativnoj memoriji
računara se čuvaju u okviru kontejnera koji se zove WidgetsContainer. O podsistemu korisničkog
interfejsa se može pročitati u sekciji 3.2 koja sledi.
3.2
PODSISTEM KORISNIČKOG INTERFEJSA (UPRAVLJANJE ANIMACIJOM)
Podsistemom KORISNIČKI INTERFEJS potrebno je obezbediti opcije za prikaz esencijalnih
karakteristika artikularnog modela u šta spadaju sledeće:
1. Realizovanim artikularnim modelom čoveka moguće je animirati različite pokrete ljudskog
tela, zbog čega je neophodno obezbediti opcije za prikaz različitih animacija nad istim
artikularnim modelom uz neizbežnu mogućnost upravljanja tokom animacije.
2. Omogućiti opcije za prikaz propagacije rotacije kroz podstablo nekog elementa kako bi se
pokazalo da je artikularni model skup hijerarhijski povezanih elemenata (sekcija 2.1.3).
3. Omogućiti opcije za prikaz sledećih pogleda na artikularni model:
- pogled na skeletni model koji prikazuje sve artikularne tačke i tačke interakcije,
osim referentne tačke (ona ne pripada artikularnom modelu - sekcija 2.2.3),
- pogled na skeletni model uokviren konturom ljudskog tela kako bi se prikazala
pozicija artikularnih tačaka i tačaka interakcije u odnosu na čitav artikularni
model, i
- pogled na poligon mesh model.
Svi navedeni pogledi su prikazani na slikama 57. u sekciji 3.4.
Prvi esencijalni zahtev se može realizovati razvojem korisničkog interfejsa koji omogućuje korisniku
da preko ulaznog uređaja tastature unosi setove instrukcija (2.2.5.1) koje se zatim klikom na levi
taster miša widget-a Play (ili Execute) prosleđuju animacionom kontroleru na izvršenje sa ciljem
generisanja pokreta artikularnog modela čoveka. Pisanje takvog korisničkog interfejsa zahteva
pisanje interpretera instrukcija i pisanje složenih hendlera s obzirom da DirectX nije interfejs bilder
okruženje već skup API-ija. Zbog toga, različite animacije nad istim artikularnim modelom su
realizovane u vidu četiri metode CrossLegSetInstruction, CrossLegAndArmSetInstruction,
StandUpSetInstruction i GetPaperSetInstruction, koje animacionom kontroleru prosleđuju različite
setove instrukcija s ciljem prikaza, da je artikularnim modelom čoveka moguće generisati različite
pokrete tela. Svaka od navedenih animacija je reprezentovana jednim widget-om gde svi zajedno čine
grupu koja se zove AnimationSet. Željena animacija se odabira levim kolikom miša na odgovarajući
widget iz grupe AnimationSet.
33
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
Korisničkim interfejsom je potrebno podržati i
upravljanje tokom animacije. Tokom animacije
se upravlja na osnovu upravljačkih signala:
Play, Stop, Next Step, Previous Step i Default
Position, koji su ilustrovani na slici 50.
Upravljački signal Play signalizira animacionom
kontroleru da započne sa izvršavanjem setova
instrukcija koje mu se prosleđuju. Nakon
izvršenja poslednjeg seta instrukcija (n),
animacioni kontroler započinje sa izvršavanjem
prvog seta instrukcija (1) i tako u krug.
Upravljačkim signalom Stop podsistem za
KORISNIČKI
INTERFEJS
signalizira
animacionom kontroleru da prestane sa
izvršavanjem setova instrukcija. Generisanim
signalom Stop poništava se dejstvo svih setova
instrukcija koje su izvršene animacionim
kontrolerom, čime se 3D model čoveka tj.
artikularni model vraća u inicijalno stanje –
sedenje.
Slika 50. Prosleđivanje setova instrukcija metode
GetPaperSetInstruction i upravljački signali.
Upravljački signali Next i Previous Step omogućuju dibagiranje setova instrukcija koje se prosleđuju
animacionom kontroleru na izvršavanje. Signal Next Step signalizira animacionom kontroleru da izvrši
naredni set instrukcija, dok signal Previous Step signalizira animacionom kontroleru da izvrši
prethodni set instrukcija.
Upravljački signal Default Position poništava dejstvo svih setova instrukcija koje je animacioni
kontroler izvršio pri dibagiranju. Nakon generisanja signala Default Position 3D model čoveka tj.
artikularni model se vraća u inicijalno stanje – sedenje.
Svaki signal za upravljanje tokom animacije je reprezentovan jednim widget-om gde svi zajedno čine
grupu koja se naziva AnimationControls. Željeni upravljački signal se odabira klikom na levi taster
miša na odgovarajući widget.
Drugi esencijalni zahtev se rešava filterisanjem setova instrukcija koje se prosleđuju animacionom
kontroleru, pogledati sliku 50. Filter omogućuje uključivanje/isključivanje rotacije željenog elementa iz
hijerarhijske organizacije radi prikaza propagacije rotacije kroz podstablo datog elementa. Recimo,
ukoliko se rotacija elementa desne nadlaktice isključi, Filter neće prosleđivati ANIMACIONOM
KONTROLERU instrukcije (2.2.5.1) kojima se zahteva rotacija elementa desne nadlaktice. Ukoliko se
rotacija elementa desne nadlaktice uključi, Filter ANIMACIONOM KONTROLERU prosleđuje sve
instrukcije za rotaciju elementa desne nadlaktice. Naizmeničnim uključivanjem/isključivanjem rotacije
desne nadlaktice, uočava se propagacija rotacije kroz elemente koji čine njeno podstablo. Kako
postoje samo dva stanja uključi/isključi rotaciju, to se radi filterisanja svih elemenata iz hijerarhijskog
stabla isti reprezentuju jednim widget-om koji zajedno čine grupu koja se naziva Filter Controls.
Rotacija elemenata iz hijerarhijskog stabla se uključuje/isključuje klikom na levi taster miša.
Treći esencijalni zahtev je rešen upravljačkim signalom View koji omogućava prikaz jednog od tri
moguća pogleda na artikularni model čoveka putem sistema za CRTANJE 3D MODELA ĆOVEKA,
pogledati sliku 50. Svaki pogled na artikularni model je reprezentovan widget-om čineći tako grupu
widget-a koja se zove View Controls. Prikaz željenog pogleda se ostvaruje nakon što korisnik levim
tasterom miša klikne na odgovarajući widget iz grupe Veiw Controls.
34
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
Korisničkim interfejsom je potrebno obezbediti i sledeće zahteve:
1. Omogućiti rotaciju scene sa ciljem posmatranja artikularnog modela iz svih mogućih
uglova, rotacija objekata u 3D prostoru.
2. Omogućiti zumiranje scene a samim tim i zumiranje artikularnog modela.
3. Omogućiti uključivanje/isključivanje scene i stolice. Isključivanjem scene i stolice gubi se
osećaj tri dimenzije, pogledati sekciju 2.1.1. Uključivanje/isključivanje scene i stolice vrši
se redom upravljačkim signalima TurnOnOffCS i TurnOnOffChair, pogledati sliku 50.
Navedeni zahtevi su objedinjeni u grupi widget-a koja se naziva Scene Controls. Rotiranje, zumiranje,
uključivanje/isključivanje scene i/ili stolice se vrši klikom na levi taster miša. Sve navedene grupe
widget-a se mogu pogledati na slici 64. u sekciji 4.
Korisnički interfejs treba da obezbedi korišćenje gore navedenih opcija u bilo kom trenutku vremena
bez obzira da li se trenutno izvršava animacija ili ne. Korisniku je u svakom trenutku vremena
potrebno obezbediti izbor jednog od tri pogleda na artikularni model, rotaciju/zumiranje scene,
filterisanje instrukcija itd. Zbog toga je za specifikaciju korisničkog interfejsa izabrana grafička metoda
dijagrama stanja [5], jer ista omogućava upotrebu agregacije stanja s kojom se izbegava eksplozija
prelaza iz jednog stanja u drugo, u slučaju kada je korisničkim interfejsom potrebno podržati
korišćenje različitih opcija u bilo kom trenutku izvršavanja programa. Dijagram stanja korisničkog
interfejsa programa Artikularni Model ver 1.0 prikazan je na slici 51.
Slika 51. Dijagram stanja korisničkog interfejsa aplikacije
Artikularni Model ver 1.0.
Dijagramom stanja sa slike 51. prikazana je mogućnost da je u svakom trenutku vremena moguće
filterisati instrukcije, izabrati novu animaciju, rotirati/zumirati scenu itd, bez obzira da li se animacija
izvršava ili ne. Dijagram stanja ujedno specifikuje koji se widget-i tokom korišćenja programa
dozvole/zabrane (eng. Enabled/Disabled). Nakon izabrane animacije i opcije Play dijagram stanja
pokazuje da je sve widget-e grupe AnimationControls potrebno zabraniti osim widget-a Stop, jer isti
predstavlja jedino stanje u koje se može preći iz stanja Play, pogledati sliku 51. (postoji samo jedna
strelica koja ide iz stanja Play). Mehanizam za dozvoljavanje/zabranjivanje widget-a na osnovu
specifikacije dijagrama stanja se implementira u okviru rukovaoca (hendlera) događaja tastature/miša.
Mehanizam za realizaciju korisničkog interfejsa specificiranog dijagramom stanja (slika 51.), razvijen
je u okviru ovoga rada (iako to nije cilj diplomskog rada), zbog toga što DirectX nije interfejs bilder
okruženje kao što su Borland Builders For C++. Interfejs bilderi nude kolekciju gotovih widget-a
(Button, ToolBar, ScroolBar, ComboBox itd. ) koje korisnici (programeri) drag and drop tehnikom
prevlače na formu/dijalog sa ciljem izgradnje interfejsa [5]. Interfejs bilder automatizuje i olakšava
posao izgradnje interfejsa jer veliki deo koda (o kojem programer ne vodi računa) generiše
automatski. Interfejs bilderi automatski generišu:
- kontejnere u koje se skladište podaci svih widget-a koje sadrži jedna
forma/dijalog ( position (x,y), dx-width, dy-height, name, hint, enabled itd. ),
- mehanizam za pretraživanje kontejnera widget-a koji se izvršava nakon što
operativni sistem signalizira događaj tastature/miša, kako bi se pronašao i izvršio
hendler onoga widget-a nad kojim je događaj i ostvaren, itd.
35
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
Kako DirectX nije Interfejs bilder okruženje već skup API-ija namenjen pre svega generativnoj grafici
(Direct3D API – sekcija 3.5), to je za potrebe implementacije korisničkog interfejsa potrebno razviti
widget-e, kontejnere widget-a kao i mehanizam za
pretraživanje kontejnera, koji je u ovom radu
implementiran
hendlerom
OnMouseMove(HWND
hWnd) koji na osnovu metode ImHere ispituje da li je
kursor miša pozicioniran iznad nekog widget-a ili ne
(metoda je objašnjena u nastavku ove sekcije). Na slici
52. prikazan je korisnik koji ulaznim uređajem odabira
opcije korisničkog interfejsa na osnovu kojih hendleri
podešavaju upravljačke signale radi animiranja i crtanja
artikularnog modela.
Slika 52. Upravljanje tokom animacije putem
korisničkog interfejsa.
Ulazni uređaj
Pre nego što se započne sa razvojem podsistema za korisnički interfejs potrebno je izabrati
tip ulaznog uređaja, jer se događajima tastature/pointerskog uređaja rukuje (handle) različitim
podacima. Događajima tastature se rukuje na osnovu kodova pritisnutih tastera, dok se događajima
pointerskog uređaja rukuje na osnovu koordinata kursora. Slede dva primera koja ilustruju rukovanje
događajima tastature i pointerskog uređaja indirektne kontrole – miša [5].
Primer 1.
Nakon svakog pritisnutog tastera pri kucanju teksta u Word Procesoru, hendler
događaja tastature OnKeyPress se referencira na odgovarajuću kodnu stranu,
kako bi se Word Procesoru prosledio odgovarajući znak u zavisnosti od trenutno
izabranog jezika i koda pritisnutog tastera, slika 53.
Primer 2.
Slika 54.
Slika 53.
Svaka ikonica iz neke grupe se iscrtava u okviru prostora koji je definisan
koordinatama (x,y) i vrednostima priraštaja dx (Width) i dy (Height), slika 54.
Nakon klika levim tasterom miša na ikonu radi selekcije jedne iz grupe, hendler
događaja miša OnButtonPress pretražuje kontejner u kojem su skladišteni svi
podaci (pozicija ikone, veličina ...) ikonica date grupe, kako bi se proverilo da li
se koordinate kursora miša nalaze u okviru prostora neke ikone, slika 54.
Ukoliko se kursor miša nalazi u prostoru neke ikone, hendler poziva
odgovarajuće metode (iz Windows API-ija) za iscrtavanje ikone drugom bojom i
za markiranje njenog naziva, što je feedback korisniku da je ikona selektovana,
u protivnom hendler ne radi ništa.
Na početku ove sekcije navedeno je da se izbor željene opcije vrši klikom na levi taster miša, zbog
čega je potrebno implementirati odgovarajuće hendlere za rukovanje događajima miša. Implementiran
je hendler za događaj pomeranja kursora i hendler za događaj otpuštanja levog tastera miša koristeći
koncept prikazan u primeru 2. Hendleri za događaje tastature nisu pisani.
36
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
Widget
Widget je osnovni element WindowsIconsMenuPointers stila korisničkog interfejsa u šta spadaju i
dugmadi (buttons), palete alatki (toolbars, palettes) itd [5]. Svi widget-i prikazani na slici 64. u sekciji 4.
su samostalno razvijeni u sklopu ovoga rada (nije zadatak ovog rada) zbog toga što DirectX okruženje
u slučaju korišćenja Direct3D API-ija ne nudi kolekciju gotovih widget-a, što je i razumljivo s obzirom
da je Direct3D, API za generativnu grafiku, sekcija 3.5.
Minimalan skup atributa/metoda koje jedan widget mora da poseduje su sledeći:
Naziv (identifikator):
Svaki widget mora da ima jedinstven identifikator po čemu se razlikuje od ostalih widget-a iz
widgets kontejnera. Identifikator može biti bilo koji niz alfanumeričkih znakova.
Pozicija:
-
koordinate (x,y) u odnosu na gornji levi ugao prozora aplikacije, i
vrednosti diferencijala dx i dy koji redom služe za podešavanje širine (width) i
visine (height) widget-a, slika 55.
ImHere() metoda:
U trenucima pomeranja kursora miša operativni sistem generiše događaj nakon čega sledi
izvršavanje hendlera OnMouseMove(HWND hWnd) kako bi se utvrdilo da li je kursor miša
pozicioniran iznad nekog widet-a korisničkog interfejsa. Provera se vrši na osnovu ImHere metode
koja je implementirana sledećim C++ kodom:
bool ImHere( unsigned ClientPosX , unsigned ClientPosY )
{
if(x<ClientPosX && ClientPosX<x+dx && y<ClientPosY && ClientPosY<y+dy )
return true;
else
return false;
}
Koordinate (ClientPosX,ClientPosY) dobijaju se
transformacijom
koordinata
(ScreenPosX,ScreenPosY) kursora miša iz prostora
ekrana u prostor definisan površinom prozora
aplikacije
(Clienta).
Koordinate
(ScreenPosX,ScreenPosY) su koordinate kursora
miša u odnosu na gornji levi ugao O prostora
ekrana, dok su koordinate (ClientPosX,ClientPosY)
koordinate kursora miša u odnosu na gornji levi
ugao O’ prozora aplikacije i važi:
ClientPosX ≤ ScreenPosX
ClientPosY ≤ ScreenPosY
i
Slika 55.
Koordinate (ClientPosX, ClientPosY) i (ScreenPosX, ScreenPosY) su jednake jedino kada je prozor
aplikacije maksimizovan (prekriva celokupan prostor ekrana).
Hint:
Hint je tekst koji se pojavljuje ispod widget-a sa ciljem da korisniku programa pruži informacije o akciji
koja će se izvršiti nakon što korisnik na isti widget klikne na levi tasterom miša. Recimo, nakon što je
37
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
korisnik pozicionirao kursor miša iznad widget-a
, ispod istog se ispisuje Hint “Skeletni Model” koji
obaveštava korisnika da se nakon klika na levi taster miša na sceni iscrtava skeletni model
artikularnog modela čoveka.
Dozvola/Zabrana
Korišćenje widget-a se u nekim grupama aplikacije Artikularni Model ver. 1.0. međusobno isključuje.
Recimo u grupi View Controls korišćenje widget-a se međusobno isključuje zato što je u svakom
trenutku vremena moguće iscrtavati samo jedan pogled nad jednim artikularni model čoveka: ili
“Skeletni Model” ili “Skeletni Model Uokviren Konturom Tela” ili “Poligon Mesh Model”.
Ikona:
Ikona na jasan način korisniku prezentuje opcije/akcije programa koje se mogu koristiti,
[5]. Opcija za crtanje “Skeletnog Modela” artikularnog modela čoveka je prezentovana
ikonom na slici 56.a gde ista predstavlja aproksimaciju duge (cevaste) kosti, što korisnika
asocira na skeletni model, pogledati sekciju 2.1.3.1. Opcija za crtanje “Poligon Mesh
Modela” artikularnog modela čoveka je prezentovana ikonom na slici 56.b, jer se poligon
mesh modeli modeliraju spajanjem trouglova tj. trougaonih poligona. Widget-i korisničkog
interfejsa se iscrtavaju metodom DrawWidgets() na osnovu 2D primitiva [1],[4], koje
iscrtava Direct3D-uređaj. O Direct3D-uređaju se može pogledati u sekciji 3.5.
Slika 56. Ikone
widgeta.
Widget-i korisničkog interfejsa se inicijalizuju metodom InitWidgets() u okviru podsistema za
inicijalizaciju koji se izvršava u konstruktoru klase TArtikularniModel. Svi inicijalizovani widget-i se
skladište u kontejner widget-a (WidgetsContainer) koji koristi hendler OnMouseMove(HWND hWnd) u
toku obrade događaja pomeranja kursora miša, kako bi se utvrdilo da li je isti pozicioniran iznad
nekog widget-a korisničkog interfejsa, pogledati tekst koji sledi.
Handle
Hendleri su rukovaoci događajima (events) koji se izvršavaju u metodi MessageProcessing
(MsgProc) trenutno aktivne Windows aplikacije, nakon što operativni sistem Windows istoj metodi
prosledi ne označeni celobrojni identifikator (msg), koji reprezentuje odgovarajući događaj koji nastaje
usled korisnikove interakcije sa ulaznim uređajima (msg = 512 – korisnik je pomerio miša što uzrokuje
pomeranje kursor na ekranu monitora, msg = 513 – korisnik je otpustio prethodno pritisnuti levi taster
miša, što predstavlja jedan klik itd.). Da se ne bi pamtile vrednosti ne označenih celih brojeva za
različite tipove događaja, Microsoft je događajima dodelio nazive koji na jasan način reprezentuju
odgovarajući događaj. Ne označeni ceo broj 512 je imenovan sa WM_MOUSEMOVE, dok je ne
označeni ceo broj 513 imenovan sa WM_LBUTTONUP, što jasno oslikava događaje koji se dešavaju
usled interakcije između korisnika i pokazivačkog uređaja. Funkcija MessageProcessing predstavlja
konekcija između operativnog sistema i aplikacije i služi za rukovanje događajima sa ciljem
izvršavanja željenih opcija programa. Metoda MessageProcessing je realizovana naredbom switch
kako bi se tôkom izvršavanja programa upravljalo događajima (event-driven):
LRESULT MsgProc(..., UINT msg, HWND hWnd, ...)
{
UINT (unsigned integer) – neoznačena
switch(msg)
celobrojna vrednost.
{
...
case WM_MOUSEMOVE: OnMouseMove(HWND hWnd);
break;
case WM_LBUTTONUP: OnLeftButtonUp();
break;
...
}
...
}
38
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
Metode OnMouseMove(HWND hWnd) i OnLeftButtonUp() predstavljaju redom hendlere za rukovanje
događajem pomeranja kursora miša i događajem otpuštanja levog tastera miša, radi izvršavanja
opcija aplikacije Artikularni Model ver. 1.0. Opcije aplikacije se izvršavaju tako što korisnik prvo
pozicionira kursor miša iznad ikone koja reprezentuje željenu opciju, a zatim klikom na levi taster miša
potvrđuje njenu egzekuciju. Hendleri su realizovani tako da zajedno čine celinu, pri čemu hendler
OnMouseMove(HWND hWnd) predstavlja sistem za inicijalizaciju opcije koja se želi izvršiti, dok
hendler OnLeftButtonUp() predstavlja sistem za podešavanje upravljačkih signala neophodnih za
egzekuciju željene opcije. Upravljački signali su prikazani na slici 52.
Hendler OnMouseMove(HWND hWnd) je spregnut sa widget kontejnerom (WidgetsContainer) u
kojem se nalaze svi widget-i korisničkog interfejsa koji su inicijalizovani metodom InitWidgets(). Sledi
deo C++ koda koji implementira OnMouseMove(HWND hWnd) hendler:
...
POINT CursorPosition;
GetCursorPos( &CursorPosition );
ScreenToClient( hWnd, &CursorPosition );
Transformisanje koordinata kursora miša iz
prostora ekrana u koordinate prostora aplikacije.
Widget = WidgetsContainer.begin();
for( unsigned count=0; count<WidgetsContainer.size(); count++, Widget ++ )
{
if( (*Widget)->ImHere(CursorPosition.x, CursorPosition.y ) )
{
OptionName = (*Widget)->getName();
...
}
...
}
Proverava se da li je kursor
miša pozicioniran iznad
nekog widget-a korisničkog
interfejsa ili ne.
OptionName = “”;
...
Prvi i neizbežan korak u izvršavanju hendlera OnMouseMove(HWND hWnd) je transformacija
koordinata (x,y) kursora miša iz prostora ekrana u prostor aplikacije jer:
- operativni sistem Windows aplikaciji (Clientu) ne prosleđuje koordinate kursora
miša u odnosu na gornji levi ugao njenog prozora, već u odnosu na gornji levi
ugao ekrana.
- su pozicije svih widget-a korisničkog interfejsa definisane u odnosu na gornji levi
ugao prozora aplikacije.
Metode GetCursorPosition i ScreenToClient pripadaju Windows API-iju i redom predstavljaju metode
za preuzimanje koordinata kursora miša iz prostora ekrana i transformisanja istih u prostor aplikacije
(Clienta). Rezultat transformacije se čuva u atributu CursorPosition tipa POINT ( struktura koja sadrži
x i y koordinatu kursora miša u prostoru aplikacije ), koji se zatim prosleđuje drugom delu hendlera
OnMouseMove(HWND hWnd) radi provere da li je kursor miša prilikom pomeranja pozicioniran iznad
nekog widget-a korisničkog interfejsa. Provera se zasniva na pozivanju metode ImHere svakog
widget-a iz widget kontejnera (WidgetsConatiner) pri izvršavanju u for petlji. Ukoliko metoda ImHere u
toku izvršavanja for petlje vrati logičku vrednost true, znači da je kursor miša pozicioniran iznad nekog
widget-a, zbog čega je potrebno inicijalizovati naziv opcije (OptionName) metodom getName().
Inicijalizovani naziv opcije se zatim prosleđuje hendleru OnLeftButtonUp() radi podešavanja
odgovarajućih upravljačkih signala potrebnih za egzekuciju željene opcije, pod uslovom da korisnik na
isti widget klikne levim tasterom miša. Ukoliko se pomeranjem kursora miša isti ne pozicionira iznad
nekog widget-a korisničkog interfejsa, hendler OnMouseMove(HWND hWnd) nazivu opcije
(OptionName) ne dodeljuje nikakvu vrednost (prazan string “”).
Recimo, ukoliko je korisnik pomerajući kursor miša isti pozicionirao iznad widget-a
, u određenom
trenutku izvršavanja hendlera OnMouseMove(HWND hWnd), metodom getName() naziv opcije
(OptionName) se inicijalizuje na vrednost “Skeletni Model”, koji se zatim prosleđuje hendleru
OnLeftButtonUp() pod uslovom da je korisnik na isti widget kliknuo levim tasterom miša. Na osnovu
naziva opcije “Skeletni Model” pri izvršavanju hendlera OnLeftButtonUp(), upravljački signal View se
39
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
podešava na vrednost 1, koja od podsistema za CRTANJE 3D MODELA ČOVEKA zahteva crtanje
pogleda na skeletni model artikularnog modela, čime se željena opcija izvšava. Sledi C++ kod koji
prikazuje deo hendlera OnLeftButtonUp() koji služi za podešavanje upravljačkog signala View na
osnovu naziva opcije (OptionName):
...
if ( OptionName == “Skeletni Model” )
{
View = 1;
... Dozvola/Zabrana widget-a
}
else if (OptionName == “Skeletni Model Uokviren Konturom Ljudskog Tela” )
{
View = 2;
... Dozvola/Zabrana widget-a
}
else if (OptionName == “Polygon Mesh” )
{
View = 3;
... Dozvola/Zabrana widget-a
}
else if (OptionName == “Play” )
{
Play = true;
Set = 1;
... Dozvola/Zabrana widget-a
}
else if (OptionName == “Stop” )
{
Play = false;
... Dozvola/Zabrana widget-a
}
else if (OptionName == “NextStep” )
{
Set ++;
... Dozvola/Zabrana widget-a
}
else if (OptionName == “PreviousStep” )
{
Step--;
... Dozvola/Zabrana widget-a
}
...
Na koji način parametar View upravlja iscrtavanjem željenog pogleda na artikularni model čoveka
pogledati C++ kod metode DrawHuman3DModel() u sekciji 3.4.
3.3
PODSISTEM ZA ANIMACIJU
Animacioni kontroler je podsistem aplikacije ArtikularniModel ver 1.0. koji služi za generisanje
pokreta artikularnog modela. Nakon inicijalizacije artikularnog modela animacionom kontroleru se
putem korisničkog interfejsa prosleđuje niz setova instrukcija na osnovu kojih generiše pokrete
40
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
artikularnog modela. Arhitektura animacionog kontrolera je definisana u sekciji 2.2.5 i prikazana je kao
hardverska organizacija jer podseća na centralne procesore i mikrokontroler, s obzirom da se
animacionom kontroleru prosleđuju instrukcije putem kojih se generišu pokreti artikularnog modela.
Instrukcije animacionog kontrolera su implementirane u vidu tri metode koje pripadaju klasi
TAnimacioniKontroler. Sledi nabrajanje metoda koje predstavljaju instrukcije animacionog kontrolera:
- bool XRotationControl(string NazivElementa,float Ugao,bool Koren),
- bool YRotationControl(string NazivElementa,float Ugao,bool Koren), i
- bool ZRotationControl(string NazivElementa,float Ugao,bool Koren).
Metode su deklarisane tako da se obuhvate svi ulazni parametri koji čine instrukciju (2.2.5.1). Ulazni
parametar OSA ROTACIJE je definisana nazivom metode, dok se ostali parametri iz instrukcije
prosleđuju kao ulazni parametri navedenih metoda. Navedene metode implementiraju arhitekturu
animacionog kontrolera pri čemu je razlika među njima u podsistemu za KREIRANJE
GEOMETRIJSKIH TRANSFORMACIJA, jedino kada je u pitanju kreiranje matrice rotacije. Naziv
metode određuje koja se od tri matrica rotacije pored matrica translacije u i iz koordinatnog sistema
kreira putem podsistema za KREIRANJE GEOMETRIJSKIH TRANSFORMACIJA. Kako se
implementacija navedenih metoda ne oslanja samo na metode iz klase TAnimacioniKontroler, već i
na metode koje pripadaju klasama TElement i TTransformacije, detaljno objašnjenje istih nije moguće
bez modela klasa te je ostavljeno za sekciju 3.6.4.
3.4.
PODSISTEM ZA CRTANJE 3D MODELA
Podsistem za CRTANJE 3D MODELA objedinjuje sledeće sisteme: sistem za CRTANJE 3D
MODELA ČOVEKA, sistem za KREIRANJE/CRTANJE 3D MODELA PAPIRA, sistem za CRTANJE
SCENE I STOLICE i sistem za crtanje ikona widget-a korisničkog interfejsa.
Sistem za CRTANJE 3D MODELA ČOVEKA omogućava crtanje tri različita pogleda na artikularni
model čoveka:
- pogled na skeletni model artikularnog modela – slika 57.a,
- pogled na skeletni model uokviren konturom ljudskog tela – slika 57.b, i
- pogled na poligon mesh model – slika 57.c.
Slika 57. Tri različita pogleda na
artikularni model čoveka.
Slika 58. Arhitektura sistema za CRTANJE 3D MODELA
ČOVEKA
Arhitektura podsistema za CRTANJE 3D MODELA ČOVEKA je prikazana na slici 58. Vrednost
signala View se generiše putem podsistema KORISNIČKOG INTERFEJSA (pogledati sekciju 3.2) i
određuje jedan od tri pogled na artikularni model koji se iscrtava. U jednom trenutku vremena moguće
je iscrtavati samo jedan pogled na sceni, što je na slici 58. simbolično predstavljeno zatvorenim
prekidačem P1 i otvorenim prekidačima P2 i P3 (uvek su otvorena dva prekidača). Sistem za
CRTANJE 3D MODELA ČOVEKA je implementiran naredbom toka programa – switch.
41
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
DrawHuman3DModel(unsigned View)
Metoda koja implementira sistem
{
za crtanje skeletnog modela.
switch(View)
{
Metoda koja implementira sistem
case 1 : DrawSkeletModel();
za crtanje skelentnog modela
break;
uokviren konturom ljudskog tela.
case 2 : DrawSkeletModelWithBodyContour();
break;
case 3 : DrawPolygonMesh();
Metoda koja implementira sistem
}
za crtanje poligon mesh modela.
}
O načinu crtanja skeletnog modela i poligon mesh modela može se pročitati u sekciji 2.1.3.1. Način
implementacije sistema za crtanje skeletnog modela uokvirenog konturama ljudskog tela u ovom radu
nije naveden.
Sistem za KREIRANJE/CRTANJE 3D MODELA PAPIRA se koristi pri animaciji interakcije između
čoveka i predmeta. Sistem je implementiran metodom CreateAndDraw3DPaper(X, Y, Z, dx, dy, dz)
gde su X,Y i Z koordinate koje definišu poziciju u odnosu na koju se iscrtava 3D model papira na
osnovu diferencijala dx,dy i dz. O 3D modelu papira pogledati sekciju 2.1.5.
Sistem za CRTANJE SCENE se koristi za iscrtavanje left-handed koordinatnog sistema kako bi se
stekao utisak 3D prostora. Sistem je implementiran metodom DrawLeftHandedCS() koja se izvršava
jedino u slučaju da je upravljački signal TurnOnOffCS postavljen na logičku vrednost true. O sceni i
tipovima koordinatnih sistema se može pročitati u sekciji 2.1.1.
Sistem za CRTANJE STOLICE se koristi za iscrtavanje stolice na kojoj sedi artikularni model čoveka.
Sistem je implementiran metodom DrawChair() koja se iscrtava jedino u slučaju kada je upravljački
signal TurnOnOffChair postavljen na logičku vrednost true. Način implementacije crtanja stolice to jest
metode DrawChair() nije objašnjeno ovim radom ( stolica je poligon mesh model sastavljena iz 12
trougaonih poligona - kocka ).
Crtanje ikonica widget-a korisničkog interfejsa je implementirano metodom DrawWidgets() koja koristi
Direct3D-uređaj za iscrtavanje 2D primitiva od kojih su ikonice widget-a i izgrađene.
Svi navedeni sistemi za crtanje se izvršavaju u okviru metode Render koja pripada Direct3D API-ju.
3.5.
PODSISTEM DirectX
DirectX je bogat multimedijalan API (Aplication Programming Interface), koji programerima
daje mogućnost da pišu aplikacije visokih performansi korišćenjem standardizovanog seta interfejsa.
Prvo izdanje DirectX-a se pojavilo sa Windowsom 95, a nazvano je “Games SDK” (Games Software
Development Kit – alat za razvoj softvera za igre). Od tada, izdato je više od osam novih verzija APIja a danas trenutno aktuelna verzija nosi naziv DirectX 9.0 SDK.
DirectX je Microsoft-ova tehnologija te uz svaki operativni sistem počevši od Windowsa 95 dolaze
biblioteke koje služe za podršku video igrama i multimedijalnom softveru. OS Windows time
sačinjavaju dva API-ja za crtanje grafike: GDI (Graphics Device Interface – koristi se za iscrtavanje
samog Windowsa i softvera standardnog interfejsa, recimo Word-a, 2D grafika) i Direct3D (iscrtava
3D grafiku, mada sadrži i mehanizme za crtanje 2D grafike na osnovu kojeg su u ovom radu
implementirane ikone widget-a korisničkog interfejsa).
DirectX API je korišćen uz Microsoft Visual Studio.Net 2003 razvojno okruženje pod kojim se mogu
izabrati tri različita programska jezika za implementiranje: Visual Basic, C++ i C#. Rešenje je
implementirano u C++ jeziku.
42
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
Direct3D – uređaj (API za generativnu grafiku)
Direct3D je API DirectX okruženja koji predstavlja uređaj za generisanje 2D i 3D grafike.
Direct3D – uređaj se u hijerarhijskoj organizaciji računarskog sistema nalazi ispod operativnog
sistema i iznad drajvera tj. upravljačkog softvera za grafički hardver, slika 59.
Slika 59. Hijerarhijska organizacija računarskog sistema.
Direct3D-uređaj je realizovan u vidu dva različita pajplajna u koje spadaju: FVF pipeline i
PROGRAMABILE pipeline, slika 59.
FVF pipeline je skraćenica od Fixed Vertex Function pajplajn, što u prevodu znači pajplajn fiksne
funkcije za obradu temena. Razlog zbog kojeg se FVF naziva fiksnim pajplajnom je u tome što on
predstavlja standardan API za crtanje 2D i 3D primitiva definisan skupom ograničenog (fiksnog) broja
interfejsa koji su dostupni programeru nakon što se instalira DirectX SDK okruženje, [1]. Da bi se 2D i
3D primitive nacrtale pomoću FVF pajplajna iste je potrebno reprezentovati odgovarajućim formatom
(temena, parovi, trojke-sekcija 2.1.2) a zatim odgovarajućom komandom Direct3D – uređaju proslediti
podatak o tipu primitive koja se treba iscrtati. Postoje tri različite komande koje se upućuju Direct3D uređaju:
1.
2.
3.
D3DPT_POINTLIST– na ekranu se iscrtava onoliko temena (tačaka)
koliko je uređenih trojki v(x,y,z) upisano u baferu temena,
D3DPT_LINELIST – na ekranu se iscrtava onoliko linija koliko je parova
temena (v1,v2) upisano u baferu temena, i
D3DPT_TRIANGLELIST– na ekranu se iscrtava onoliko trougaonih
poligona koliko je trojki temena (v1,v2,v3) upisano u baferu temena.
Bafer temena je skladište u koji se upisuju 2D i 3D primitive koje Direct3D-uređaj treba da iscrta na
sceni. Kada se primitive upišu u bafer temena isti je potrebno proslediti Direct3D-uređaju nakon čega
sledi njihovo iscrtavanje, sledi kod:
Direct3D-uređaj započinje iscrtavanje 3D modela na sceni.
...
Direct3DUredjaj->BeginScene();
Direct3D-uređaju se
prosleđuje odgovarajući
bafer temena.
...
Direct3DUredjaj->SetStreamSource( 0, BaferTemenaDesnaNadlaktica, 0, sizeof(VERTEX) );
Direct3DUredjaj->SetFVF( D3DFVF_PRIMITIV );
Direct3DUredjaj->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 12*3 );
...
Direct3DUredjaj->EndScene();
Iscrtavaju se
trougaoni poligoni.
Komanda Direct3D-uređaju
da crta 3D primitve.
Direct3D-uređaj završava iscrtavanje 3D modela na sceni.
Svaka metoda iz podsistema za CRTANJE 3D MODELA obuhvata gore navedene metode sem
metoda BeginScene() i EndScene() koje se koriste u okviru metode Render() kako bi se obuhvatilo
iscrtavanje svih modela na sceni. Prikazani Direct3D kod (ne C++ kod) pripada metodi
DrawPolygonMesh() koji iscrtava DesnuNadlakticu artikularnog modela čoveka.
43
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
O 3D primitivama koje specificira dokumentacija za DirectX okruženje pogledati sekciji 2.1.2, dok o
podsistemu za CRTANJE 3D MODELA pogledati sekciju 3.4.
PROGRAMABILE pipeline je programabilni pajplajn za crtanje 3D grafike na osnovu programa koji se
pišu u HLSL-u (High Level Shaders Language), što predstavlja zaseban jezik pod DirectX
okruženjem. Programabilni pajplajn služi za crtanje i animiranje 3D objekata koji su po prirodi particle i
deformni sistemi. Ukoliko se programabilni i fiksni cevovod koriste u isto vreme animiraju se hibridni
sistemi. O particle, deformnim i hibridnim sistemima u sekciji 2.
Render metoda - Logički automat
Metoda Render je osnovna metoda Direct3D API-ija koja objedinjuje sve podsisteme
aplikacije Artikularni Model ver. 1.0, zbog čega podsistem za DirectX i predstavlja najniži nivo u
aplikaciji, pogledati uvodni deo u sekciji 3. DirectX okruženje Render metodu izvršava u while petlji
sve dok se ne generiše događaj WM_QUIT koji predstavlja indikator za prekid izvršavanja aplikacije.
Generisanjem signala INTERUPT-REQUEST sledi izvršavanje metode MessageProcessing
(MsgProc) radi rukovanja (handle) događajem koji je generisan odgovarajućim ulaznim uređajem.
Nakon izvršenja metode MsgProc sledi ponovno izvršavanje metode Render i tako u krug sve dok se
ne desi događaj WM_QUIT za prekid izvršavanja programa, pogledati C++ kod u nastavku ove
sekcije. Podsistemima aplikacije Artikularni Model ver. 1.0 je moguće upravljati setom upravljačkih
signala (promenljive tipa bool ili unsigned integer) jer se zbog izvršavanja metode Render u while
petlji ista ponaša kao sekvencijalna mreža tj. logički automat hardverske implementacije. Primera radi
posmatraće se iscrtavanje jednog od tri pogleda na artikularni model čoveka (pogledati slike 57.a-57.b
sekcije 3.4). Ukoliko je upravljački signal View podešen na vrednost 1, metoda DrawHuman3DModel
je u stanju iscrtavanja skeletnog modela i isti se iscrtava pri svakom izvršavanju metode Render sve
dok se upravljačkom signalu View ne dodeli nova vrednost. Nova vrednost upravljačkom signalu
View se dodeljuje u okviru hendlera OnLeftButtonUp() metode MsgProc koji se izvršava nakon što
korisnik otpuštanjem levog tastera miša izabere novi pogled na artikularni model čoveka. Nakon
izvršenja metode MsgProc sledi ponovno izvršavanje metode Render pri čemu metoda
DrawHuman3DModel na osnovu nove vrednosti upravljačkog signala View iscrtava novi pogled na
artikularni model čoveka, pogledati C++ kod u nastavku ove sekcije i pogledati C++ kod u sekciji 3.4.
Slika 60. Komparacija logičkog automata i metode Render.
Na slici 60. prikazana je komparacija između logičkog automata (hardverske implementacije) i metode
Render. Kod logičkih automata hardverske organizacije stanje je određeno logičkim vrednostima (0 ili
1) na izlazima flip-flopova, dok je stanje metode Render određeno vrednostima upravljačkih signala
View, Play, NextStep, PreviousStep itd, za informacije o upravljačkim signalima pogledati sekciju 3.2.
Povratne sprege prikazane na slici 60. omogućuju logičkim automatima da bez spoljašnjeg uticaja
(interakcije korisnika sa ulaznim uređajima) menjaju svoje stanje. Na osnovu povratne sprege
implementirano je kontinualno generisanje pokreta artikularnog modela putem podsistema za
ANIMACIJU. Parametri koji se prosleđuju podsistemu za animaciju su sledeći:
44
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
-
-
-
NazivAnimacijeSetInstruction (prosleđuju se korisničkim interfejsom) –
definiše jednu od četiri metode u kojima se nalaze setovi instrukcija za
generisanje
pokreta:
CrossLegSetInstruction,
CrossLegAndArmSetInstruction,
StandUpSetInstruction
i
GetPaperSetInstruction, pogledati sekciju 3.6.3.
Set – definiše set instrukcija koji se trenutno izvršava u okviru jedne od
četiri prethodno navedene metode. Parametar Set nakon izvršavanja
odgovarajućeg seta instrukcija a pre izvršavanja podsistema za
CRTANJE 3D MODELA se automatski inkrementira (Set++) pod uslovom
da je upravljački signal Play podešen na logičku vrednost true. Ovim je
obezbeđen signal povratne sprege koji u narednom izvršavanju metode
Render omogućava izvršavanje narednog seta instrukcija radi
kontinualnog generisanja pokreta artikularnog modela tj. animacije. U
suprotnom parametar Set se upravljačkim signalima NextStep i
PreviousStep može proizvoljno inkrementirati ili dekrementirati čime se
obezbeđuje režim dibagiranja animacije tj. posmatranja animacije po
koracima.
Upravljački signali (prosleđuju se korisničkim interfejsom) – određuju da li
se generisanje pokreta odvija kontinualno (Play upravljački signal) ili se
odvija u dibaging režimu (NextStep, PreviousStep itd.), pogledati sekciju
3.2.
...Inicijalizacija artikularnog modela,
Direct3D-uređaja...
inicijalizacija widget-a korisničkog interfejsa,
inicijalizacija
while( WM_QUIT != msg.message )
{
Render()
{
//Podsistem za ANIMACIJU(NazivAnimacije,Set,Upravljački signali)
...
switch(NazivAnimacije)
{
case CrossLeg : CrossLegSetInstruction(Set)
break;
case CrossLegAndArm: CrossLegSetInstruction(Set)
break;
case StandUp: CrossLegSetInstruction(Set)
break;
case GetPaper: CrossLegSetInstruction(Set)
}
if(Play)
Set++;
...
//Podsistem za CRTANJE 3D MODELA
Direct3DUredjaj->BeginScene();
DrawWidgets();
if (TurnOnOffCS)
DrawLeftHandedCS();
if(TurnOnOffChair)
DrawChair();
...
CreateAndDraw3DPaper(X,Y,Z,dx,dy,dz);
DrawHuman3DModel(View);
Direct3DUredjaj->EndScene();
}
}
MsgProc(..., UINT msg,HWND hWnd ...){...}
45
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
Prikazani kod je arhitektura aplikacije Artikularni Model ver. 1.0, koja je prikazana na početku sekcije
3. Prvo se izvršava podsistem za inicijalizaciju artikularnog modela, zatim se inicijalizuje korisnički
interfejs (neophodan radi podešavanje upravljačkih signala i prosleđivanja setova instrukcija) i na
kraju se inicijalizuje Direct3D-uređaj koji je neophodan za crtanje grafike. Nakon inicijalizacije, u while
petlji sledi izvršavanje metode Render u kojoj se prvo izvršava podsistem za animaciju radi
generisanja pokreta artikularnog modela, koji se zatim iscrtava podsistemom za crtanje 3D modela.
Izvršavanje metode Render u while petlji zauzima više od 90% procesorskog vremena.
U Render metodu se može upisati proizvoljan programski kod, obično onaj koji je potrebno izvršavati
u petlji kao što je kôd animacionog kontrolera za generisanje pokreta artikularnog modela.
3.6
IMPLEMENTACIJA APLIKACIJE MODELOM KLASA, METODE I ATRIBUTI
Modelom klasa prikazanim na slici 60. implementiran je softver za izgradnju i animiranje
artikularnog modela pod nazivom Artikularni Model ver. 1.0. Ovom prilikom modelom se navode samo
klasa, bez navođenja atributa i metoda jer istih ima popriličan broj, zbog čega je u prilogu ovoga rada
navedena specifikacija svake klasa sa neophodnim atributima i metodama.
Slika 61. Model klasa aplikacije Artikularni Model ver. 1.0.
Osnovna klasa prikazanog modela je klasa TArtikularniModel koja predstavlja jednu od DirectX klasa
koje se koriste u okviru Direct3D API-ija. Klasi je dodeljeno ime TArtikularniModel pri kreiranju
projekta u okviru Microsoft VisualStudio.NET-a. Kostur klase TArtikularniModel sa metodom Render
je generisan wizard-om koji dolazi uz DirectX SDK 9.0 okruženje, u koje se zatim upisuju metode koje
programer samostalno razvija.
3.6.1.
SPECIFIKACIJA ELEMENTA
Klasa TElement implementira specifikaciju elementa za opis elemenata hijerarhijske
organizacije, zbog čega ima asocijativnu vezu TAČKE ZA ANIMACIJU_KONTURNE TAČKE sa
klasom TTacka. Klasa TTacka služi za definisanje tačaka neophodnih za animaciju i modelovanje
poligon mesh modela.
46
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
Tačke se definišu konstruktorom klase TTacka:
TTacka(unsigned Ident, unsigned TipTacke, float X_koord, float Y_koord, float Z_koord)
Parametrom Ident u okviru odgovarajućeg tipa tačke svaka tačka se jedinstveno identifikuje. U okviru
konturnih tačaka identifikacija svake tačke je neophodna jer se na osnovu istih definiše specifikacija
trougaonih poligona za modeliranje poligon mesh modela. Parametrom TipTacke specifikuje se jedan
od četiri tipa tačke: 1 – artikularna tačka, 2 – konturna tačka, 3 – referentna tačka, i 4 – tačka
interakcije. Parametri X_koord, Y_koord i Z_koord specifikuju poziciju tačke u okviru left-handed
koordinatnog sistema (R3LH – pogledati sekciju 2.1.1). Kardinalitet * asocijativne veze TAČKE ZA
ANIMACIJU_KONTURNE TAČKE dozvoljava da se poligon mesh modeli realizuju do proizvoljnog
nivoa detalja kako specifikacija elementa i propisuje. Sve definisane tačke jednog elementa se čuvaju
u jednostruko spregnutoj listi std::list<TTacka*> Tacke klase TElement. Ostali parametri iz
specifikacije elementa se definišu putem konstruktora klase TElement :
TElement(std::string NazivElementa, bool Simetričan, bool Zanemarivanje, unsigned BrojTrouglova)
Parametar NazivElementa definiše jedinstveno ime elementa u hijerarhijskoj organizaciji prema
konvenciji za dodelu naziva, parametar Simetričan određuje da li element ima simetričan element ili
ne, parametar Zanemarivanje definiše da li je element potrebno rotirati u slučaju rotacije korenskog
elementa i parametar BrojTrouglova definiše broj trougaonih poligona od kojih je poligon mesh model
sastavljen. Svi parametri konstruktora jesu privatni atributi klase TElement. O specifikaciji elementa
pogledati sekciju 2.1.3.1. dok o parametru izlančavanje pogledati sekciju 2.2.3.
3.6.2
INICIJALIZACIJA HIJERARHIJSKE ORGANIZACIJE I LISTE
Hijerarhijska organizacija artikularnog modela je implementirana na osnovu dve jednostruko
spregnute liste pokazivača na objekte klase TElement. To su sledeće dve liste:
-
std::list<TElement*> Elementi i
std::list<TElement*> DirektnoSubordiniraniElementi.
Lista Elementi je definisana u okviru klase TAnimacioniKontroler i u nju se upisuju pokazivači na svaki
element iz hijerarhijske organizacije. Lista DirektnoSubordiniraniElementi je definisana u okviru klase
TElement i u nju se upisuju pokazivači na one elemente hijerarhijske organizacije koji su direktno
subordinirani nekom elementu. Hijerarhijska organizacija u operativnoj memoriji računarskog sistema
se inicijalizuje na osnovu sledećeg:
-
-
-
-
Metoda TElement* PronalazenjeElementa(std::string NazivElementa)
klase TAnimacioniKontroler. Ova metoda na osnovu parametra
NazivElementa iz liste Elementi pronalazi pokazivač na odgovarajući
element hijerarhijske organizacije. Metoda PronalazenjeElementa ujedno
realizuje deo za PRONALAŽENJE ELEMENTA prihvatnog dela
arhitekture animacionog kontrolera, pogledati sekciju 3.6.4.
Metoda void DodajDirektniSubElement(TElement* Element) klase
TElement,
prosleđeni pokazivač Element upisuje u listu
DirektnoSubordiniraniElementi odgovarajućeg elementa.
Metoda
void
DodajElement(TElement*
Element)
klase
TAnimacioniKontroler pokazivač na inicijalizovani element upisuje u listu
Elementi.
Nazivi elemenata u delu direktno subordinirani elementi, specifikacije
elementa.
47
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
Slika 62. Hijerarhijska organizacija u operativnoj memoriji
računara u trenucima inicijalizacije elementa desne nadlaktice.
Primer. Na slici 62. prikazano je stanje u operativnoj memoriji računarskog sistema u
trenucima inicijalizacije elementa desne nadlaktice hijerarhijske organizacije artikularnog modela. U
delu direktno subordinirani elementi specifikacije elementa za desnu nadlakticu navedeno je ime
“Covek_DesnaPodlaktica” kao direktno subordinirani element desne nadlaktice. Sledi deo C++ koda
metode InitDesnaNadlaktica kojim se prikazuje način izgradnje hijerarhijske organizacije.
bool InitDesnaNadlaktica()
{
...
TElement* Element = TElement(“Covek_DesnaNadlaktica”,true,false,12);
...
Element-> DodajDirektniSubElement(PronalazenjeElementa(”Covek_DesnaPodlaktica”) );
...
AnimacioniKontroler->DodajElement(Element);
...Zbog parametra simetričnosti desne nadlaktice inicijalizuje se i leva nadlaktica...
}
Primećuje se da su zbog parametara simetričnosti desne šake, desne podlaktice i desne
nadlaktice ujedno inicijalizovani i elementi leva šaka, leva podlaktica i leva nadlaktica. Ovakva
izgradnja hijerarhijske organizacije zahteva inicijalizaciju elemenata u odgovarajućem redosledu
počevši od onog koji nema ni jedan subordinirani element (ni direktne ni indirektne). Sa slike 62.
primećuje se da su prvo inicijalizovane šake jer one nemaju ni jedan subordinirani element.
Inicijalizacija hijerarhijskog modela se vrši na osnovu sledećih metoda klase TArtikularniModel koje
ujedno čine deo podsistema za INICIJALIZACIJU (sve navedene metode se izvršavaju u navedenom
redosledu):
InitDesnaSaka(), InitDesnaPodlaktica(), InitDesnaNadlaktica(),
InitGlava(), InitTrup(),
InitDesnoStopalo(), InitDesnoPodkoleno(), InitDesnoNadkoleno(),
i InitRoot().
Lista DirektnoSubordiniraniElementi modelom klasa (slika 61.) je realizovana vezom asocijacije
DIREKTNO_SUB_ELEMENTI klase TElement na samu sebe, čiji kardinalitet * pokazuje da jedan
48
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
element može imati proizvoljan broj direktno subordiniranih elemenata, gde su isti zbog kardinaliteta
1..1 vezani za SAMO jedan element, čime se dobija mehanizam za izgradnju proizvoljne hijerarhijske
organizacije. Lista Elementi modelom klasa je realizovana vezom asocijacije ELEMENTI između klase
TAnimacioniKontroler i TElement kako bi animacioni kontroler imao pristup svim elementima iz
hijerarhijskog stabla radi potreba generisanja animacije.
O podsistemu za inicijalizaciju pogledati sekciju 3.1.
3.6.3.
SETOVI INSTRIKCIJA I UPRAVLJANJE ANIMACIJOM
Upravljački signali na osnovu kojih se putem korisničkog interfejsa upravlja tokom animacije, različitim
pogledima na artikularni model čoveka, uključivanjem/isključivanjem scene, stolice itd, su deklarisani
u okviru klase TArtikularniModel.
unsigned View – upravljački signal koji služi za prikaz jednog od tri različita pogleda na artikularni
modela čoveka: “Skeletni Model”, “Skeletni model uokviren konturom ljudskog tela” i “Poligon mesh
model”, slike 57. u sekciji 3.4.
bool FilterNazivElement
NazivElementa je zamena za: Covek_Koren, Covek_Glava, Covek_Trup, Covek_DesnaNadlaktica,
Covek_DesnaPodlaktica, Covek_DesnaSaka, Covek_LevaNadlaktica, Covek_LevaPodlaktica,
Covek_LevaSaka, Covek_DesnoNadkoleno, Covek_DesnoPodkoleno, Covek_DesnoStopalo,
Covek_LevoNadkoleno, Covek_LevoPodkoleno i Covek_LevoStopalo.
Filteri su upravljački signali za filterisanje instrukcija (2.2.5.1) koje se prosleđuju animacionom
kontroleru sa ciljem prikaza propagacije rotacije kroz podstablo nekog elementa. Ukoliko se
FilterCovek_DesnaNadlaktica podesi na logičku vrednost true, instrukcije za rotaciju desne nadlaktice
ne prosleđuju se animacionom kontroleru na izvršavanje. U suprotnom instrukcije za rotaciju desne
nadlaktice
se
prosleđuju
animacionom
kontroleru
na
izvršavanje.
Naizmeničnim
uključivanjem/isključivanjem rotacije tj. naizmeničnim podešavanjem filtera na true/false bilo kog
elementa iz hijerarhijskog stabla, uočava se propagacija rotacije kroz podstablo elemenata. Filteri se
koriste u okviru metoda NazivAnimacijeSetInstruction, gde je NazivAnimacije zamena za CrossLeg,
CrossLegAndArm, StandUp i GetPaper, koje animacionom kontroleru prosleđuju odgovarajući set
instrukcija radi generisanja različitih pokreta artikularnog modela. Pogledati C++ kod u nastavku ove
sekcije u kojem je prikazana struktura sve četiri navedene metode.
CrossLegSetInstruction – prosleđuje animacionom kontroleru setove instrukcija (2.2.5.1) za
generisanje prekrštanja nogu čoveka koji sedi na stolici.
CrossLegAndArmSetInstruction – prosleđuje animacionom kontroleru setove instrukcija
(2.2.5.1) za generisanje opružanja i prekrštanja nogu uz istovremeno prekrštanje ruku čoveka koji
sedi na stolici.
StandUpSetInstruction – prosleđuje animacionom kontroleru setove instrukcija (2.2.5.1) za
generisanje pokreta ustajanja čoveka koji sedi na stolici (animacija bazirana na rotaciji korenskog
elementa oko referentne tačke uz zanemarivanje rotacije pojedinih elemenata iz hijerarhijske
organizacije – pogledati sekciju 2.2.3).
GetPaperSetInstruction – u velikoj meri se razlikuje od prethodnih metoda za generisanje
pokreta artikularnog modela, zato što pored instrukcija (2.2.5.1) koje prosleđuje animacionom
kontroleru, prosleđuje i komande (2.1.5.2) podsistemu za KREIRANJE/CRTANJE 3D MODELA
PAPIRA radi animiranja interakcije između čoveka i predmeta (GetPaper – čovek preuzima papir, čak
i čita!)
Metode NazivAnimacijeSetInstruction su implementirane naredbom toka programa (switch) u kojoj
svaki slučaj (case) reprezentuje jeda set instrukcija, pogledati kod u nastavku teksta. U okviru jednog
seta instrukcija može biti proizvoljan broj Instrukcija koje se izvršavaju ukoliko je parametar
FilterNazivElementa podešen na logičku vrednost true. Instrukcija je zamena za sledeće instrukcije:
XRotationControl, YRotationControl i ZRotationControl, pogledati sekcije 2.2.5, 3.3 i 3.6.4.
49
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
unsigned Set
bool Play
Parametar Set određuje set instrukcija koji se trenutno izvršava animacionim kontrolerom
(AnimacioniKontroler). Na osnovu parametra Set moguće je obezbediti da se pokreti artikularnog
modela generišu kontinualno, tako što se isti parametar nakon svakog izvršenog seta instrukcija
automatski inkrementira, pod uslovom da je upravljački signal Play podešen na logičku vrednost true.
Za kontinualno generisanje pokreta metode NazivAnimacijeSetInstruction je potrebno izvršavati u
petlji, zbog čega se iste izvršavaju u okviru metode Render() koja pripada DirectX podsistemu,
pogledati sekciju 3.5.
Parametar Interaction je podešen na logičku vrednost true jedino u slučaju kada se izvršava metoda
GetPaperSetInstruction u okviru koje se animira interakcija između čoveka i predmeta. Metodom
getTackeInterakcije metodi CreateAndDraw3DPaper se prosleđuju koordinate u odnosu na koje se
kreira i iscrtava 3D model papira. O načinu kreiranja 3D modela papira pogledati u sekciji 2.1.5.
NazivAnimacijeSetInstruction(unsigned Set)
{
switch(Set)
{
case 1: if( FilterNazivElementa ) AnimKontroler->Instrukcija(NazivElementa, float
Ugao,bool Koren);
...
if( Interaction )
...metodom getTackeInterakcije() isčitavaju se koordinate (x,y,z) tačke interakcije koja
je specifikovana za element “Covek_DesnaŠaka”...
break;
case 2: if( FilterNazivElementa ) AnimKontroler->Instrukcija(NazivElementa, float
Ugao,bool Koren);
...
if( Interaction )
...metodom getTackeInterakcije() isčitavaju se koordinate (x,y,z) tačke interakcije koja
je specifikovana za element “ Covek_DesnaŠaka ”...
break;
...
case n: if( Filter NazivElementa ) AnimKontroler->Instrukcija(NazivElementa, float
Ugao,bool Koren);
...
if( Interaction )
...metodom getTackeInterakcije() isčitavaju se koordinate (x,y,z) tačke interakcije koja
je specifikovana za element “ Covek_DesnaŠaka ”...
}
}
if(Play)
Set++;
Prosleđivanje setova instrukcija i podešavanje upravljačkih signala se vrši putem korisničkog
interfejsa (sekcija 3.2), dok se iste izvršavaju u okviru podsistema za animaciju koji je implementiran u
metodi Render DirectX podsistema, pogledati sekciju 3.5. Sve navedene metode pripadaju klasi
TArtikularniModel.
50
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
3.6.4.
ANIMACIONI KONTROLER
TAnimacioniKontroler je klasa koja implementira podsistem za animaciju aplikacije ArtikularniModel
ver 1.0. Podsistem za animaciju je implementiran na osnovu tri metode koje su deklarisane tako da
predstavljaju instrukciju (2.2.5.1), pogledati sekciju 3.4 . To su sledeće tri metode:
- bool XRotationControl(string NazivElementa,float Ugao,bool Koren),
- bool YRotationControl(string NazivElementa,float Ugao,bool Koren), i
- bool ZRotationControl(string NazivElementa,float Ugao,bool Koren).
Svaka od navedenih metoda implementira arhitekturu animacionog
kontrolera prikazanu u sekciji 2.2.5. oslanjajući se pri tome na metode
koje pripadaju različitim klasama modela prikazanog na slici 61. Sledi
detaljno objašnjenje metode XRotationControl.
TElement* Element;
TTacka* TackeZaAnimaciju;
TTransformacije* Transformacije;
Prihvatni deo
Prihvatni deo animacionog kontrolera je realizovan iz podsistema za
PRONALAŽENJE ELEMENATA i podsistema za KREIRANJE
GEOMETRIJSKIH TRANSFORMACIJA.
Slika 63. Arhitektura prihvatnog
dela animacionog kontrolera.
Podsistem za PRONALAŽENJE ELEMENTA je realizovan metodom PronalazenjeElementa klase
TAnimacioniKontroler koja na osnovu parametra NazivElementa pronalazi odgovarajući element iz
liste Elementi definisane u okviru klase TAnimacioniKontroler, pogledati sekciju 3.6.2. Ukoliko funkcija
PronalazenjeElementa pronađe element u listi Elementi, kao rezultat vraća pokazivač na isti, koji se
zatim dodeljuje promenljivoj Element. U suprotnom metoda PronalazenjeElementa vraća NULL na
osnovu koje se generiše exception u vidu logičke vrednosti false. Pogledati sliku 63. i C++ kod koji
sledi.
//Podsistem za PRONALAZENJE ELEMENTA
if( ( Element = PronalazenjeElementa(NazivElementa) ) == NULL )
return false;
Nakon pronalaženja odgovarajućeg elementa proverava se parametar KOREN kako bi se utvrdilo da
li se instrukcijom zahteva rotacija korenskog elementa ili ne. Ukoliko je parametar KOREN podešen
na logičku vrednost true potrebno je isčitati koordinate referentne tačke jer se korenski element rotira
u odnosu na referentnu tačku, pogledati sekciju 2.2.3. U suprotnom potrebno je isčitati koordinate
artikularne tačke. Iščitavanje koordinata referentne/artikularne tačke se vrši metodama
getREFTacka/getARTTacka klase TElement. Pogledati C++ kod koji sledi.
if(Koren)
TackeZaAnimaciju = Element->getREFTacka();
else
TackeZaAnimaciju = Element->getARTTacka();
Koordinate (x,y,z) TackeZaAnimaciju se zatim prosleđuju podsistemu za KREIRANJE
GEOMETRIJSKIH TRANSFORMACIJA koji je implementiran klasom TTransformacije. Metoda
MatricaTranslacije služi za kreiranje matrice translacije u i iz koordinatnog sistema na osnovu
koordinata (x,y,z) referentne/artikularne tačke koje se redom iščitavaju sledećim metodama klase
TTacka: getX(), getY() i getZ(). Matrica translacije u koordinatni početak se kreira tako što se
koordinate referentne/artikularne tačke prethodno pomnože sa –1, dok se matrica translacije iz
koordinatnog sistema kreira tako što se koordinate istih tačaka direktno proslede metodi
MatricaTranslacije, pogledati sekciju 2.2.4. Rezultati se redom smeštaju u promenljive
matTranslacijeUKP i u matTranslacijeIKP koje su tipa strukture MATRIX koja predstavlja matricu
51
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
dimenzija 4x4. Metoda MatricaRotacijeX kreira matricu za rotaciju tačaka oko X ose za ugao koji je
zadat u radijanima D3DX_PI/Ugao. D3DX_PI je konstanta koja u DirectX okruženju reprezentuje
vrednost π . MatricaRotacijeY i MatricaRotacijeZ se redom koriste u metodama YRotationControl i
ZRotationControl, što je ujedno i jedina razlika između datih metoda. Sledi C++ kod koji implementira
podsistem za KREIRANJE GEOMETRIJSKIH TRANSFORMACIJA.
//Podsistem za KREIRANJE GEOMETRIJSKIH TRANSFORMACIJA
MATRIX matTranslacijeUKP; //Matrica translacije u koordinatni početak
MATRIX matTranslacijeIKP; //Matrica translacije iz koordinatnog početka
MATRIX matRotacije;
Transformacije->MatricaTranslacije(&matTranslacijeUKP,-1*TackeZaAnimaciju->getX(),
-1*TackeZaAnimaciju->getY(),
-1*TackeZaAnimaciju->getZ());
Transformacije->MatricaTranslacije(&matTranslacijeIKP, TackeZaAnimaciju->getX(),
TackeZaAnimaciju->getY(),
TackeZaAnimaciju->getZ());
Transformacije->MatricaRotacijeX (&matRotacije, (float)D3DX_PI/Ugao );
Izvršni deo
Nakon pronalaženja elementa i kreiranja svih matrica geometrijskih transformacija potrebno je rotirati
pronađeni element uz propagaciju rotacije kroz podstablo datog elementa.
Element->Rotation( &matTranslacijeUKP, &matRotacije, &matTranslacijeIKP,Koren );
Metoda Rotation klase TElement kojoj se kao ulazni parametri prosleđuju matrice geometrijskih
transformacija, implementira podsistem animacionog kontrolera za ROTACIJU elemenata kao i
podsistem za PROPAGACIJU ROTACIJE, pogledati sekciju 2.2.5. Podsistem za ROTACIJU je
realizovan metodom MultiplyVM klase TTransformacije koja zajedno sa strukturom MATRIX
predstavlja uniformni matematički aparat za bilo koji tip geometrijskih transformacija. Pogledati sekciju
2.2.4 za objašnjenje metode MultiplyVM. Podsistem za PROPAGACIJU ROTACIJE je realizovan
algoritmom propagacije u dubinu koji zahteva korišćenje strukture LIFO steka zbog čega je metoda
Rotation implementirana kao rekurzivna. Sledi C++ kod metode Rotation u kojem se prikazuje samo
kod za propagacioni algoritam.
Rotation(MATRIX* matTranslacijeUKP, MATRIX* matRotacije, MATRIX* matTranslacijeIKP, bool
Koren){
...Izvršava se kod koji realizuje podsistem za ROTACIJU elemenata koji je implementiran korišćenjem
metode MultiplyVM koja je objašnjena u sekciji 2.2.4...
//Propagacija rotacije u dubinu
unsigned BrojDirektnihSubElemenata = DirektniSubElementi.size();
if( BrojDirektnihSubElemenata != 0 ){
Proverava se da li element
ima direktno subordiniranih
Element = DirektniSubElementi.begin();
elemenata.
for( unsigned count=0; count<BrojDirektnihSubElemenata; count++, Element++ ) {
if( Koren ){
Metoda getZanemarivanjeRotacije klase
TElement vraća logičku vrednost parametra
Zanemarivanje.
if( !(*Element)->getZanemarivanjeRotacije() )
(*Element)->Rotation(matTranslacijeUKP,matRotacije,matTranslacijeIKP,Koren);
}else
(*Element)->Rotation(matTranslacijeUKP,matRotacije,matTranslacijeIKP,Koren);
}
}
}
Metoda Rotation poziva samu
sebe radi propagacije rotacije u
dubinu – rekurzija.
52
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
3.6.5
CRTANJE 3D MODELA
Crtanje 3D modela je realizovano nizom metoda klase TArtikularniModel :
DrawHuman3DModel(unsigned View) je metoda koja služi za iscrtavanje jednog od tri pogleda na
artikularni model čoveka prikazanim na slikama 57.a – 57.c u sekciji 3.4. Ona objedinjuje metode
DrawSkeletModel(), DrawSkeletModelWithBodyContour() i DrawPolygonMesh() koje se svičuju
upravljačkim signalom View.’
CreateAndDraw3DPaper(X, Y, Z, dx, dy, dz) je metoda koja se koristi u animaciji interakcije između
čoveka i predmeta i služi za kreiranje i crtanje 3D modela papira u odnosu na desnu šaku. Koristi se u
okviru metode GetPaperSetInstruction. X,Y i Z su koordinate koje definišu poziciju u odnosu na koju
se veši iscrtavanje 3D modela papira na osnovu priraštaja dx,dy i dz, pogledati sekciju 2.1.5.
DrawLeftHandedCS() i DrawChair() su redom metode za crtanje left-handed koordinatnog sistema i
crtanje stolice na kojoj sedi artikularni model čoveka.
Render metoda klase TAnimacioniKontroler je osnovna metoda Direct3D API-ija koju DirectX
okruženje izvršava u while petlji, zbog čega su u istoj metodi objedinjeni podsistem za animaciju i
podsistem za crtanje 3D modela. Podsistem za animaciju se izvršava prvi kako bi se istim generisao
pokret artikularnog modela čoveka, koji se zatim iscrtava podsistemom za crtanje 3D modela čoveka
(metoda DrawHuman3DModel). Za detalje o metodi Render pogledati sekciju 3.5.
3.6.6.
KORISNIČKI INTERFEJS
Widget-i korisničkog interfejsa su implementirani klasom TWidget. Nakon što se metoda InitWidget()
izvrši svi widget-i korisničkog interfejsa (slika 64. u sekciji 4.) su inicijalizovani i skladišteni u
kontejneru widget-a koji se zove WigetsContainer. Zbog kardinaliteta * asocijativne veze
WIDGET_CONTAINER između klase TArtikularniModel i klase TWidget, WigetsContainer je
implementiran jednostruko spregnutom listom std::list <TWidget*> koja obezbeđuje da korisnički
interfejs ima proizvoljan broj widget-a. Metodom DrawWidgets() klase TArtikularniModel vrši se
iscrtavanje svih widget-a korisničkog interfejsa. Metoda DrawWidgets() se iscrtava u okviru metode
Render() koja pripada DirectX podsistemu, sekcija 3.5.
std::string Name – predstavlja jedinstveni identifikator widget-a u WigetsContainer-u.
float PosX , PosY, dx (width), dy (hight) – definiše veličinu wigdet-a i prostor koji mu pripada u okviru
prostora (prozora) aplikacije.
bool Enabled – logička vrednost koja određuje da li je widget moguće koristiti ili ne. Izuzetno bitan
atribut jer se na osnovu njega implementiraju različiti prelazi iz stanja korisničkog interfejsa
specifikovanih dijagramom stanja, sekcija 3.2.
TCHAR* Hint – daje korisniku informacije o akciji koja se izvršava odabirom date opcije.
Klasa TWidget poseduje i dve jednostruko spregnute liste u kojoj se skladište 2D primitive na osnovu
kojih se crta ikona widget-a. To su:
Struktura koja definiše 2D
trougaone poligone.
std::list <TRIANGLE*> Trouglovi
std::list <LINE*>
Linije
Struktura koja definiše 2D liniju.
bool ImHere(X,Y,dx,dy) - metoda koja se koristi u okviru rukovaoca (hendlera) događaja pomeranja
kursora miša OnMouseMove(HWND hWnd) kako bi se utvrdilo da li je kursor miša pozicioniran iznad
nekog widget-a tj. da li se nalazi u okviru prostora definisanog atributima PosX, PosY, dx i dy.
53
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
OnMouseMove(HWND hWnd) i OnLeftButtonUp() su redom rukovaoci događajima pomeranja kursora
miša i otpuštanja levog tastera miša. Oba hendlera pripadaju klasi TArtikularniModel koji se izvršavaju
u okviru metode MsgProc(...,UINT msg,...) koja takođe pripada klasi TArtikularniModel.
O detaljima korisničkog interfejsa pogledati sekciju 3.2.
54
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
4.
POGLED NA KORISNIČKI INTERFEJS
Korisnički interfejs aplikacije Artikularni Model ver. 1.0 je realizovan tako da prikazuje sve esencijalne
karakteristike artikularnog modela čoveka u šta spada sledeće:
-
-
-
jednom realizovanim artikularnim modelom čoveka moguće je generisati različite pokrete
ljudskog tela, zbog čega je potrebno obezbediti set različitih animacija (Animation set)
nad istim artikularnim modelom, uz mogućnost upravljanja tokom animacije (Animation
control),
artikularni model je hijerarhijski organizovano stablo 3D elemenata, zbog čega se rotacija
nekog elementa propagira kroz sve elemente iz podstabla datog elementa (Filter
controls), i
tri različita pogleda na artikularni modela čoveka, “Skeletni Model”,“Skeletni Model
uokviren konturom ljudskog tela” i “Poligon Mesh Model” (View controls).
Na slici 64. prikazan je pogled na celokupan korisnički interfejs aplikacije Artikularni Model ver. 1.0.
Slika 64. Korisnički interfej aplikacije Artikularni Model ver. 1.0.
Animation set
Animation set je grupa od četiri widget-a koji reprezentuju četiri različite animacije nad istim
artikularnim modelom, slika 65. Svaka od četiri animacije animacionom kontroleru prosleđuje set
različitih instrukcija (2.2.5.1) i/ili komandi (2.1.5.2) radi generisanja pokreta artikularnog modela
čoveka.
Cross Leg – animacija koja animacionom kontroleru prosleđuje
setove instrukcija za generisanje pokreta prekrštanja nogu u položaju
sedenja.
Cross Leg And Arm – je animacija koja animacionom kontroleru
prosleđuje setove instrukcija za generisanje pokreta opružanja i
Slika 65. Grupa od četiri widget-a koji
reprezentuju četiri različite animacije nad
istim artikularnim modelom.
55
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
prekrštanja nogu uz istovremeno generisanje prekrštanja ruku u položaju sedenja.
Stand Up – animacija koja animacionom kontroleru prosleđuje setove instrukcija za ustajanje
artikularnog modela sa stolice.
Get Paper – animacija koja prosleđuje setove instrukcija/komandi (animacionom kontroleru)/(
sistemu za kreiranje i crtanje 3D modela papira) sa ciljem ainimiranja interakcije između čoveka i
predmeta. Po imenu animacije se može zaključiti da je upitanju animacija za generisanje interakcije –
Get Paper (čovek uzima papir i ujedno pomera glavu kao da čita), slika 64.
Animation controls
Animation controls je grupa widget-a koja omogućava upravljanje tokom programa, slika 66.
Play – Upravljački signal Play signalizira animacionom kontroleru da otpočne sa izvršavanjem setova
instrukcija koji su mu prosleđeni odabirom jedne od četiri ponuđene animacije iz grupe Animation set.
Nakon završetka animacije ista počinje da se izvršava od početka.
Stop – Upravljački signal koji signalizira animacionom
kontroleru da prestane sa izvršavanjem odabrane
animacije. Nakon generisanja signala Stop artikularni
model čoveka se vraća u položaj sedenja.
Slika 66. Grupa widget-a za upravljanje
tokom animacije – upravljački signali.
Next Step, Previous Step – Upravljački signali koji
omogućuju izvršavanje animacije po koracima (dibaging
režim). Odabirom upravljačkog signala Next Step
animacioni kontroler izvršava samo naredni set
instrukcija. Odabirom upravljačkog signala Previous Step
animacioni kontroler izvršava prethodni set instrukcija.
Default Position – Upravljački signal koji se može koristiti samo u režimu izvršavanja animacije po
koracima (dibaging režim). Nakon generisanja signala Default Position artikularni model čoveka se
vraća u prvobitan položaj – sedenje.
Progres bar omogućava da se u svakom trenutku vremena stekne utisak o napredovanju
animacionog kontrolera u toku izvršavanja setova instrukcija.
Filter controls
Filter controls je grupa widget-a koja omogućava uključivanje/isključivanje
rotacije željenih elemenata hijerarhijske organizacije sa ciljem prikaza da je
artikularni model skup hijerarhijski povezanih elemenata u kojem se rotacija nekog
elementa propagira kroz sve elemente iz podstabla datog elementa, slika 67.
Naizmeničnim uključivanjem/isključivanjem elementa može se uočiti propagacija
rotacije kroz elemente iz podstabla datih elemenata. Zbog toga grupa Filter
controls sadrži po jedan widget za svaki element iz hijerarhijske organizacije
prikazane na slici 14. sekcije 2.1.3. Crveni pravougaonik je wigdet koji
reprezentuje korenski element jer se isti razlikuje od ostalih po tome što
predstavlja samo artikularnu tačku (pogledati sekcije 2.2.3).
Slika 67. Grupa widget-a koja
omogućava prikaz propagacije
rotacije.
View controls
View controls je grupa od tri widget-a koja omogućava izbor jednog od tri različita pogleda na
artikularni model čoveka, slika 68.
Skeletni Model – omogućava prikaz svih artikularnih tačaka i tačaka interakcije koje su
neophodne za generisanje pokreta artikularnog modela i interakcije između čoveka i predmeta.
56
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
Referentna tačka nije prikazana skeletnim modelom jer ista ne pripada artikularnom modelu. Opcija
za prikaz referentne tačke ne postoji.
Slika 68. Grupa widget-a koja omogućava
prikaz jednog od tri pogleda na artikularni
model čoveka.
Skeletni Model uokviren konturom ljudskog tela –
omogućava prikaz položaja skeletnog modela u odnosu na
ljudsko telo. Ovim pogledom je moguće uočiti tačan položaj
artikularnih tačaka i tačaka interakcije u odnosu na ljudsko
telo.
Poligon Mesh Model – omogućava pogled na poligon
mesh koji je sastavljen od trougaonih poligona. Poligon mesh
je model koji se po default-u iscrtava po startovanju
aplikacije.
Sva tri pogleda su prikazana na slikama 57.a – 57.c u sekciji 3.4.
Scene contols
Scene controls je grupa widget-a koji obezbeđuju sledeće mogućnosti aplikacije:
Rotate Left – opcija koja omogućava rotaciju scene u desno, kako bi se gledalo u levu stranu
artikularnog modela čoveka.
Rotate Right – opcija koja omogućava rotaciju scene u levo, kako bi se gledalo u desnu
stranu artikularnog modela čoveka.
Rotate Up – opcija koja omogućava rotaciju tako da se na artikularni model gleda iz ptičije
perspektive.
Rotate Down – opcija koja omogućava da se artikularni model posmatra od dole, obratno od
ptičije perspektive (Rotate Up).
Zoom In – opcija koja omogućava da se scena
zumira tj. približi (uveća) korisniku, kako bi se artikularni
model čoveka mogao pogledati i izbliza.
Zoom Out – opcija koja omogućava da se scena
udalji (smanji) od korisnika kako bi se artikularni model
posmatrao iz daleka.
Zoom Reset – opcija koja omogućava
pozicioniranje scene na udaljenost na kojoj se nalazila pri
startovanju aplikacije (default udaljenost).
On/Off Coordinat system – opcija koja omogućava
uključivanje/isključivanje scene tj. left-handed koordinatnog
sistema.
On/Off Chair – opcija koja omogućava
uključivanje/isključivanje iscrtavanja stolice.
Slika 69. Grupa widget-a koja
omogućava kontrolisanje
Opcije aplikacije Artikularni Model ver. 1.0. se odabiraju tako što se kursor miša prvo pozicionira iznad
ikone odgovarajućeg widget-a a zatim se na isti klikne levim tasterom miša.
57
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
5.
ZAKLJUČAK
Zadatak ovog diplomskog rada je razvoj artikularnog modela čoveka radi generisanja pokreta
karakterne animacije radi vizuelizacije tokom organizovanja radnog mesta. Razvoj artikularnog
modela zahteva rešavanje niza problema od kojih su najbitniji sledeća dva:
-
-
rešavanje načina specifikovanja tj. opisa elemenata hijerarhijske organizacije kao i način
njene inicijalizacije u operativnoj memoriji računarskog sistema po startovanju aplikacije
Artikularni Model ver. 1.0.
rešavanje sistema za generisanje pokreta koji mora da obezbedi algoritam za rotaciju
nekog elementa i algoritam za propagacije rotacije kroz podstablo datog elementa
hijerarhijske organizacije. Sistem kretanja mora da obezbedi mogućnost generisanja
različitih pokreta artikularnog modela jer su isti po prirodi programabilni. Jednom
implementiranim artikularni model se posle samo koristi.
Prvi problem je rešen specifikacijom elementa koja je razvijana na osnovu kriterijuma koji
zahtevaju da specifikacija mora obuhvatiti sve neophodne parametre koji su potrebni za izgradnju
hijerarhijske organizacije kao i za animiranje artikularnog modela čoveka, sekcija 2.1.3.1.
Drugi problem je rešen razvojem animacionog kontrolera kojem se prosleđuju instrukcije na
osnovu kojih se zahteva rotacija odgovarajućeg elementa hijerarhijskog stabla uz propagaciju rotacije
koja je realizovana propagacionim algoritmom, sekcija 2.2.5. Animacionim kontrolerom i setovima
instrukcija prikazani su različiti pokreti artikularnog modela čime je dokazana njegova
programabilnost, SetInstruction metode – sekcija 3.6.3.
Radi potreba modeliranja 3D objekata hijerarhijske organizacije kao i radi prikaza rešenja
prethodna dva problema korišćeni su osnovni elementi Direct3D API-ija DirectX okruženja ne ulazeći
u detalje istog, jer Direct3D API i DirectX nisu tema diplomskog rada, već razvoj artikularnog modela.
Rešavanjem zadatka proistekao je problem u realizaciji korisničkog interfejsa jer Direct3D API
predstavlja isključivo skup interfejsa za generativnu grafiku, zbog čega je moralo uslediti pisanje
sistem za korisnički interfejs u šta spadaju widget-i, kontejneri widget-a i hendleri tj. rukovaoci
događaja ulaznih uređaja. Pisanje navedenih elemenata korisničkog interfejsa je samo po sebi veliki
zadatak koji zahteva odgovarajuću specifikaciju (dijagrama stanja) korisničkog interfejsa radi lakše
implementacije istog, a to sve sa ciljem da se prikažu rešenja vezana za najbitnije karakteristike
artikularnog modela u šta spadaju hijerarhijska organizacija, propagacija rotacije kroz elemente iz
podstabla nekog elementa i mogućnost generisanja različitih pokreta.
58
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
6.
7.
LITERATURA
[1]
DirectX 9.0 SDK documentation for programming in C++ language – © 2003
Microsoft Corporation. www.microsoft.com
[2]
Duke & Petersons SPEEDMASTER Formula 1 Review broj 3. – Specijalizovani
časopis za trke i visoku tehnologiju Formule 1. Izdavač: Agencija za pružanje usluga
iz oblasti intelektualne svojine, Beograd.
[3]
Vladimir Kovačević, Nikola Teslić : Odabrana poglavlja iz projektovanja računara
– Katedra za računarsku tehniku i komunikacije, FTN, Novi Sad.
[4]
Dragan Ivetić: Grafički i multimedijalni sistemi – Katedra za računarske nauke i
informatiku, FTN, Novi Sad.
[5]
Dragan Ivetić: Interakcija čovek računar – Katedra za računarske nauke i
informatiku, FTN, Novi Sad.
[6]
Miroslav Hajduković, Zorica Suvajdžin : Programski prevodioci – Katedra za
računarske nauke i informatiku, FTN, Novi Sad.
[7]
Norman I. Badler, Cary B. Phillips, Bonnie L. Webber : Simulate Human: Computer
Graphics, Animation and Control - Department of Computer and Information
Scinece, University Of Pennsylvania.
[8]
W. T. Reeves, "Particle Systems - A Technique for Modeling a Class of Fuzzy
Objects", Computer Graphics, vol. 17, no. 3, pp 359-376, 1983.
[9]
W. T. Reeves, "Approximate and Probabilistic Algorithms for Shading and
Rendering Structured Particle Systems", Computer Graphics, vol. 19, no. 3, pp
313-322, 1985.
[10]
C. W. Reynolds, "Flocks, Herds, and Schools: A Distributed Behavioral Model",
Computer Graphics, vol. 21, no. 4, pp 25-34, 1987.
BIOGRAFIJA
Rođen sam 5. juna 1979. godine u mestu Odžaci, Vojvodina. U svom rodnom mestu završio
sam osnovnu školu. Kako u Odžacima u srednjoj tehničkoj školi nema odseka za elektrotehniku to
sam morao da odem u Sombor. U Somboru sam upisao Srednju tehničku školu na odseku
elektrotehnika smera energetika. Školovanje u Somboru trajalo je četiri godine, sve do 1998. kada
sam i upisao fakultet tehničkih nauka u Novom Sadu na odseku za elektrotehniku. Nakon druge
godine studija odabrao sam smer računarstvo i automatika a nakon treće godine studija odabrao
sam usmerenje računarske nauke i informatika
Vladimir Savić e8549
59
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
8.
PRILOG
U prilogu su spesifikovane sve neophodne klase na osnovu kojih je implemenirana aplikacija
Artikularni Model ver. 1.0. Metode svih prikazanih klasa su objašnjene u sekciji 3.6.
Klasa TArtikularniModel:
Klase TTacka i TElement:
60
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
Klase TAnimacioniKontroler i TTransformacije:
Klasa TWidget:
61
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
KLJUČNA DOKUMENTACIJSKA INFORMACIJA
Redni broj,
RBR:
Identifikacioni broj,
IBR:
Tip dokumentacije,
TD:
Tip zapisa,
TZ:
tekstualni štampani dokument
Vrsta rada,
VR:
diplomski rad
Autor,
AU:
Vladimir Savić
Mentor,
MN:
Dr Dragan Ivetić, vanredan profesor
Naslov rada,
NR:
Primer artikularnog modela sa implementacijom u DirectX okruženju
Jezik publikacije,
JP:
srpski (latinica)
Jezik izvoda,
JI:
srpski / engleski
Zemlja publikovanja,
ZP:
Srbija i Crna Gora
Uže geografsko područje,
UGP:
Vojvodina
Godina,
GO:
2005
Izdavač,
IZ:
autorski reprint
Mesto i adresa,
MA:
Novi Sad, Fakultet tehničkih nauka, Odsek za
računarstvo i automatiku, Trg D. Obradovića 6
Fizički opis rada,
FO:
61 strana
Naučna oblast,
NO:
računarske nauke
Uža naučna oblast,
ND:
Računarska grafika
62
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
Predmetna odrednica/
ključne reči,
PO:
računarska grafika, 3D modeli, karakterna animacija, artikularni
modeli, generisanje pokreta
UDK broj,
UDK:
Čuva se u,
ČU:
Biblioteka Fakulteta tehničkih nauka,
Trg D. Obradovića 6, Novi Sad
Važna napomena,
VN
Izvod,
IZ:
Razvijen je artikularni model jednostavne statike i dinamike radi
vizuelizacije tokom organizovanja radnog mesta. U okviru toga
razvijeni su sledeći elementi:
• specifikacija elementa za opis elemenata i izgradnju hijerarhijske
organizacije,
• animacioni kontroler i setovi instrukcija za generisanje različitih
pokreta artikularnog modela, i
• modelovanje 3D objekata koji podržava simuliranje interakcije
(čovek-čovek, čovek-predmet).
Za modeliranje 3D modela i prikaz rešenja korišćen je Direct3D API
DirectX okruženja. Pored artikularnog modela razvijeni su i osnovni
elementi korisničkog interfejsa: widgeti, widget kontejner i hendleri.
Datum prihvatanja teme od
naučno-nastavnog veća,
DP:
Datum odbrane,
DO:
Članovi komisije,
KO:
Predsednik:
Dr Ilija Ćosić, redovni profesor
Član:
Dr Dušan Malbaški redovni profrsor
Mentor:
Dr Dragan Ivetić, vanredni profesor
63
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
KEY WORDS DOCUMENTATION
Accession number,
ANO:
Indentification number,
INO:
Document type,
DT:
Monographic publication
Type of recordset,
TR:
Textual material
Contents code,
CC:
BSC Thesis
Author,
AU:
Vladimir Savić
Mentor,
MN:
prof. dr Dragan Ivetić, vanredan profesor
Title,
TI:
Example of Articular Model implemented by DirectX
Language of text,
LT:
Serbian (latin)
Language of abstract,
LA:
Serbian and English
Country of publication,
CP:
Serbia and Montenegro
Locality of publication,
LP:
Vojvodina
Publication year,
PY:
2004
Publisher,
PB:
Author reprint
Publish place,
PL:
Novi Sad, 21000, SCG
Trg Dositeja Obradovića 6
Physical description
PD:
Scientific field,
SF:
Computing Science
Scientific discipline,
SD:
Computer Graphics
64
Vladimir Savić – Diplomski rad :
Primer artikularnog modela sa implementacijom u DirectX okruženju.
_____________________________________________________________________________________________________
Subject/Key words,
SX:
computer graphics, 3D models, caracter animation, articular models,
animation.
UC:
Holding data,
AB:
Library of Faculty of Technical Sciences,Novi Sad, SCG
Note,
NT:
Abstract,
AB:
The paper presents example of articular model implemented by
Direct X. Example of articular model consists:
• element specification for description and building a hierarchy of
articular model,
• architecture of animation controler and set of instruction, and
• methods which are used to simulate interaction between humans
and between humans and objects.
The paper presents methods for development elementar part of userinterface: widgets, widgets container and handlers. Example is used
to simulate organization in designation.
Accepted by Scientific
Board on:
ASP:
Defended on,
DE:
Thesis defended board (named/degree/title/faculty),
DB:
President:
Dr Ilija Ćosić, redovni profesor
Member:
Dr Dušan Malbaški redovni profrsor
Member:
Dr Dragan Ivetić, vanredni profesor
65
Download

Primer artikularnog modela sa implementacijom u DirectX okruženju