Diplomová práce 2007 Petr Maštera

Podobné dokumenty
Numerická matematika 1. t = D u. x 2 (1) tato rovnice určuje chování funkce u(t, x), která závisí na dvou proměnných. První

FYZIKA I. Pohybová rovnice. Prof. RNDr. Vilém Mádr, CSc. Prof. Ing. Libor Hlaváč, Ph.D. Doc. Ing. Irena Hlaváčová, Ph.D. Mgr. Art.

Energie elektrického pole

Momenty setrvačnosti a deviační momenty

8a.Objektové metody viditelnosti. Robertsův algoritmus

Statika soustavy těles v rovině

Korelační energie. Celkovou elektronovou energii molekuly lze experimentálně určit ze vztahu. E vib. = E at. = 39,856, E d

Matematika I A ukázkový test 1 pro 2018/2019

MODELOVÁNÍ A SIMULACE

ANALÝZA VZTAHU DVOU SPOJITÝCH VELIČIN

Matematika 1 MA1. 1 Analytická geometrie v prostoru - základní pojmy. 4 Vzdálenosti. 12. přednáška ( ) Matematika 1 1 / 32

ANALYTICKÁ GEOMETRIE LINEÁRNÍCH ÚTVARŮ V ROVINĚ

SIMULACE. Numerické řešení obyčejných diferenciálních rovnic. Měřicí a řídicí technika magisterské studium FTOP - přednášky ZS 2009/10

Pracovní list č. 6: Stabilita svahu. Stabilita svahu. Návrh či posouzení svahu zemního tělesa. FS s

Parametrická rovnice přímky v rovině

KOMPLEXNÍ ČÍSLA. Algebraický tvar komplexního čísla

Osově namáhaný prut základní veličiny

Výslednice, rovnováha silové soustavy.

Stanislav Olivík POROVNÁNÍ DVOU METOD HLEDÁNÍ ODRAZNÉHO BODU NA POVRCHU ELIPSOIDU

14. přednáška. Přímka

Iterační výpočty. Dokumentace k projektu pro předměty IZP a IUS. 22. listopadu projekt č. 2

Statistická šetření a zpracování dat.

A[a 1 ; a 2 ; a 3 ] souřadnice bodu A v kartézské soustavě souřadnic O xyz

BIOMECHANIKA DYNAMIKA NEWTONOVY POHYBOVÉ ZÁKONY, VNITŘNÍ A VNĚJŠÍ SÍLY ČASOVÝ A DRÁHOVÝ ÚČINEK SÍLY

19 Eukleidovský bodový prostor

4. Statika základní pojmy a základy rovnováhy sil

Obsah. 2 Moment síly Dvojice sil Rozklad sil 4. 6 Rovnováha 5. 7 Kinetická energie tuhého tělesa 6. 8 Jednoduché stroje 8

6. Demonstrační simulační projekt generátory vstupních proudů simulačního modelu

Příprava ke státním maturitám 2011, vyšší úroveň obtížnosti materiál stažen z

CVIČNÝ TEST 1. OBSAH I. Cvičný test 2. Mgr. Tomáš Kotler. II. Autorské řešení 6 III. Klíč 21 IV. Záznamový list 23

1.5. DYNAMIKA OTÁČIVÉHO A SLOŽENÉHO POHYBU TĚLESA

MECHANIKA TUHÉHO TĚLESA

u (x i ) U i 1 2U i +U i+1 h 2. Na hranicích oblasti jsou uzlové hodnoty dány okrajovými podmínkami bud přímo

Extrémy funkce dvou proměnných

Ivana Linkeová SPECIÁLNÍ PŘÍPADY NURBS REPREZENTACE. 2 NURBS reprezentace křivek

LOGICKÉ OBVODY J I Ř Í K A L O U S E K

ALGORITMUS SILOVÉ METODY

CVIČNÝ TEST 15. OBSAH I. Cvičný test 2. Mgr. Tomáš Kotler. II. Autorské řešení 6 III. Klíč 15 IV. Záznamový list 17

Lokace odbavovacího centra nákladní pokladny pro víkendový provoz

Projekty - Vybrané kapitoly z matematické fyziky

Čísla a aritmetika. Řádová čárka = místo, které odděluje celou část čísla od zlomkové.

Rozvinutelné plochy. tvoří jednoparametrickou soustavu rovin a tedy obaluje rozvinutelnou plochu Φ. Necht jsou

ANALYTICKÁ GEOMETRIE V ROVINĚ

Cyklografie. Cyklický průmět bodu

POROVNÁNÍ MEZI SKUPINAMI

KOMPLEXNÍ ČÍSLA (druhá část)

Odraz a lom rovinné monochromatické vlny na rovinném rozhraní dvou izotropních prostředí

11 Zobrazování objektů 3D grafiky

6. ANALYTICKÁ GEOMETRIE

Analytická geometrie lineárních útvarů

6. Vektorový počet Studijní text. 6. Vektorový počet

Obecný Hookeův zákon a rovinná napjatost

16. Matematický popis napjatosti

MOŽNOSTI MODELOVÁNÍ A ŘEŠENÍ STŘETU PŘI OBJASŇOVÁNÍ FINGOVANÝCH DOPRAVNÍCH NEHOD

KOMPLEXNÍ ČÍSLA. Algebraický tvar komplexního čísla

Numerické metody optimalizace

SMR 1. Pavel Padevět

b) Po etní ešení Všechny síly soustavy tedy p eložíme do po átku a p ipojíme p íslušné dvojice sil Všechny síly soustavy nahradíme složkami ve sm

Nejprve určíme posouvající sílu. Pokud postupujeme zprava, zjistíme, že zde nepůsobí žádné silové účinky, píšeme proto:

9. Měření kinetiky dohasínání fluorescence ve frekvenční doméně

1.13 Klasifikace kvadrik

3.1. Newtonovy zákony jsou základní zákony klasické (Newtonovy) mechaniky

Těžiště. Fyzikální význam těžiště:

2.5 Rovnováha rovinné soustavy sil

ZÁPADOČESKÁ UNIVERZITA V PLZNI

Rychlost, zrychlení, tíhové zrychlení

permutace, popisující nějaké symetrie, je i π permutace, popisující nějakou symetrii.

POTENCIÁL ELEKTRICKÉHO POLE ELEKTRICKÉ NAPĚTÍ

VZOROVÝ TEST PRO 2. ROČNÍK (2. A, 4. C)

A u. jsou po řadě počáteční a koncové body úsečky; t je parametr:

Seriál II.II Vektory. Výfučtení: Vektory

Kapitola 2. o a paprsek sil lze ztotožnit s osou x (obr.2.1). sil a velikost rovnou algebraickému součtu sil podle vztahu R = F i, (2.

P R O M Í T Á N Í. rovina π - průmětna vektor s r - směr promítání. a // s r, b// s r,

Skládání různoběžných kmitů. Skládání kolmých kmitů. 1) harmonické kmity stejné frekvence :

3 VYBRANÉ MODELY NÁHODNÝCH VELIČIN. 3.1 Náhodná veličina

Lingebraické kapitolky - Analytická geometrie

Řešíme tedy soustavu dvou rovnic o dvou neznámých. 2a + b = 3, 6a + b = 27,

CVIČNÝ TEST 36. OBSAH I. Cvičný test 2. Mgr. Tomáš Kotler. II. Autorské řešení 6 III. Klíč 15 IV. Záznamový list 17

CVIČNÝ TEST 5. OBSAH I. Cvičný test 2. Mgr. Václav Zemek. II. Autorské řešení 6 III. Klíč 17 IV. Záznamový list 19

X = A + tu. Obr x = a 1 + tu 1 y = a 2 + tu 2, t R, y = kx + q, k, q R (6.1)

1 Tuhé těleso a jeho pohyb

Určení tlouštky folie metodou konvergentního elektronového svazku (TEM)-studijní text.

M - Příprava na 1. čtvrtletku pro třídu 4ODK

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ PRŮVODCE GB01-P03 MECHANIKA TUHÝCH TĚLES

Matematika I (KX001) Užití derivace v geometrii, ve fyzice 3. října f (x 0 ) (x x 0) Je-li f (x 0 ) = 0, tečna: x = 3, normála: y = 0

VZOROVÝ TEST PRO 3. ROČNÍK (3. A, 5. C)

11 Vzdálenost podprostorů

CVIČNÝ TEST 24. OBSAH I. Cvičný test 2. Mgr. Kateřina Nováková. II. Autorské řešení 6 III. Klíč 13 IV. Záznamový list 15

PŘÍMKA A JEJÍ VYJÁDŘENÍ V ANALYTICKÉ GEOMETRII

CVIČNÝ TEST 51. OBSAH I. Cvičný test 2. Mgr. Tomáš Kotler. II. Autorské řešení 6 III. Klíč 15 IV. Záznamový list 17

FAKULTA STAVEBNÍ VUT V BRNĚ PŘIJÍMACÍ ŘÍZENÍ PRO AKADEMICKÝ ROK

Zobrazování těles. problematika geometrického modelování. základní typy modelů. datové reprezentace modelů základní metody geometrického modelování

I N V E S T I C E D O R O Z V O J E V Z D Ě L Á V Á N Í

CVIČNÝ TEST 13. OBSAH I. Cvičný test 2. Mgr. Zdeňka Strnadová. II. Autorské řešení 6 III. Klíč 15 IV. Záznamový list 17

Matematika I, část I. Rovnici (1) nazýváme vektorovou rovnicí roviny ABC. Rovina ABC prochází bodem A a říkáme, že má zaměření u, v. X=A+r.u+s.

b) Maximální velikost zrychlení automobilu, nemají-li kola prokluzovat, je a = f g. Automobil se bude rozjíždět po dobu t = v 0 fg = mfgv 0

BIOMECHANIKA KINEMATIKA

M - Příprava na 3. čtvrtletní písemnou práci

CVIČNÝ TEST 9 OBSAH. Mgr. Václav Zemek. I. Cvičný test 2 II. Autorské řešení 5 III. Klíč 17 IV. Záznamový list 19

České vysoké učení technické v Praze Fakulta biomedicínského inženýrství

Transkript:

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ FAKULTA INFORMAČNÍCH TECHNOLOGIÍ Dplomová práce 007 Petr Maštera

Poděkování Chtěl bych vyjádřt poděkování vedoucímu své dplomové práce Janu Pečvov za jeho užtečné rady př tvorbě programu a za to, že moj prác usměrňoval ke zdárnému konc. Prohlášení Prohlašuj, že tato práce je mým původním autorským dílem, které jsem vypracoval samostatně. Všechny zdroje, prameny a lteraturu, které jsem př vypracování používal nebo z nch čerpal, jsem uvedl v lteratuře.... Petr Maštera

Abstrakt Dplomová práce se zabývá řešením kolzí mez objekty scény a následným vyhodnocením těchto kolzí na základě fyzkálního modelu. Implementace všech aplkací a algortmů je provedena v prostředí Wn3 ve Vsual Studu v programovacím jazyce C++ s využtím grafcké knhovny OpenGL a nadstavby Open Inventor. K prác je přložena pomocná aplkace zabývající se výpočtem fyzkálních velčn. V demonstračních aplkacích jsou mplementovány algortmy pro detekc a vyhodnocení kolzí výbuchem, jednoduchým a fyzkálním odrazem na základě fyzkálních vzorců a vztahů. V hlavní demonstrační aplkac průlet tunelem je mplementován jednoduchý herní engne. Součástí práce je dskuse objevujících se problémů s případným návrhem řešení. Klíčová slova: Detekce kolzí, vyhodnocování kolzí, jednoduchý odraz, jednoduché vyhodnocení kolze, fyzkální odraz, fyzkální vyhodnocení kolze, srážka pevných těles, matce momentu setrvačnost, těžště tělesa, Open Inventor, C++. 3

Abstract Ths dploma thess focuses on the collson detecton between scene objects and consequent resoluton of such collsons on the bass of physcal model. The mplementaton of all the applcatons and algorthms s acheved n Wn3 envronment n Vsual Studo usng the programmng language C++; t also employs the graphcal lbrary Open Inventor based on OpenGL. The work also ncludes addtonal applcaton for the calculaton of physcal values. The demo applcatons nvolve algorthms for detecton and resoluton of explosve collson by the use of a smple and physcal reflecton on the bass of physcal formulas and relatonshps. The man demo applcaton called tunnel transt ncorporates a smple game engne. The thess also ncludes a dscusson over the aroused problems wth collson solvng and some suggestons how to overcome them. Key words: Collson detecton, collson resoluton, smple reflecton, smple collson resoluton, physcal reflecton, physcal collson resoluton, collson of rgd bodes, nerta tensor, centre of mass, Open Inventor, C++. 4

Obsah Obsah...5 Úvod...7. Základní pojmy...8.. Vektorová rovnce přímky...8.. Hessův normálový tvar rovnce rovny...9.3. Vzájemná poloha přímky a rovny...9. Fyzka..... Pohyb hmotného bodu..... Těžště tělesa....3. Moment setrvačnost a matce setrvačnost...4 3. Detekce kolzí...9 3.. Základní rozdělení detekce kolzí...9 3.. Kolze trojúhelník vs. trojúhelník... 3.3. Obalová tělesa...4 3.4. Dělení prostoru...5 4. Vyhodnocení kolze...8 4.. Jednoduchý odraz...8 4.. Fyzkální odraz...30 4.3. Exploze...33 5. Použté nástroje...35 5.. Knhovna ColDet...35 5.. Knhovna Open Inventor...35 6. Pomocná aplkace - Velčny...37 6.. Načtení a uložení modelu WRL...37 6.. Rozdělení modelu na voxely...37 6.3. Optmalzace průchodu přes objem...4 6.4. Problém dostatečné přesnost, analýza...4 7. Implementace - Aplkace...44 7.. Rozdělení aplkací...44 7.. Prostředí...44 7.3. Objekty v prostředí...45 7.4. Pohyb v prostředí...45 7.5. Správa objektů...47 8. Implementace Detekce kolze...50 8.. Rozdělení prostoru...50 8.. Kolze obalových těles...50 8.3. Kolze na úrovn modelů...5 9. Implementace Vyhodnocení kolze...53 9.. Exploze...53 5

9.. Jednoduchý odraz...54 9.3. Fyzkální odraz...54 0. Implementace - Přesnost algortmů...59 0.. Přesnost těžště a matce setrvačnost...59 0.. Zaokrouhlovací a násobná chyba...59 0.3. Ovlvnění výsledku...60 0.4. Chyba aproxmace a statckého tělesa...60 0.5. Chyby knhovny Open Inventoru...6. Etapy vývoje...6.. Rozsah ročníkového projektu...6.. Rozsah dplomové práce...6 Závěr...64 Lteratura...65 Přílohy...67 6

Úvod Detekce kolzí objektů je základním problémem př programování grafckých počítačových her. Používá se všude tam, kde potřebujete zjstt, zda jeden objekt (např. střela nebo fgurka nepřítele) zasáhl druhý objekt (vaš fgurku nebo kosmckou loď). S tímto problémem je úzce spjato následné vyhodnocování kolze. Po zjštění kolze může nastat velké množství řešení, které jsou závslé na prostředí a koldujících objektech. Například př srážce rakety a lodě může loď explodovat, př srážce míče se zdí se míč odrazí atd. Příkladů jak vyhodnocovat kolze je nespočet. Některým možnostm se zabývá tato práce. Cílem dplomového projektu je namplementovat algortmy pro detekc a vyhodnocování kolze na základě fyzkálního modelu ve 3D prostoru a demonstrovat je na vhodných příkladech. Cíle, které má tato práce splnt, jsou následující:. Seznámt se s teorí fyzkální srážky dvou pevných těles a kolzních algortmů používaných v počítačové grafce.. Navrhnout a vytvořt program pro výpočet těžště a momentu setrvačnost, které jsou nezbytné pro vyhodnocení srážky dvou pevných těles. 3. Navrhnout algortmy řešící srážku dvou pevných těles na základě fyzkálního modelu. Algortmy popsat. 4. Implementovat navržené algortmy. Vytvořt jednoduchý herní engne využívající daných algortmů. 5. Vytvořt demonstrační aplkac průlet tunelem. 6. Výsledky publkovat na nternetu pod některou z open-sorce lcencí. Cílem práce je vytvořt algortmus smulující co nejreálněj problematku detekce a vyhodnocení kolze. K řešení problému byla použta knhovna Open Inventor a celá škála jejch objektů sloužící pro snadnou mplementac grafckých aplkací. K řešení problémů spojených s pomocnou aplkací (pod názvem Velčny) byla využta knhovna ColDet. Dále byla použta metoda bllboardngu známá z programování grafckých aplkací pod OpenGL. Jako vývojové prostředí pro mplementac bylo zvoleno VsualStudo.net a programovací jazyk C++. Klíčové algortmy projektu, které vysthují zadání projektu jsou: - výpočet těžště - výpočet matce momentu setrvačnost - detekce kolze mez objekty scény - vyhodnocení kolze explozí - vyhodnocení kolze jednoduchým odrazem - vyhodnocení kolze na základě fyzkálního modelu Veškeré mplementované algortmy jsou demonstrovány v aplkacích. Pro tyto aplkace bylo nutné zajstt objekty scény a jejch obsluhu, dále pak pohyb užvatele a kamery. S tím souvsí řada dalších problémů, které bylo třeba v rámc této práce vyřešt. 7

. Základní pojmy Pro tuto prác jsou důležté znalost z oboru matematky a fyzky []. Př praktckém použtí fyzkálních a matematckých vzorců v počítačové grafce (př algortmzac vzorců) nemůžeme pracovat ve spojtém prostoru, jako v rovně teoretcké. Př praktckém použtí musíme pracovat pouze v dskrétním prostoru, který je v počítačové grafce reprezentován kartézskou souřadnou soustavou. Proto jsou nezbytné základní znalost geometre, konkrétně vektorový a matcový počet a analytcká geometre []. Klíčovým znalost z oboru geometre jsou polohové vztahy základních geometrckých prmtv bod, přímka, rovna, z nchž s vybrané nyní blíže popíšeme... Vektorová rovnce přímky Na základě znalost geometre [] uvažujme přímku p určenou dvěma různým body A, B. Směrovým vektorem přímky p rozumíme lbovolný nenulový vektor, který je kolneární s vektorem u = AB = B A. Pro lbovolný bod X na přímce p platí: X A = t( B A) = tu, t R (.) Tak dostáváme tzv. vektorovou rovnc přímky p: X = A + tu, t R (.) V této rovnc užíváme symbolů X, A, B, které označují body, ncméně zde se jedná o polohové vektory X, A, B daných bodů (vz. obr..). Symbolem t je označen tzv. parametr. Bodu A, resp. B, přísluší parametr t = 0, resp. t =. Uvedená vektorová rovnce přímky je formálně stejná pro vyjádření přímek v lbovolném eukldovském prostoru, tj. v E, resp. v E3, ale v eukldovských prostorech vyšších dmenzí. Obr.. 8

.. Hessův normálový tvar rovnce rovny Na základě poznatků z geometre [] můžeme rovnu popsat tak, že vektory b = B A a c = C A vynásobíme vektorově a označíme n = b c (vz. obr..). Vektor n, tzv. normálový vektor rovny, je kolmý k nekolneárním vektorům b a c (tedy vektor n je směrovým vektorem kolmce k rovně). Hessův normálový tvar rovnce rovny ρ představuje podmínku: X A n = (.3) ( ) 0 kde X je lbovolný (obecný) bod rovny. Vycházíme z toho, že pro X A musí být vektory XA a n kolmé. Je-l X = A, pak vektor XA je nulový a daný vztah (.3) je splněn. Obr...3. Vzájemná poloha přímky a rovny Na základě znalostí z oblat geometre [] nechť je přímka p daná vektorovou rovncí (.) a rovna Hessovým normálovým tvarem (.3): X = A + tu (.4) X B n = (.5) ( ) 0 O vzájemné poloze přímky p a rovny lze rozhodnout na základě skalárního součnu u n směrového vektoru přímky a normálového vektoru rovny, případně vektoru příčky AB. Klasfkace vzájemné polohy přímky a rovny je uvedena v tabulce. ( u 0, n 0 ). u n = 0 ( B A) n = 0 p n ( A) n 0 B rovnoběžnost p n u n 0 různoběžnost Tab.. Určení průsečíku v případě různoběžné přímky a rovny provedeme pomocí výpočtu příslušného parametru t z rovnce (.4). Je-l bod X společným bodem přímky a rovny, plyne z (.5) a z (.4) po jednoduché úpravě: 9

[( A B) + tu] n = 0 (.6) Pro parametr t získáme lneární rovnc: A B n + t u n = (.7) ( ) ( ) 0 která má jedné řešení t 0, neboť skalární součn u n 0. Hledaným průsečíkem je bod: P = A + t0 u (.8) 0

. Fyzka Pro každý objekt potřebujeme znát velčny a vztahy, které popsují chování tohoto objektu v prostoru a čase [, 3, 4, 5]. Lbovolný objekt pro zjednodušení dočasně nahradíme hmotným bodem [, 3, 5]... Pohyb hmotného bodu Obr.., Obr.. Pro popsání pozce hmotného bodu v kartézském souřadném systému potřebujeme znát vektor pozce r (poston): ( x, jy, kz) = ( x, y z) r =, (.) kde, j, k reprezentuje jednotkový vektor a x, y, z kartézské souřadnce (vz. obr.). Vektorovou velčnou, která udává změnu polohy v čase, je rychlost v (velocty) (vz. obr..): dr dx jdy kdz v = = + + = [ x&, y&, z& ] (.) dt dt dt dt Změnu rychlost v čase naopak udává zrychlení a (acceleraton): dv a = (.3) dt Další vektorovou velčnou je síla F (force), která působí na těleso a ovlvňuje tak jeho zrychlení v závslost na hmotnost tělesa: F = ma (.4) Z této rovnce (.4) poté odvodíme vztah pro výpočet zrychlení v závslost na součtu všech působících sl: F a = (.5) m

Pro další velčny je třeba rozlšovat o jaký pohyb v prostoru se jedná. Obecně jsou vztahy ovlvňující těleso rozděleny na přímočarý pohyb (lnear), nazývaný také translační pohyb, a na pohyb po kružnc (angular), nebo-l rotační pohyb.... Přímočarý pohyb Pro přímočarý pohyb vyjadřuje hybnost míru setrvačnost tělesa. Hybnost p (momentum) závsí na hmotnost a rychlost tělesa: p = mv (.6) Ze vzorce (.4) a (.6) získáme druhý Newtonův zákon, tzv. zákon zachování hybnost: dv d dp F = ma = m = ( mv) = (.7) dt dt dt nebo také: p = t p = Fdt + p (.8) t0 t 0 p p0 = Fdt = I (.9) kde I je mpuls síly působící na částc, který je stejný jako změna hybnost částce. Hybnost částce je ovlvňována působící slou (.8). t0... Pohyb po kružnc Pro pohyb po kružnc potřebujeme znát moment síly, nebo-l točvý moment M (torque): dp d M = r F = r = ( r p) (.0) dt dt kde F je působící síla a r je rameno této síly, tedy polohový vektor částce vůč středu otáčení. Vzorec (.0) můžeme také zapsat jako: dh M = (.) dt z čehož plyne: H = r p (.) kde H je úhlový moment (angular momentum)... Těžště tělesa Pokud se chceme přblížt skutečnost, nesmíme uvažovat objekt jako hmotný bod, ale jako soustavu hmotných bodů, resp. pevné těleso [, 3, 4, 6, 7, 8]. Jelkož se př prác na počítač pohybujeme v dskrétním prostoru, nemůžeme dosáhnout reprezentace objektu jako pevného spojtého tělesa a tudíž musíme všechny rovnce řešt dskrétně. Právě kvůl dskrétnímu řešení není v prax

trvální získat jednotlvé velčny, jako je např. těžště tělesa, a proto v této prác uvádím společně s fyzkálním vztahy také algortmy pro jejch výpočet. Obr.3, Obr..4, Obr..5 Začneme výpočtem těžště hmotného bodu (centre of mass) (vz. obr..3), také nazývaným jako první moment hmoty q (frst mass moment): q = rm (.3) Těžště celé soustavy je magnární bod (vz. obr..4), a to takový, že působení gravtační síly na něj má stejný účnek jako působení na celé těleso, resp. soustavu: q = q = r m = m rcm = mtotal rcm (.4) kde rcm je vektor polohy těžště a m total je celková hmotnost tělesa. Důležtý je především vektor pozce těžště (vz. obr..5). Ze vzorců (.), (.3) a (.4) dostáváme: r m m x m y m z q = = = r CM,, (.5) m total m m m m... Algortmy pro výpočet těžště Na základě vzorce (.5) můžeme vypočítat polohu těžště pro lbovolnou soustavu bodů, nebo pro lbovolný objekt s konzstentním rozložením hmoty, a to za předpokladu, že tento objekt rozdělíme na určtý konečný počet hmotných bodů. Těmto bodům se v počítačové grafce přezdívá voxely. Podobně jako v D rozměru je nejmenším elementem pxel, tak v 3D prostoru jím je voxel. Tedy tzv. voxel je nejmenším elementem v trojrozměrném prostoru, který je přesně defnován třem souřadncem (polohovým vektorem). Pokud bychom měl těleso reprezentované pomocí voxelů, je algortmus na výpočet těžště poměrně jednoduchý. Za předpokladu, že hmotnost všech voxelů je stejná, postačí sečíst jednotlvé souřadnce všech voxelů a podělt je jejch počtem. Náznak algortmu v pseudokódu jazyka C: 3

Vynuluj souřadnce těžště For (přes všechny voxely){ K souřadncím těžště přčt souřadnce voxelu } každou souřadnc těžště vyděl počtem voxelů Ve většně případů je těleso reprezentováno v počítačové grafce v podobě trojúhelníkového modelu, který ovšem není vhodný pro výpočet těžště. Takový trojúhelníkový model je nutno rozdělt na výše zmíněné voxely, resp. procházet přímo objemem tělesa. Algortmus je proto komplkovanější. Je třeba posunovat fktvní ukazatel přes celý objem tělesa a sčítat souřadnce jednotlvých elementárních částí (voxely). Tento algortmus je v podstatě vyčíslením určtého ntegrálu přes objem tělesa v dskrétním prostoru, čl suma uvedená ve vzorc (.5). Náznak algortmu [9] v pseudokódu jazyka C: Vypočítej boundng box tělesa Vynuluj souřadnce těžště a počet voxelů For (přes každý voxel boxu ve směru osy x ) For (přes každý voxel boxu ve směru osy y ) For (přes každý voxel boxu ve směru osy z ) If (leží voxel uvntř tělesa){ K souřadncím těžště přčt souřadnce voxelu Inkrementuj počet voxelů } Každou souřadnc těžště vyděl počtem voxelů Hlavním otázkou však zůstává jak poznáme, že se nacházíme uvntř nebo vně tělesa. Tento problém lze řešt například pomocí pouštění paprsku (ray) skrz těleso v nějaké z os. V místě, kde detekujeme lchou kolz, vstupujeme paprskem do tělesa, naopak v místě, kde detekujeme sudou kolz, vystupujeme paprskem z tělesa..3. Moment setrvačnost a matce setrvačnost Obdobně jako u těžště zde musíme brát objekt jako soustavu hmotných bodů, resp. pevné těleso [, 3, 4, 6, 7, 8]. Takto př stanovení momentu setrvačnost je většna rovnc počítána v dskrétní rovně. Níže (vz. kaptola.3..) jsou uvedeny algortmy, kterým se moment setrvačnost počítá v prax. Newtonův první zákon říká, že každé těleso setrvává v kldu nebo v rovnoměrném přímočarém pohybu, dokud není nuceno působením vnějších sl svůj stav změnt []. Mírou setrvačnost hmoty tělesa př translačním a rotačním pohybu je moment setrvačnost I (Moment of Inerta) [, 3, 4, 6, 7, 8]. Moment setrvačnost nezávsí jen na hmotnost objektu, ale také na jejím rozložení v tělese, proto dvě stejně těžká tělesa mohou mít jný moment setrvačnost. 4

Obr..6, Obr..7 Pro zjednodušení začneme opět s jednou částcí, u které určíme její moment setrvačnost I, také nazývaný jako druhý moment hmoty (second mass moment): I = mr (.6) kde m je hmotnost tělesa a r je nejkratší vzdálenost od osy rotace (vz obr..6). Př srovnání se vzorc (.3) a (.6) vdíme rozdíl pouze v mocnně vektoru, proto rozšíření na soustavu hmotných bodů je obdobné jako u těžště: I = m r (.7) Z této rovnce (.7), a na základě obrázku.7, odvozujeme následující: I = m R = m ( r sn θ ) = m r n = m ( r n) ( r n) (.8) kde r je pozce každé částce, a n je jednotkový vektor osy rotace. Protože se pohybujeme v kartézském souřadném systému můžeme psát: x r = x + y j + zk = y (.9) z cosα n = cosα + cos βj + cos χk = cosβ (.0) cos χ Aplkujeme rovnce (.9) a (.0), současně s převodem vektoru r na skew-symmetrc matrx, na rovnc (.8). Matce skew-symmetrc matrx je ekvvalentní vektorovému součnu, v podstatě reprezentuje 3D prostorový vektor v matc 3x3. Tím dostáváme odvození: 5

6 ( ) ( ) ( ) ( ) ( ) [ ] α χ χ β β α χ β α α β χ α β χ α β χ α β χ α β χ α β χ χ β α χ β α cos cos cos cos cos cos cos cos cos cos cos cos cos cos cos cos cos cos cos cos cos cos cos cos cos cos cos cos cos cos 0 0 0 cos cos cos 0 0 0 ZX YZ XY ZZ YY XX I I I I I I y x x z z y m y x x z z y y x x z z y m x y x z y z x y x z y z m n r n r m I + + + + + = + + = = = = (.) kde: ( ) ( ) ( ) ( ) ( ) ( ) = = = = = = + = + = + = ZY YZ ZX XZ YX XY ZZ YY XX z y m I I z x m I I y x m I I y x m I x z m I z y m I ; ; ; ; (.) přčemž XX I, YY I, ZZ I se nazývají hlavní momenty setrvačnost (moment of nerta) a XY I, YX I, XZ I, ZX I, YZ I, ZY I se nazývají devační momenty setrvačnost (produkt of nerta). Pokud je střed soustavy souřadnc O přesně v těžšt tělesa, je hmota rozprostřena rovnoměrně kolem všech os, a proto devační momenty setrvačnost jsou nulové..3.. Úhlový moment Obr..8

7 Úhlový moment pevného tělesa, resp. soustavy hmotných bodů, můžeme vypočítat tak, že sečteme jednotlvé momenty hmotných bodů (.) [, 3, 6, 7, 8]: = r p H (.3) Dosazením vzorce (.6) do vzorce (.3) dostáváme: = ( ) v m r H (.4) kde v je rychlost hmotného bodu opsujícího kružnc. Tuto rychlost vypočítáme jako vektorový součn úhlové rychlost a vzdálenost od osy otáčení: r v = ω (.5) Dosazením vzorce (.5) do předchozího (.4) dostáváme: ( ) [ ] = r r m H ω (.6) Výše uvedené vzorce korespondují s obrázkem.8. Uvažujeme-l tedy kartézský souřadný systém, můžeme obdobně jako u vztahu (.) za použtí skew-symmetrc matrx odvodt následující vzorec: ( ) [ ] ( ) ( )( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) + + + = + + + + + = = = = z y x z y x z y x z y x y x x z z y x y x z y z y x m y z m x z m z y m x z m z y m z x m y x m z y m y x y z x z z y x z x y z x y x z y m x y z x y z x y x z y z m z y x x y x z y z m r r m H ω ω ω ω ω ω ω ω ω ω ω ω ω ω ω ω ω ω ω ω ω ω ω ω ω 0 0 0 0 0 0 0 0 0 (.7) Do vzorce (.7) dosadme výrazy (.), pomocí kterých výraz upravíme do jednoduší podoby: ω ω ω ω I I I I I I I I I I H z y x ZZ ZY ZX YZ YY YX XZ XY XX = = (.8)

kde I je matce setrvačnost (Inerta Tensor). Matce setrvačnost reprezentuje rozložení hmoty vůč všem osám procházejícím počátkem a je konstantní pro dané těleso. Výsledný moment tělesa v prostoru je pak dán součnem matce setrvačnost a úhlové rychlost objektu..3.. Algortmy pro výpočet matce setrvačnost Matce setrvačnost, resp. moment setrvačnost, je pro některá tělesa známa []. Pro lbovolné těleso je ale nutné tento tensor vypočítat. Jak je zřejmé ze vzorce (.), algortmus na výpočet matce setrvačnost musí projít všechny dskrétní hodnoty, tzn. že tento algortmus bude podobný algortmu na výpočet těžště [9, 0]. Níže uvedený náznak algortmu v pseudokódu jazyka C je použtelný pro těleso reprezentované trojúhelníkovým modelem: Umíst souřadný systém do těžště tělesa Vypočítej boundng box tělesa Vynuluj matc setrvačnost (IT) a počet voxelů For (přes každý voxel boxu ve směru osy x ) For (přes každý voxel boxu ve směru osy y ) For (přes každý voxel boxu ve směru osy z ) If (leží voxel uvntř tělesa){ ( y + z ) xy IT = IT + yx ( z + x ) zx Inkrementuj počet voxelů } matc setrvačnost vyděl počtem voxelů zy xz ( ) yz x + y Algortmus je v základu stejný jako algortmus pro výpočet těžště, proto se problém s rozdělením na voxely řeší stejně jako u algortmu pro těžště. Jednoduší verze algortmu pro těleso reprezentované voxel je opět skoro stejná jak u těžště, jen se lší v samotném výpočtu. Pokud má matce setrvačnost reprezentovat těleso, které bude rotovat kolem své osy (tedy kolem těžště), musí být souřadný systém umístěn právě v těžšt. Proto platí, že pokud počítáme obě velčny (těžště matc setrvačnost), není možné je počítat v jednom průchodu. Nejprve je tedy nutné vypočítat těžště, a poté umístt počátek souřadného systému do získaného bodu. Tyto výpočty se provádí s lokálním souřadncem modelu, a ne s globálním (world) souřadncem. 8

3. Detekce kolzí Detekce kolzí hledá stavy, kdy dva objekty v prostoru pronkají do sebe [,, 3, 4, 5, 6, 7, 8, 9, 0]. Tento stav se nazývá kolze a obvykle je nechtěný. Patří mez často řešené problémy př programování počítačových her. Dále se detekce kolzí používá například v: - Robotka (plánování cesty robota) - Anmační a smulační systémy (test konzstence scény, fyzkální modelování) - CAD, strojírenský průmysl (robustní a numercky stablní mplementace) - Molekulární modelování 3.. Základní rozdělení detekce kolzí Dělení kolzí probíhá především na základě plynoucího času, tzn. pro statckou scénu, dskrétní a dynamckou []. 3... Statcká detekce kolzí Detekce testu kolze se provádí pouze pro statckou scénu (vz. obr. 3..). Obr. 3. 3... Pseudo-dynamcká detekce kolzí V tomto případě se provádí testy na dskrétní množně konfgurací objektu odpovídající jeho pohybu (vz. obr. 3.). Tento druh detekce je nejčastěj používán pro detekc kolzí v počítačových hrách. Přesnost detekce závsí na velkost dskrétního kroku. Největším problémem pseudodynamcké detekce je proskočení objektu tenkou překážkou. Jak je znázorněno na obrázku 3. mez snímkem n a snímkem n+ dojde k tomuto proskočení. Na snímku n an n+ nedojde k detekc, ale př skutečném pohybu by ke srážce došlo. U klascké dskrétní metody detekce se v každém kroku smulace ntegrují fyzkální velčny, na základě kterých se mění poloha natočení objektu. Př pseudo-dynamcké detekc mohou nastat dva 9

stavy, nekolzní stav a průnk objektů. Výsledkem detekce je pak průnk dvou těles, resp. všechny koldující trojúhelníky (vz. obr 3.). Obr. 3. 3..3. Dynamcká detekce kolzí Testuje se prostor vznklý pohybem objektu. Tato detekce je na počítačích, které pracují v dskrétních hodnotách, nerealzovatelná. Proto se na počítačích používají vylepšené nebo specalzované pseudo-dynamcké metody. Obr 3.4 0

3..4. Optmalzovaná pseudo-dynamcká detekce kolzí Př optmalzované pseudo-dynamcké detekc se v stuac, kdy dojde k průnku nebo neřeštelné kolz, použje metoda půlení ntervalu (vz obr. 3.5), ve které se vrátíme v čase a zmenšíme krok na polovnu. S takto zmenšeným krokem provedeme všechny ntegrace znovu a vyhodnotíme kolz. Tuto operac opakujeme dokud nedosáhneme požadované přesnost (vz. obr. 3.5). Detekce kolzí představuje v reálných stuacích komplexní problém, protože se často musí řešt srážky velkého množství složtě tvarovaných těles. Tento komplexní problém se rozpadá na dva hlavní podproblémy. Prvním podproblémem je zjednodušení složtého tvaru těles tak, aby se složté výpočty kolzí na úrovn trojúhelníků nemusely provádět pro všechna tělesa ve skupně. Tento problém se řeší použtím obalových těles. Druhým podproblémem je rozdělení velkého počtu objektů na menší skupny, což nazýváme dělení prostoru. V následujících kaptolách s řešení těchto problémů detalněj popíšeme. Obr. 3.5 3.. Kolze trojúhelník vs. trojúhelník Vesměs veškeré objekty v počítačové grafce jsou reprezentovány trojúhelníkovým modelem, proto je algortmus detekce kolze mez dvěm trojúhelníky základem [3, 5, 6, 7, 9, 0]. As nejjednodušší algortmus hledající kolz mez dvěma lbovolným trojúhelníky odvodíme ze znalostí uvedených v kaptole. Základní pojmy. Exstují však optmalzované, lepší č rychlejší verze tohoto algortmu, jako například A Fast Trangle-Trangle Intersecton Test [9] nebo A fast trangle to trangle ntersecton test for collson detecton [0]. Základní úvaha je taková, že pokud lbovolná hrana jednoho z trojúhelníků prochází obsahem druhého trojúhelníku, dochází k průnku těchto trojúhelníků. Pokud s představíme vždy jeden z trojúhelníků jako rovnu, můžeme s druhý trojúhelník představt jako tř úsečky, resp. přímky, které tento trojúhelník tvoří (vz obr. 3.6). Pro každou přímku poté vypočítáme její průsečík s plochou. Jakmle jeden z průsečík leží v ploše ohrančené trojúhelníkem, pak jsme nalezl průsečík obou trojúhelníků. Pokud jsme však průsečík nenašl, můžeme stuac obrátt a vyměnt úlohy trojúhelníků. Trojúhelník, který tvořl plochu je nyní reprezentován přímkam a druhý trojúhelník naopak tvoří plochu.

Obr. 3.6, Obr. 3.7 3... Nalezení průsečíků Výpočet je třeba započít určením rovnc přímek a rovn, pro které budeme počítat průsečíky. Nechť trojúhelník T má vrcholy V, u 3. Pro trojúhelník T jsou vrcholy V, V, V 3 a vektory mez těmto vrcholy jsou značeny V, V 3 a vektory rovnce přímek (.) a (.) pak budou mít následující tvar: X X = V = V + tu + tu, t R, t R u, u, u, u, u 3 (vz. obr. 3.7). Vektorové kde je ndex vrcholu, resp. vektoru přléhajícího k vrcholu. Normálu pro jednotlvé trojúhelníky dostaneme vektorovým součtem lbovolných dvou vektorů ramen trojúhelníku, např.: n n = u = u Získáme Hessův normálový tvar rovnce rovny (.3) (vz kaptola. Hessův normálový tvar rovnce rovny): u u ( V ) n = 0 ( V ) n = 0 (3.) (3.) X (3.3) X (3.4) kde jako lbovolný bod na rovně použjeme jeden z vrcholů trojúhelníku, ve vzorc je konkrétně použt V. Nyní vypočítáme všechny průsečíky mez přímkam vzorcem (3.4). Dále průsečíky mez přímkam X a rovnou určenou X a rovnou určenou vzorcem (3.3) (vz. obr. 3.8), podle vzorců (.6), (.7), (.8) uvedených v kaptole.3 Vzájemná poloha přímky a rovny: kde P P = V + t u (3.5) k 0 k 0 = V + t u (3.6) k t 0 je parametr t, vypočítaný pro každou rovnc průsečíků (.7).

Obr. 3.8, Obr. 3.9 3... Pozce průsečíků Pro vypočítané průsečíky P prvního trojúhelníku je nutné ověřt, zda se nacházejí v obsahu druhého trojúhelníku T. To samé je třeba udělat pro průsečíky P a první trojúhelník T. Př určování, zda se průsečík nachází uvntř trojúhelníku, se jž pohybujeme ve D rovně a úloha je zjednodušena na zjštění, zda se bod (průsečík) nachází uvntř trojúhelníků (obecně polygonu). Algortmů řešících tento problém je více, nyní s popíšeme jeden z dobře fungujících [5, 7]. Mějme trojúhelník reprezentovaný vrcholy V, V, V 3. Mez vypočítaným průsečíky (vz. kaptola 3... Nalezení průsečíků) a těmto vrcholy vypočítáme vektor: v = P (3.7) V kde je ndex vrcholu. Za předpokladu, že hledaný bod (průsečík) se nachází uvntř trojúhelníku, musí být součet úhlů všech vektorů směřujících k bodu roven 80 (vz. obr. 3.9). Úhel, který svírají dva vektory, vypočítáme jako: α = arccos v v α α 3 = arccos = arccos ( ) ( v v3 ) ( v v ) Součet všech úhlů musí byt roven 80 ( π ), resp. absolutní hodnota rozdílu součtu úhlů a 80 musí být menší nebo rovna zadané toleranc ε : ( α + α + α ) π ε 3 (3.8) 3 (3.9) Jak se mění prostor vymezený trojúhelníkem pro hledání bodu v závslost na parametru ε znázorňuje obrázek 3.0. Pokud hledáme průsečíky v cyklu je možné cyklus ukončt po prvním průsečíku, který se nachází uvntř druhého z trojúhelníků, protože došlo k nalezení hledaného průnku trojúhelníků. 3

Obr. 3.0 3..3. Aplkace na kolz polygon vs. polygon Většna těles je v počítačové grafce reprezentována jako trojúhelníkový model, proto je detekce kolze mez těmto modely pouze detekcí kolze mez všem trojúhelníky jednoho modelu a všem trojúhelníky druhého modelu. Algortmy, které hledají přímo kolz mez reálným objekty, jsou proto většnou jen optmalzované algortmy pro detekc trojúhelník vs. trojúhelník. Optmalzace těchto algortmů spočívají především v elmnac počtu porovnávaných trojúhelníků. 3.3. Obalová tělesa Vyhodnocovat detekc přímo mez trojúhelníky je strojově velm náročné, proto se objekty zabalují do tzv. obalových těles [, 4]. Základním problémem je zvolt vhodné obalové těleso, a to tak, aby obklopovalo původní model co nejtěsněj a aby testování dvou obalových těles probíhalo co nejrychlej. 3.3.. Sphere Koule (vz. obr. 3.) je nejjednodušším obalovým tělesem. V testu porovnáváme vzdálenost mez dvěma sféram. Její nevýhodou je, že je nejméně ctlvá na tvar tělesa a má největší procento obsaženého volného prostoru. 3.3.. AABB Axs Algned Boundng Box (vz. obr. 3.), tzv. osově orentované obalové těleso, je rovněž jednoduché, navíc v testu stačí porovnávat překrytí jednotlvých os. Teoretcky by mělo být nejrychlejší, protože se používají jen operátory porovnání. Je opět málo ctlvé na tvar tělesa. 3.3.3. OBB Orented Boundng Box (vz. obr. 3.), tzv. orentované obalové těleso, je obtížně vytvořtelné, ale dobře ohrančuje těleso. Test je opět založen na jednoduchých matematckých operacích, je tedy relatvně rychlý. 4

3.3.4. K-DOP K-Dscrete Orentaton Polytopes (obr. 3.), tzv. K-vrcholový orentovaný obal, je as nejsložtější na výrobu. V testu se porovnávají rovnoběžné hrany těles. Tento obalový box nejlépe ze všech jmenovaných kopíruje tvar tělesa. 3.4. Dělení prostoru Obr. 3. Prostor je teoretcky nekonečný a obsahuje nekonečné množství těles. V takovéto stuac je téměř nemožné počítat kolze každého objektu s každým. Snaha vyřešt tento problém vedla k zavedení technk dělení prostoru [,, 4]. Základní deou je rozbít prostor na jednotlvé část s podobnou strukturou. Detekce kolzí se potom provádí jen v tomto lokálním podprostoru. Některé metody, kterým lze dělt podprostor jsou popsány v následujících odstavcích. 3.4.. Využtí sítě čtyřstěnů Vrcholy trojúhelníků všech statckých těles se propojí s nejblžším vrcholy trojúhelníků ostatních statckých těles a vytvoří tak čtyřstěny. Tyto čtyřstěny a původní tělesa mohou být reprezentovány obalovým tělesem (Boundng boxem) dále jen BB. Příklad ve D je znázorněn na obrázku 3., konkrétní zobrazený BB je osově orentovaný (AABB) a je zobrazen jen v podobě dvou těles. Nejprve tedy určíme všechny čtyřstěny, resp. jejch BB, které protínají hledané těleso D, resp. jeho obal (BB). Na D obrázku 3. to jsou trojúhelníky T a T (pozn. ve 3D to jsou čtyřstěny). Pro určení samotné kolze mez objekty se provádí pouze test kolze všech takových trojúhelníků prostředí, které přléhají k těmto čtyřstěnům, s trojúhelníky objektu D. 5

Obr. 3. 3.4.. Voxelová mřížka Prostor se rozdělí na mřížku předem daných rozměrů (vz. obr. 3.3). V takto rozděleném prostoru určíme všechny voxely, do kterých spadá objekt F, resp. jeho BB. Na D obrázku 3.3 to jsou voxely (,) a (,). Samotný test kolze se provádí pouze pro trojúhelníky z daných voxelů a trojúhelníky tělesa F. Obr. 3.3 3.4.3. BSP Strom Jednou z hojně využívaných možností jak rozdělt prostor je použtí tzv. stromů [8]. Těchto stromů exstuje celá řada, k těm nejpoužívanějším patří BSP Tree (vz. obr. 3.4). Prostor je rozdělen hyper-plochou tak, aby se v každé jeho polovně nacházelo zhruba stejné množství objektů. Pokud je scéna složena převážně ze statckých objektů, pak jsou rozdělovány jen statcké objekty, jako je tomu na obrázku 3.4. V případě scén, u kterých je toto schéma nedostačující, tzn. převažuje počet dynamckých objektů, je třeba jednou za čas, např. po přesunu většího počtu 6

objektů, strom znovu přerozdělt. Samotný test se provádí mez aktuálním lstovým objektem a BB testovaného objektu. Na základě polohy BB a dělící hyper-plochy se rozhodne o postupu stromem. Ostatní stromové algortmy, jako např. K-D-Tree[8], Quad-Tree [8] a jejch modfkace, se většnou lší ve formě uložení dat ve stromu a v počtu a druhu použtých hyper-ploch. Obr. 3.4 3.4.4. Herarche obalových těles Prostor lze také rozdělt jen pomocí obalových těles, které však uspořádáme do stromu. Takovýto strom může být tvořen například z obalových těles typu koule (vz. obr. 3.5). Ncméně, pro strom lze využít ostatní obalová tělesa, případně jejch kombnace. Obr. 3.5 7

4. Vyhodnocení kolze Po zjštění kolze nastává otázka, jak takovou kolz vyhodnott. Vyhodnocení kolze záleží na druhu a účelu aplkace, ve které se kolze odehrává. V našem případě se soustředíme na kolze týkající se počítačových her a jejch vyhodnocování. V počítačových hrách můžeme řešt různé druhy stuací, př kterých kolze nastává, například ve zjednodušené podobě: - srážka pohyblvého objektu a pevné překážky - srážka dvou pohybujících se těles Tyto kolze můžeme také různě vyhodnocovat. Například př nárazu pohyblvého tělesa do pevné překážky (nebo jného pohyblvého tělesa) může pohyblvé těleso explodovat (letící raketa narazí do domu nebo do letadla). Nebo může po detekování kolze dojít k zastavení některého z těles, případně ke vzájemnému klouzání těles (většna soudobých 3D her, kde se ovládaná postava př chůz zastaví o překážku). Dalším častým řešením je také odraz koldujících těles (fyzka v moderních 3D akčních hrách, např. střelba do plechovky). V této dplomové prác se budeme zabývat převážně řešením odrazu, a to na základě reálného fyzkálního modelu srážky dvou pevných těles. Odraz můžeme řešt více způsoby. Jako jednoduchý odraz obalového tělesa sphere (koule) na základě fyzkálních vzorců pro deálně pružnou srážku, kde se v úvahu nebere rotace an okolní vlvy prostředí (tření, odpor vzduchu). A nebo jako fyzkální odraz dvou lbovolných objektů, který se hlouběj opírá o fyzkální zákony a uvažuje jak translační tak rotační pohyb. I v tomto případě bude zanedbáno tření př srážce. Působení dalších vlvů, jako je odpor prostředí, lze zjednodušeně brát v úvahu v podobě působení vnějších sl na těleso. Nakonec s okrajově zmíníme také řešení výbuchu, které se dá provést velm jednoduše a efektně promítnutím anmace výbuchu na plochu kolmou ke kameře. Tato technka se nazývá bllboardng. 4.. Jednoduchý odraz Př jednoduchém odrazu dvou koulí, resp. koule a pevného objektu, nám pomohou fyzkální zákony. Z fyzkálního hledska řešíme škmou dokonale pružnou srážku. Př pružné srážce se obecně mění knetcká energe jednotlvých těles, které se srážky účastní. Celková knetcká energe soustavy před srážkou po srážce je však stejná []. 4... Odraz koule od pevné překážky Vzorec pro odraz koule od pevné překážky je jednoduše odvozen z poučky, kdy úhel odrazu se rovná úhlu dopadu (vz. obr. 4.) []: ( v n) n v = + v (4.) kde v je původní vektor rychlost, v je nový vektor rychlost a n je normála srážky. 8

Obr. 4. 4... Srážka dvou koulí Níže uvedené vzorce a výpočty vychází z Newtonova zákona zachování hybnost (.6,.7). Stuac př srážce dvou koulí reprezentuje obrázek 4.. Obr 4. Vektory U a U představují rychlost koulí v čase nárazu. Středy obou těles spojuje osa X, na které leží vektory Ux a Ux, což jsou vlastně průměty rychlostí do přímky X. Uy a Uy znázorňují projekce rychlostí těles na osy, které jsou kolmé k ose X. K jejch výpočtu postačí jednoduchý skalární součn. Do následujících rovnc dosazujeme ještě čísla M a M, která vyjadřují hmotnost koldujících koulí. Cílem je tedy vypočítat orentac vektorů rychlost U a U po odrazu, které budou je vyjadřovat nové vektory V a V. Čísla Vx, Vy, Vx, Vy představují opět průměty. Tento postup je jž odvozený například v serálu NeHe [], který se počítačové grafce věnuje. Abychom mohl hledat průměty do jednotlvých os, potřebujeme nejdříve najít osu, která spojuje oba středy (těžště) koulí: 9

30 ) ( S S OsaX = (4.) kde S a S jsou polohové vektory středů koulí a OsaX je směrový vektor osy, která spojuje obě koule. Nyní je třeba najít průměty aktuálních rychlostí do jednotlvých os: ( ) ( ) * * U OsaX OsaX U U OsaX OsaX U X X = = (4.3) Y Y X Y U U U U U U = = (4.4) Pomocí projekcí do jednotlvých os získáme nové rychlost: ( ) ( ) ( ) [ ] ( ) Y Y X X X X X U V M M M U U M U M U V / * * * = + + = (4.5) ( ) ( ) ( ) [ ] ( ) Y Y X X X X X U V M M M U U M U M U V / * * * = + + = (4.6) Výsledná rychlost je poté součtem vypočítaných průmětů nových rychlostí: Y X Y X V V V V V V + = + = (4.7) 4.. Fyzkální odraz Pro fyzkální odraz využjeme vzorců uvedených v kaptole. Fyzka. Pro řešení této problematky jsou nutné hlubší znalost v oblast fyzky [3, 4, 5, 6, 7, 8]. Fyzkální odraz budeme řešt ve dvou stuacích, př odrazu tělesa od pevné překážky a př srážce dvou těles navzájem. 4... Odraz od pevného objektu Jednodušší případ srážky je stuace, kdy těleso narazí do pevné překážky. V úvahu se totž berou velčny jen jednoho tělesa a snáze zjstíme bod a normálu kolze. Odraz objektu od pevné plochy s nyní popíšeme ve D rovně, kde je snadnější nastínt řešený problém (vz. obr. 4.3).

Obr. 4.3 Obrázek 4.3 znázorňuje srážku tělesa A s plošným tělesem v místě P. Vektory (ramena) směřující od středu tělesa k bodu P označíme jako r AP. Dále potřebujeme znát velčny jako rychlost, kterou značíme v A, úhlovou rychlost tělesa ω A a hmotnost tělesa M A. Důležté je rovněž určt normálový vektor srážky, který je př srážce tělesa a pevné překážky normálou rovny, do které objekt narazl. Jedním ze základních výpočtů je výpočet relatvní rychlost: v = v + ω r (4.8) AP A Bereme-l v úvahu normálový vektor, můžeme vypočítat relatvní normálovou rychlost: v norm A AP ( v + r ) n = v n = ω (4.9) AP A kde v norm je relatvní normálová rychlost v místě srážky, od které se budou odvozovat další výpočty. Pokud chceme brát v úvahu jnou než deálně pružnou srážku, musíme tuto rychlost zohlednt koefcentem, který určuje míru odrazvost. Tento koefcent se nazývá koefcent odrazu a značí se písmenem e. Úpravou vzorce (4.9) dostáváme: v norm Vztah mez relatvním rychlostm před a po srážce udává vzorec: A AP = e * v n (4.0) AP AP v n = e * v n (4.) Př vyhodnocování výsledné rychlost objektu musíme znát sílu, kterou se od sebe objekty odrazly. Tato síla se nazývá mpuls síly a značí se J (její výpočet odvodíme pozděj, z následujících vzorců). Díky znalost této síly můžeme stanovt novou rychlost: J v = v + n (4.) M a novou úhlovou rychlost: AP A rap * J ω = ω + n (4.3) I A 3

kde I A je moment setrvačnost tělesa (vz. kaptola.3. Moment setrvačnost a matce setrvačnost). Odvozování výsledného mpulzu síly začneme rovncí (4.), do které dosadíme za proměnnou AP v vztah pro výpočet relatvní rychlost (4.8), poté za v a ω vztahy (4.) a (4.3): v AP n = e * v n A A A A ( v + r ) n = e* ( v + ω r ) ω n (4.4) AP AP A J A rap * J v n n r AP n = e M A I + + ω + * A Nakonec z tohoto vztahu vyjádříme mpuls síly J: AP A A ( v + ω r ) n AP J = M A ( + e) * v + I A * [( r n) r ] AP AB n AP (4.5) 4... Srážka dvou těles Obr. 4.4 Pokud se srazí dvě tělesa (vz. obr. 4.4), je stuace podobná jako př srážce tělesa a plošného objektu. Pouze je třeba do výpočtu relatvní rychlost zahrnout vzájemnou relatvní rychlost obou těles: kde následující: v AB = v v (4.6) AP BP v AP v BP vypočítáme ze vzorce (4.8). Vzájemný vztah mez rychlostm je poté AB AB v n = e * v n (4.7) 3

Obdobným způsobem jako v předchozím případě odvodíme mpuls síly a to tak, že do vzorce (4.7) dosadíme vztah pro relatvní rychlost (4.6), kde jednotlvé rychlost vypočteme podle vzorce (4.8): v AB n = e* v n AP BP AP AB ( v v ) n = e *( v v ) n A A B B A A B B [( v + ω r ) ( v + ω r )] n = e* [( v + ω r ) ( v + ω r )] n AP AB a konečně výsledné rychlost nahradíme vzorc (4.) a (4.3): v v A B + + = e * J M J M A B BP n + ω n + ω A B A A ( v + ω r ) n Z tohoto vztahu vyjádříme mpuls síly J: J = M A + M B + AP rap * J + n r I A rbp * J + n r I B ( + e) * v * n AP BP AP n n = [( I *( r n) r + ( I *( r n) ) r ]* n A AP AB AP B BP BP BP (4.8) (4.9) (4.0) 4.3. Exploze Exploze je řešena pomocí technky zvané bllboardng []. Technka bllboardngu mění orentac bllboardu (tj. objekt, na který je promítaná textura) tak, aby byl umístěn čelně k cíl, obvykle ke kameře. Tato technka je poměrně populární ve hrách a v dalších aplkacích, které využívají velké množství polygonů. I přes neustálý vývoj grafckých karet narůstá potřeba zpracovávat stále větší počty polygonů. Bllboardng umožňuje tento počet snížt použtím trku (tzv. fnty) s vhodnou texturou. Rozlšujeme dva typy bllboardngu, cylndrcký a sfércký. Ve sfércké verz není žádný problém s orentací objektu. Zato v cylndrckém přístupu je rotace objektu svázána s vektorem rotace, a to obvykle v poztvním směru osy Y. Sfércký přístup se uplatňuje zejména u her, kde je možnost rotovat kamerou ve všech osách, např. vesmírný smulátor. Cylndrcký přístup naopak ve hrách, kde dochází k pohybu po jedné rovně. Exstuje několk technk bllboardngu. Podvodné (cheatng), které jsou rychlé nebo jednoduché, ale neposkytují pravý bllboardng, a pravé, které umožňují nastavení bllboardu čelně ke kameře nebo jnému lbovolnému objektu. Podvodné metody natočí bllboard tak, že normálový vektor bllboardu je shodný s nvertovaným vektorem kamery (vz. obr. 4.5). Pravé metody natáčí bllboard kolmo na kameru (vz. obr. 4.6). 33

Obr. 4.5, Obr. 4.6 34

5. Použté nástroje Cílem tohoto dplomového projektu je namplementovat algortmy pro detekc a vyhodnocování kolzí na základě fyzkálního modelu v jednoduché vrtuální scéně a vytvořt pomocný program pro výpočet potřebných fyzkálních velčn. Pomocný program pro výpočet velčn je mplementován v objektově orentovaném jazyce C++ [, 3] s využtím grafckého nástroje OpenGL s použtím knhovny GLUT (The OpenGL Utlty Toolkt) [4]. Další použtou knhovnou je knhovna ColDet [5]. Algortmy pro detekc a vyhodnocování kolzí jsou demonstrované ve více aplkacích, ncméně všechny aplkace s těmto algortmy byly mplementovány v objektově orentovaném jazyce C++ ve vývojovém prostředí Vsual Studo.net za použtí grafcké knhovny Open Inventor [6, 7]. Použté textury a modely byly vytvořeny v modelovacím studu 3D Studo Max. Tyto modely jsou zjednodušeným verzem modelů poskytnutých dříve pro ročníkový projekt Knhovna pro detekc kolzí mez objekty scény. Více o programovacím jazyce C++ je uvedeno v ctované lteratuře [, 3], pro blžší seznámení s grafckou knhovnou OpenGL postačí dostupné referenční manuály. Nyní s více přblížíme pouze dva použté nástroje, které nejsou všeobecně používané a známé, a to knhovnu ColDet a grafckou knhovnu Open Inventor. 5.. Knhovna ColDet Tato knhovna slouží pro detekc kolzí na trojúhelníkové úrovn. Umožňuje provádět detekce kolzí mez jednotlvým tělesy, mez tělesem a paprskem, mez tělesem a koulí. Dále umí vyhodnott trojúhelníky a bod srážky. 5.. Knhovna Open Inventor Mmo dobře zpracovaného manuálu [7] o knhovně Open Inventor exstuje článek na serveru www.root.cz: Open Inventor je knhovna napsaná v C++ a postavená nad OpenGL, která posunuje programátora od prmtvního OpenGL rozhraní na vyšší úroveň a nabízí mu rozsáhlou množnu C++ tříd. Ta podstatně zjednodušuje prác programátora a dokonce často poskytuje vyšší výkon než přímá mplementace v OpenGL. Vyšší výkon je možný díky jstým optmalzacím, které Open Inventor může provádět nad daty scény. Běžný programátor také obyčejně nemá čas provádět proflování a optmalzac renderovacích algortmů. Proto jž vyproflované rutny Inventoru nejsou špatnou volbou. Desgn Open Inventoru vychází z konceptu grafu scény. Tedy, scéna je složena z uzlů - anglcky nodes. Nody jsou různých typů. Jedny nesou nformace o geometr těles (krychle, kužel, model tělesa), další různé atrbuty (barva, textury, souřadnce objektu) a také exstují specální nody, které obsahují seznam jných nodů, anglcky zvané groups. A právě tyto groupy umožňují organzovat ostatní nody do herarchckých struktur zvaných grafy. Takovýto graf nám pak reprezentuje naš scénu. Celou problematku s můžeme hned ukázat na prvním příkladu. 35

V tomto příkladu vytvoříme mnmální aplkac zobrazující červený kužel osvětlený jedním světlem. Graf scény, který budeme vytvářet, vypadá takto: Kořen grafu tvoří objekt typu SoSeparator. Předpona So (=Scene Object) se používá pro zabránění kolzím jmen ve vašem projektu s názvy tříd v Open Inventoru. SoSeparator je třída odvozená ze SoGroup, tedy základní třídy udržující seznam jných nodů. Třídu SoSeparator budeme používat místo SoGroup téměř vždy pro její specální vlastnost. Například proto, že dokáže scénu pod sebou předkomplovat do OpenGL dsplay lstu a tím urychlt proces renderování. Když se podíváme pod separátor, zjstíme, že má čtyř syny: kamera, světlo, materál a kužel. První z nch - kamera - je specální nod, který určuje umístění pozorovatele a některé další atrbuty pohledu do scény. Světlo (SoLght) osvěcuje scénu bílým světlem. Následující nod, tedy materál, udává optcké vlastnost kužele, jednoduše řečeno - udává jeho barvu. Posledním nodem je pak vlastní kužel, což je nod specfkující geometr tělesa. Text převzat z [6]. 36

6. Pomocná aplkace - Velčny V pomocné aplkac jsou naprogramovány algortmy pro výpočet stálých fyzkálních velčn potřebných pro vyhodnocení kolze na základě fyzkálního modelu. Počítaným velčnam jsou těžště tělesa a matce momentu setrvačnost (nerta tensor). Aplkace, mmo těchto velčn, počítá pro zadaný model jednoduchá obalová tělesa jako je koule (sphere) č osově orentované obalové těleso (AABB). Ovládání pomocné aplkace a náhled jsou přloženy v příloze I. Ovládání pomocné aplkace a screenshot. Př výpočtu těžště je využt složtější algortmus popsaný v kaptole... Algortmy pro výpočet těžště. Obdobně pro výpočet matce setrvačnost je použt algortmus z kaptoly.3.. Algortmy pro výpočet matce setrvačnost. Oba algortmy s jsou podobné, resp. oba musí projít objemem celého tělesa. Víme, že nelze počítat obě velčny (těžště, matc momentu setrvačnost) v jednom průchodu, protože algortmus na výpočet matce setrvačnost musí vycházet z modelu s osou souřadnc umístěnou v těžšt. Proto je celý průchod tělesem realzován dvakrát. 6.. Načtení a uložení modelu WRL Všechny používané modely jsou načteny ze souboru *.wrl, kde je model uložen podle standartu VRML V.0 utf8 [8]. Tento soubor je načten standartním funkcem jazyka C++ a zpracován tak, aby mohl byt použt v knhovně ColDet pro rozdělení modelu na voxely. WRML standart uchovává trojúhelníkový model jako pole vrcholů trojúhelníků a pole ndexů do tohoto pole vrcholů. Knhovna ColDet naopak svůj trojúhelníkový model reprezentuje přímo sledem jednotlvých trojúhelníků. Proto je nutné model překonvertovat z jednoho uložení do druhého, a to načtením vrcholů s postupným ndexováním a ukládáním do třídy knhovny ColDet. Př načítání všech vrcholů jsou zjštěny rovněž maxmální možné souřadnce modelu (tj. prmtvní obalové těleso), které se použjí př tvorbě voxelové mřížky. Př ukládání modelu se ukládají souřadnce tak, aby počátek souřadnc ležel v těžšt modelu. Stejné souřadnce musí být použty pro výpočet matce momentu setrvačnost. Souřadnce se proto přepočítávají jž pro algortmus matce momentu setrvačnost, ale do souboru se ukládají až po ukončení obou výpočtů. A opět se musí převést do standardu WRML. Společně se změněným souřadncem se na konec souboru uloží dodatečné nformace ve standardu WRML Info, které obsahují matc setrvačnost a jednoduchá obalová tělesa. Tato obalová tělesa se vypočítávají přímo př ukládání souřadnc. Pro obalové těleso koule stačí najít maxmální vzdálenost vrcholu od počátku souřadnc a pro obalový kvádr mnmální a maxmální hodnotu v každé ze souřadnc. 6.. Rozdělení modelu na voxely Velkým problémem př aplkac obou zmíněných algortmů je rozdělení trojúhelníkového modelu na jednotlvé voxely. Vhodným řešením je například rozdělt celý prostor, vymezený obalovým tělesem modelu, na jednotlvé voxely pomocí mřížky s danou přesností, resp. s daným 37

počtem dělících ploch. Rozdělení modelu pomocí mřížky je zobrazeno na obrázku 6., a to ve všech třech rovnách (XY, YZ, XZ). Obr. 6. Algortmus, který prochází celým objemem tělesa, využívá mřížky a cyklí se přes všechny tř souřadnce. Prvním z řešených problémů je určení, zda se má bod, daný aktuálním souřadncem, započítat č nkol, tedy zda se nachází uvntř nebo vně testovaného tělesa. Jednou z možností řešení je spustt paprsek přes jednu rovnu (ve směru jedné z os) a zjšťovat kolze tohoto paprsku a modelu. Zde přchází na řadu knhovna ColDet a její funkce pro zjšťování kolze tělesa a paprsku. Př spuštění paprsku přes model dojde př první (lché) kolz k vnknutí do tělesa a př druhé (sudé) kolz dojde k opuštění tělesa. Spuštění paprsku z rovny XY přes osu Z znázorňuje obrázek 6., a to včetně vstupního průsečíku P a výstupního P. S výsledným průsečíky lze požadovaného zjštění, zda se nacházím uvntř nebo vně tělesa, dosáhnout více cestam. Záleží na způsobu použté optmalzace nebo konkrétním modelu. Například lze jednoduše porovnávat souřadnce a jako vyhovující zvolt jen ty souřadnce mřížky, které se nacházejí mez průsečíky (na obrázku 6. by takto vyhovovaly dvě souřadnce mřížky). Druhým způsobem je přtáhnout (zaokrouhlt) průsečík na nejblžší souřadnc mřížky. Poté se počítá se souřadncem mřížky mez těmto body, a to buď včetně nebo kromě nch. Tím zde odpadá porovnávání (na obrázku 6. by vyhovovaly 3, resp. souřadnce mřížky). V tomto dplomovém projektu je použta metoda přtažení počítající s přtaženým souřadncem. 38

Obr. 6. 6... Problém mřížky Př používání voxelové mřížky nastávají určté zásadní problémy, které je nutné řešt. Většna problémů se vztahuje k tenkým částem modelu, jako jsou například křídla stíhačky apod. Př průchodu paprskem dojde v takovém tenkém místě k špatné detekc průsečíků nebo k vůbec žádné detekc, což záleží na zvoleném způsobu vyhodnocování průsečíků (vz. obr. 6.3). Pro modré paprsky (P, P, osa Y) v prvním případě vyhodnocení nedojde k nalezení žádného bodu mřížky (mez průsečíky není žádný bod mřížky). V druhém případě dojde k chybnému vyhodnocení, protože oba průsečíky se přtáhnou ke stejné (horní) mřížce. Nastane taková stuace, že bude lchý počet průsečíků (tento problém bude vysvětlen níže vz kaptola 6... Problém lchého počtu průsečíků). Konkrétně v případě paprsku P dojde k chybnému vyhodnocení na objemu křídla č u paprsku P dojde k chybnému vyhodnocení na trupu stíhačky, který se překrývá s ocasním křídlem. Pro zelené paprsky (P3, P4, osa X) nedojde k vyhodnocení objemu u křídel vůbec, protože mřížka je šrší než tloušťka křídla. Obr. 6.3 V reálných stuacích je mřížka dostatečně drobná, aby byly tyto tenké plochy započítávány, ale přesto dochází na těchto tenkých plochách k nepřesnostem a u extrémně tenkých ploch k chybám. Nepřesnost jsou způsobeny malým počtem započítávaných souřadnc mřížky. 39

Chyby vznklé problémem tenkých částí se dají částečně elmnovat pouštěním paprsku přes vhodnou osu nebo pouštěním paprsků postupně přes všechny osy s následným zprůměrňováním výsledků. V aplkac je možné s zvolt přesnost právě přdáním dalšího průchodu (pouštěním paprsku) přes další jnou osu. 6... Problém lchého počtu průsečíků Dalším problémem, který může př detekování kolzí nastat, je stuace, kdy spouštěný paprsek narazí na hranu modelu nebo na vrchol modelu (vz. obr. 6.4). Obr. 6.4 Paprsek P narazl na vrchol modelu a paprsek P na hranu, která je rovnoběžná s paprskem. Oba dva případy mají za následek lchý počet průsečíků (P jeden průsečík, P tř průsečíky), podobně jako v případě chyby s přtáhnutím na mřížku. Tento problém nelze vyloučt, lze jej však elmnovat na základě následujícího předpokladu. Př tvorbě modelu dochází k přtažení (zaokrouhlení) také na určtou mřížku přesnost. K tomuto zarovnávání může docházet z více důvodů. Například u některých jednoduchých modelů, kde je přesnost uvedena v celých číslech. Proto můžeme naší voxelovou mřížku záměrně posunout např. o /3 velkost mřížky, a tím se vyhnout průchodům v celých číslech, resp. shodám s mřížkou přesnost modelu. Pokud přesto k chybě způsobené lchým počtem průsečíků dojde, je třeba gnorovat celý objem tohoto konkrétního paprsku, protože nejsme schopn určt, které část jsou uvntř tělesa a které vně. Právě problém shody souřadnc modelu a voxelové mřížky vedl v tomto projektu k velkému počtu chyb způsobených lchým počtem průsečíků. Lepších výsledných hodnot aplkace dosahovala až př jemnějším kroku (přesnější mřížce), který vedl k dlouhé době výpočtu. Po zavedení optmalzace posunutí mřížky je jž procentuální chyba způsobená lchým počtem průsečíků zanedbatelná (vz. analýza v kaptole 6.4. Problém dostatečné přesnost, analýza). 40

6.3. Optmalzace průchodu přes objem Zmíněný algortmus hledání těžště (vz. kaptola.. Těžště tělesa) lze optmalzovat díky použtí metody pouštění paprsku. Př korektním průchodu paprsku objemem tělesa získáme dva průsečíky (sudý počet). Standardně se sčítají všechny souřadnce mřížky od lchého (vstupujícího) průsečíku až do sudého (vystupujícího) průsečíku, resp. se sčítají všechny souřadnce mřížky mez těmto průsečíky. Optmalzace spočívá v současném sečtení celého objemu tělesa v část paprsku, která je uvntř modelu. Pokud procházíme objemem například přes rovnu YZ, tzn. paprsek spouštím v ose X, budeme provádět jednoduchý součet lneární řady s X-ovou souřadncí. Sčítáme totž hodnoty souřadnc (x+0,y,z), (x+,y,z), (x+,y,z) (x+,y,z), což přestavuje lneární řadu. Souřadnce Y a Z se v daném průchodu nemění, stačí je tedy jen vynásobt počtem vyhovujících voxelů. Stuace je znázorněna na obrázku 6.5. Obr. 6.5 Pro každý úsek paprsku, který je uvntř tělesa, můžeme provést následující optmalzac (uvedeno v pseudokódu jazyka C), která nahradí poslední for cyklus v použtém algortmu z kaptoly...: For (pro každou část paprsku uvntř tělesa){ N=počet vyhovujících voxelů (uvntř tělesa) Tezste.X= Tezste.X+ N/ * (Pruseck.X+Pruseck.X) Tezste.Y= Tezste.Y+Mrzka.Y*N Tezste.Z= Tezste.Z +Mrzka.Z*N } Optmalzac založenou na stejném prncpu (součet lneární řady) lze využít u algortmu pro výpočet matce momentu setrvačnost, kde ve vzorc (.8), resp. (.) můžeme součet řady uplatnt na devační členy ( I XY, I YX, I XZ, I ZX, I YZ, I ZY ). Členy opačné (v matc symetrcké) se v algortmu nepočítají vůbec, ale přřadí se jako opačné až na konc výpočtu. Pro hlavní členy 4

momentu setrvačnost ( I XX, I YY, I ZZ ) tato optmalzace uplatnt nelze, ve vzorc se totž vyskytuje druhá mocnna a sčítaná řada v jedné ose jž není an lneární an geometrcká. 6.4. Problém dostatečné přesnost, analýza Oba výše zmíněné problémy (vz. kaptola 6... Problém mřížky a 6... Problém lchého počtu průsečíků) se dají řešt zpřesněním používané mřížky. I když př zjemňování mřížky roste počet lchých průsečíků, protože se častěj narazí na hranu, výsledná procentuální chyba je však menší. Se zjemňováním mřížky také roste násobná chyba př výpočtu matce momentu setrvačnost, a to kvůl kvadrátu proměnných (.7). Dostatečnou přesnost stanovujeme vždy na konkrétním modelu, a to pomocí analýzy tohoto modelu. Přesnost mřížky lze určt odhadem u jednoduchých č specfckých těles na základě předchozích zkušeností. V této dplomové prác byla provedena analýza nejjednoduššího modelu krychle, jednoduchého modelu jehlanu nejsložtějšího modelu stíhačky. Pro každý model bylo provedeno dostatečné množství analýz. Na základě provedených analýz lze vyvodt závěry pro dostatečnou přesnost kroku. 6.4.. Analýza hrubá mřížka Krychle je jedné těleso, u kterého lze jednoduše vypočítat těžště matc momentu setrvačnost. V této prác má použtá krychle stranu o rozměru 500 jednotek. Pokud model krychle umístíme fyzcky do středu souřadné soustavy (vrcholy budou na souřadncích 50 a -50) musí korekce těžště vycházet (0, 0, 0), tedy těžště se nebude posunovat. Pro výpočet matce momentu setrvačnost použjeme vzorec (.7). U krychle jsou však všechny strany stejně dlouhé, proto se výpočet zjednoduší: I XX = IYY = I ZZ = m ( * a ) (6.) Pokud tento vzorec budeme postupně aplkovat na zjemňující se mřížku, zjstíme, že výsledky se v malých krocích velm lší. V příloze II. Analýza krychle je uvedena analýza pro velm hrubou mřížku s těžštěm tělesa v souřadncích (0, 0, 0) za použtí programu Velčny, který počítá pouze matc momentu setrvačnost. Je zde také vdět, že vždy pouze v jedné ose vznkla velká chyba, způsobená špatným upnutím na mřížku v lbovolné z os. Obrázek 6.6 lustruje použté velkost jednotlvých mřížek krok = 50 jednotek, krok = 5 jednotek, krok = 6,5 jednotek. Červený bod přestavuje souřadnce středu mřížky. 4

Obr. 6.6 6.4.. Analýza časová náročnost Druhá provedená analýza krychle je zaměřená především na přesnost a časovou náročnost výpočtu (vz. Příloha III. Analýza krychle). Zde je zřetelné, že přesnost výpočtu se stále mění. To platí hlavně pro matc setrvačnost, protože se stále mění souřadnce těžště, na kterém závsí výpočet. Od velkost kroku 0.8333 (model je rozdělen na 600 dílků podle jedné z os) se jž nemění poměr na hlavní dagonále v matc setrvačnost, což je zásadní vlastnost počítané matce. Těžště je určeno s přesností jedné desetny jednotky, což je pro účely této práce také dostačující. Tato analýza však trvala zhruba 35 mnut. Obdobně byla provedena časová analýza pro model jehlanu a model stíhačky (vz. Příloha IV. Analýza jehlanu, Příloha V. Analýza stíhače). Jak je vdět na výsledcíh provedených analýz, se zmenšující se mřížkou roste přesnost výpočtu, ale také roste násobná chyba. Tato je markantní především u těles, které dobře vyplňují testovaný obalový box. Pro příklad u nejkomplkovanějšího modelu je dostačující přesnost cca 0,5 jednotky, kdy je model rozdělen zhruba na 600 dílků obdobně jako u krychle. 43

7. Implementace - Aplkace 7.. Rozdělení aplkací Aby bylo možno vyhodnocovat namplementované algortmy, je nutné vytvořt prostředí nebo-l vrtuální scénu (demo aplkac). Vrtuálních scén bylo pro účely tohoto dplomového projektu vytvořeno několk a to tak, aby dobře demonstrovaly namplementované algortmy a jednoduchý herní engne. Tř ze čtyř vytvořených aplkací mají čstě demonstratvní úkol, slouží jen k předvedení funkčnost kolzních a vyhodnocovacích algortmů. Všechny tř jsou umístěny do krychle, ve které se pohybují a koldují demonstrační objekty. První aplkace, nazvaná Box cube, obsahuje ty nejjednodušší tělesa, kvádry. Druhá aplkace, nazvaná Box object, obsahuje různé modely jednoduchých těles. A konečně poslední aplkace, nazvaná Box fghter, obsahuje pouze jeden složtý model stíhačky. Hlavní aplkace, nazvaná Průlet tunelem, je demonstrací jak kolzních a vyhodnocovacích algortmů, tak všech ostatních funkcí. Vyhodnocení kolzí je řešeno stejným algortmy jako v předchozích příkladech, navíc je přdáno řešení pomocí exploze, které je realzováno vystřelením rakety. Všechny aplkace se skládají se stejných programových modulů. Jelkož jsou v aplkac použty objekty, jsou moduly rozděleny podle společných funkcí jednotlvých objektů. Hlavním moduly jsou: - Man - hlavní modul, lší se v jednotlvých demonstračních aplkacích - SgoManager - modul pro správu objektů, detekce a vyhodnocení kolzí - SgObject - modul jednotlvých objektů - SgInterface - modul obsahující funkce prostředí (ovládání, kamera) - Bllboard - modul obsluhující bllboardng (exploz) Návod k ovládání demonstračních aplkací a náhledy jsou součástí přílohy VI. Ovládání aplkace a screenshoty. 7.. Prostředí Samotné prostředí hlavní aplkace je tvořeno tunelem. Konfgurace tunelu je načítána z externího souboru a může být tedy edtována. Tunel je tvořen jednoduchým statckým krychlem, které obsahují statcká dynamcká tělesa. Edtace tunelu probíhá edtací textového souboru s názvem tunel.txt, který je součástí datových souborů. Jak tento soubor edtovat je podrobněj popsáno v příloze VII. Tvorba tunelu. Prostředí je osvětlováno standardním funkcem Open Inventoru SoPontLght a SoSpotLght, pro které jsou vytvořeny vlastní třídy (vz. příloha VIII. SgInterface). Toto světlo je v prostředí použté jako globální, tedy osvětluje celou scénu a také je přlepeno na stíhačku. 44

7.3. Objekty v prostředí V projektu je mplementovaná třída SgObject, která umožňuje vkládat v podstatě lbovolné objekty do vytvořeného prostředí. Objekt je reprezentován velkým počtem atrbutů a použtých metod. Převážná část atrbutů je fyzkálních, vyjadřující statcký nebo aktuální fyzkální stav tělesa. Ve fyzkálních atrbutech jsou uloženy používané velčny, které byly podrobněj charakterzovány v kaptolách. Fyzka a 4. Vyhodnocení kolze. Detalní pops atrbutů a metod je v hlavčce funkce (vz. Příloha IX. SgObject). Některé klíčové metody budou více popsány níž v tomto textu. Samotný model objektu je reprezentován předem vytvořeným trojúhelníkovým modelem (resp. texturou), který se načítá ze souboru s modelem. V mplementac je pro uložení modelu použta třída Open Inventoru SoNode. V tomto projektu jsou použty konkrétní modely geometrckých těles a stíhačky. Je možné použít další lbovolné modely, ale jejch použtí v ukázkovém přkladu není zapotřebí. Seznam použtých modelů, spolu s autorským právy k těmto modelům, je uveden v souboru LICENSE, který je součástí přložených datových souborů. Většna reálných modelů je pro účely detekce kolzí přílš složtá, a proto se ve většně aplkací používají modely pouze dva, jeden model vykreslovací a druhý jednodušší kolzní model. V demonstrační aplkac je zbytečné pracovat s oběma typy modelů. Proto se používají jen kolzní modely a vznklé stuace jsou pak reálné. Používání dvou kolzních modelů je namplementované a je tudíž možné doplnt aplkac o propracované modely. Tvorba složtých modelů, resp. textur, by zabrala přílš velké množství času a nepřnesla by žádné funkční zlepšení. Navíc tvorba modelů a textur není součástí zadání této dplomové práce. Objekty v prostředí spravuje třída SgoManager, která zajšťuje pohyb a vzájemnou nterakc všech objektů scény. V této třídě jsou také mplementovány klíčové algortmy pro detekc a vyhodnocování kolzí. Třídy SgObject a SgoManager tvoří stěžejní třídy projektu, obě budou detalněj popsány v následujícím textu. 7.4. Pohyb v prostředí V každé scéně je potřeba zajstt patřčný pohyb kamery nebo umožnt pohled z objektů ve scéně jž umístěných (např. stíhačky) po daném prostředí. Obecně je v aplkac mplementováno prostředí s nastavtelným odporem prostředí (třecí síla). Tento odpor prostředí se projevuje jako síla působící na těleso. Ve třídě SgObject je atrbut uchovávající působící síly, proto je jednoduché přdat lbovolnou globálně působící sílu jako například vítr č gravtac, která ovlvňuje všechny tělesa. 7.4.. Kamera V projektu je použta perspektvní kamera, realzovaná v grafcké knhovně Open Inventor pomocí třídy SoPerspectveCamera, která nastavuje transformační matc OpenGL. Pro tuto kameru je v projektu vytvořena specální třída v modulu SgInterface, která umožňuje lépe pracovat s kamerou, oprot původní třídě, a nastavovat potřebné parametry (např. výška a vzdálenost od pozorovaného tělesa). Detalní pops třídy je přložen v podobě komentářů v příloze VIII. SgInterface. 45

V průběhu mplementace a testování bylo zjštěno, že je nutné nejprve nastavt orentac kamery a teprve poté kamerou posunout. Př obráceném pořadí funkcí by se kamera kousala a takový efekt není žádoucí. 7.4.. Ovládání Pohyb v prostředí nemůže být jen náhodný, proto by měl být ovládaný užvatelem. Z tohoto důvodu jsou parametry třídy kamery nastavovány podle reakcí užvatele. V operačním systému Wn3 jsou podněty z perferních zařízení předávány aplkac pomocí událostí, jejchž obsluhu provádí třída SoMouseButtonEvent pro obsluhu myš a třída SoKeyboardEvent pro obsluhu klávesnce. Tyto třídy Open Inventoru mají v dplomovém projektu opět vytvořenu vlastní třídu utvořenou na míru pro účely demonstrační aplkace. Tyto třídy jsou mplementovány v modulu SgInterface, a to třída SgMouse pro prác s myší a třída SgKeyboard pro prác s klávesncí (vz. příloha VIII. SgInterface). Pro lepší pohyb ve scéně je použto ovládání myší, z tohoto důvodu je nutné použít platformě závslé rozhraní WnAPI k ovládání kurzoru. Pro prác s kurzorem byly použty funkce GetCursorPos a SetCursorPos. Pro zlepšení ovládání se v každém snímku vrací kurzor do středové pozce okna. 7.4.3. Pohyb Pro pohyb ve scéně jsou mplementovány metody zajšťující pohyb rotac ve všech osách volnost. Vzhledem k původnímu vesmírnému prostředí (použtém v ročníkovém projektu) a záměru vytvořt jednoduchý herní engne, je ovládání mplementováno ve více varantách. Jednou z varant je ovládání ruční, které bere v úvahu všechny aspekty setrvačnost tělesa. Druhé ovládání využívá funkce auto plota a snaží se stablzovat stávající pohyb. V projektu je mplementováno třetí ovládání, a to absolutní změna polohy. Toto ovládání nepodporuje vyhodnocování kolzí, proto není v demonstrační aplkac povoleno a slouží spíše pro testovací účely. Otáčení a pohyb v prostoru je možné řešt mmo třídu SgObejct a nastavovat orentac přímo pomocí funkce setorentaton. Nebo lze využít funkcí namplementovaných ve třídě, které umožňují absolutní nebo relatvní rotac a pohyb ve všech osách. Pojmem absolutní rotace označujeme v tomto projektu rotac, př které užvatel stskne patřčnou klávesu a objekt rotuje, resp. pohybuje se po dobu stsknutí klávesy konstantní rychlostí, tzn. mění absolutně svoje natočení. Pojmem relatvní rotace, resp. pohyb, označujeme rotac, která je založená na fyzkálním modelu, také by se dala nazvat fyzkální. Tato rotace/translace funguje tak, že př stsku klávesy začne působt tažná síla, resp. zrychlení, která uvede objekt do pohybu. Působící síla může způsobovat lbovolné rotace v závslost na směru a umístění síly. Objekt proto obsahuje *6 párů vrtuálních motorů, které otáčí a posunují objekt ve všech osách. V deálním případě, pro detalní smulac, by objekt měl mít na každém ramen osy 4 páry motorů (celkem 4 motorů). Všechny stupně volnost zachycuje obrázek 7., kde modré vektory reprezentují síly způsobující rotac a barevné síly v těžšt tělesa reprezentují síly působící translac. 46

Obr. 7. Všechny provedené změny rotace a translace je nutné uložt do uzlu Open Inventoru SoMatrxTransform, a tím je aplkovat na celý objekt. Tato transformační matce obsahuje polohu (translac), natočení (rotac) a měřítko (scale) daného objektu. Uložení zajšťují výše popsané funkce pro absolutní a relatvní změnu rotace č translace. V popsu hlavčky třídy SgObject (vz. Příloha IX. SgObject) mají funkce pro absolutní rotac název Rot*, pro relatvní rotac mají název Torque* a pro edtac pohybu setpos, případně updpos. Integrace veškerých pohybových velčn (tzn. setrvačnost pohybu) pomocných velčn každého tělesa je prováděna pomocí metody TmeStep třídy SgObject, kde se aktualzuje pozce a rotace tělesa. Dále se vyhodnocují působící síly a přepočítává se matce setrvačnost podle aktuálního natočení tělesa. 7.5. Správa objektů Správa objektů scény je realzována hlavní třídou SgoManager, tzv. správcem objektů. Tato třída obsahuje klíčové algortmy detekce a vyhodnocování kolzí. Vybraným klíčovým algortmům je 47

věnována samostatná kaptola a budou rozebrány pozděj. Hlavčka třídy SgoManager je uvedena v příloze X. SgoManager. Třída SgoManager obsahuje základní funkce pro prác s objekty třídy SgObject. Objekty jsou uloženy v seznamu objektů (třída Open Inventoru SbLst). Nad tímto seznamem jsou mplementovány operace přdávání a odebírání jednotlvých objektů. Metody v třídě SgoManager lze rozdělt na následující skupny: - metody pro detekc kolzí - metody pro vyhodnocení kolzí - metody pro pomocné vypočty - metoda tmestep, zajštující chod aplkace, ntegrac velčn a volání ostatních metod V této prác metody použté pro detekc kolze jsou checkcollson, checkcollsonwth, checktranglecollson a ntersectoncallback, které zajšťují rozdělení prostoru a detekování kolze, jak jž bylo teoretcky popsáno v kaptole 3. Detekce kolzí. Metodam vyhodnocujícím kolze jsou resolvecollson, resolvecollsonball, resolvecollsonbody a ExplosonMssle, které zalštují vyhodnocení kolze na základě jednoduchého odrazu, fyzkálního odrazu č exploze (vz. kaptola 4. Vyhodnocení kolze). Pomocné metody zajšťují výpočty velčn nebo pomocné operace nad těmto velčnam. Jsou jm checkid, computetr, partoftrangle, dffexp, workintersectonponts, workintersectonvertexs, getintersectonpont a computenormal. Metodám pro detekování a vyhodnocování kolze, včetně pomocných metod, jsou věnovány samostatné kaptoly (vz. kaptola 8. Implementace - Detekce kolze a 9. Implementace - Vyhodnocení kolze), proto s v této kaptole uvedeme pouze tu metodu, která obstarává samotnou správu objektů, tzv. metodu tmestep. Dále s také představíme problém spojený se změnou pozce a vyhodnocením kolze (vz. kaptola 7.5.. Vyhodnocení pozce vs. detekce kolze). Metoda tmestep obsluhuje všechny ostatní funkce v každém snímku. Pokud se ve scéně nachází běžící anmace (exploze), tak j obslouží, tzn. zavolá funkc tmestep pro běžící anmac. Dále volá funkce pro samotné detekce kolze, tedy checkcollson. 7.5.. Vyhodnocení pozce vs. detekce kolze Původně algortmus řešl nejprve ntegrac pozce (vyhodnocení) všech objektů současně, a teprve poté zjšťovala, zda nedošlo k detekc kolze. Toto řešení je výhodné v tom, že postačí provést počet řešení rovný kombnac bez opakování všech dvojc objektů. Nevýhodou je, že pokud dojde k posunutí více těles, u kterých byla zároveň detekována kolze, je relatvně velká šance na vznk tzv. zakousnutých objektů. K tomuto zakousnutí může dojít, protože nastane více kolzí současně, což znamená, že pokud nastanou u jednoho shluku objektů, dojde ke špatnému vyhodnocení kolze a možnému zaklínění těchto těles. Stuac lustruje obrázek 7., kde koldují dva objekty a stěna. Pokud dojde například nejprve k vyhodnocení kolze, pak kolze se jž počítá se špatným hodnotam, které jsou způsobeny kolzí. 48

Obr. 7. Problém lze částečně elmnovat vyhodnocením pozce vždy jednoho objektu a okamžtým hledáním kolze s dalším objekty. V tomto případě je ale potřeba provést test na kolz u všech testovaných objektů mez sebou, tzn. testovat každý s každým. 49

8. Implementace Detekce kolze Použté algortmy vychází z teoretckých základů uvedených v kaptole 3. Detekce kolzí. Hlavní funkcí, která je volaná z metody tmestep, je funkce checkcollson. Ta vždy aktualzuje pozc objektu (zavolá metodu tmestep, a to pro každý objekt) a provede test, zda právě posunutý objekt nekolduje voláním metody chechkcollsonwth. Pokud dojde ke kolz, volá funkc pro vyhodnocení kolze resolvecollson. 8.. Rozdělení prostoru Rozdělení prostoru zajšťuje metoda checkcollsonwth. Aby nebyla detekce kolze tak náročná na využtí zdrojů, je prostor rozdělen na jednotlvé podprostory. V našem konkrétním případě tyto podprostory tvoří stěny jednotlvých krychlí tunelu. Každá krychle tvoří jednu oblast. Dále každý objekt má svůj obal (vz. kaptola 3.3. Obalová tělesa) pro zamezení neustálé detekce na úrovn modelů (trojúhelníků). Použtým obalovým tělesy jsou koule a osově orentovaný box. Jako metoda dělení prostoru je zvolena metoda herarche obalových těles jedné úrovně. Použtá metoda je jednoduchá, ale v této konkrétní prác velm účelná. Jako možnou optmalzac lze seznam krychlí převést na jednoduchý prostorový strom a dělt tak prostor metodou stromu (vz. kaptola 3.4.3. BSP Strom). 8.. Kolze obalových těles Kolze na úrovn obalových těles opět řeší funkce checkcollsonwth, která je v algortmu použta dvakrát. Poprvé pro detekování v jakém prostoru se nacházím, a to mez tělesy a referenčním krychlem tvořícím tunel, a podruhé př samotné detekc kolze mez objekty. S těmto optmalzacem probíhá samotná detekce kolze jen u objektů ve stejném prostoru, a to na úrovn obalových těles. Př nalezení kolze obalů je na základě druhu koldujících těles rozhodnuto o typu kolze a o případném pokračování detekce kolze na úrovn trojúhelníků. Kolze mez obalovým tělesy mohou být trojího druhu: - kolze koule vs. koule - kolze box vs. box - kolze koule vs. box V případě kolze koule vs. koule je určení průnku (kolze) jednoduchou matematckou operací. Stačí vypočítat vzájemnou vzdálenost obou těles, a pokud je menší než součet poloměrů těchto těles, došlo ke kolz. Toto je naznačeno na obrázku 8., kde r a r jsou poloměry obalových koulí a R je vzdálenost těchto koulí. Na tomto obrázku ke kolz koulí došlo. Kolz box vs. box lze provést postupným porovnáváním jednotlvých souřadnc BB. Celkem stačí provést 6 srovnání souřadnc: Teleso.Xmn < Teleso.Xmax, Teleso.Xmax > Teleso.Xmn Teleso.Ymn < Teleso.Ymax, Teleso.Ymax > Teleso.Ymn Teleso.Zmn < Teleso.Zmax, Teleso.Zmax > Teleso.Zmn 50

Jakmle alespoň jedno porovnání je pravdvé, došlo ke kolz boxů. A nakonec, v posledním případě (box vs. koule), se dá vyřešt testování obalením samotných obalových těles. Tedy původní obalové těleso obalím do dalšího, a provedu jak detekc mez koulem tak detekc mez boxy. Pokud nastala kolze v obou případech, původní obalová tělesa koldují. Stuac znázorňuje obrázek 8., kde černé původní obalové těleso je obalené novým modrým. Na tomto obrázku ke kolz původních obalových těles nedošlo, protože obalové boxy vzájemně nekoldují. Obr 8. Podrobnější vyhodnocení kolze na úrovn trojúhelníků nastává jen v případě řešení kolze na základě fyzkálního modelu. 8.3. Kolze na úrovn modelů V případě podrobnější detekce na úrovn trojúhelníků se volá metoda checktranglecollson, která vytvoří skrytou scénu, do níž se umístí koldující modely. Na tuto skrytou scénu je poté aplkována funkce Open Inventoru SoIntersectonDetectonActon, která př kolz na úrovn trojúhelníků modelů vyvolá callback funkc ntersectoncb, a tato následně kolz obslouží potřebným níže popsaným způsobem. Po skončení detekce je skrytá scéna vyprázdněna a schována pro další použtí. Ve funkc ntersectoncb se řeší uložení kolzních trojúhelníků a výpočet průsečíků těchto trojúhelníků. Tato funkce je postupně vyvolávána pro každou koldující dvojc trojúhelníků. Právě pro tyto dvojce trojúhelníků hledáme jejch vzájemné průsečíky, které uložíme do seznamu kolzních bodů pro další zpracování. Průsečíky hledáme metodou podrobněj popsanou v kaptole 3. Kolze trojúhelník vs. trojúhelník. 5

Obr. 8., Obr. 8.3 Na obrázku 8. je zachycen nejjednodušší možný případ kolze, kdy několk trojúhelníků prvního tělesa pronkne do jednoho trojúhelníku druhého tělesa. Funkce ntersectoncb vyhodnotí jako kolzní dvojce trojúhelníky (ABD, IJK), (ACD, IJK), (CBD, IJK). Z těchto dvojc poté vypočítáme průsečíky podle vzorce (3.5), resp. (3.6). U průsečíků musíme ověřt, zda opravdu leží v druhém trojúhelníku, a to aplkací vzorce (3.9). Pro konkrétní dvojc trojúhelníků ABD a IJK jsou pak vyhovující průsečíky P a P (vz. obr. 8.3). 5

9. Implementace Vyhodnocení kolze Poté, co je detekován a určen typ kolze koldujících těles, může dojít k jejímu vyhodnocení. Vyhodnocení kolze je v této dplomové prác provedeno třem, resp. pět, metodam. Jsou jm vyhodnocení jednoduchého odrazu (koule vs. pevné těleso, koule vs. koule), vyhodnocení fyzkálního odrazu (těleso vs. pevné těleso, těleso vs. těleso) a vyhodnocení explozí. Vyhodnocení srážek provádí metoda resolvecollson, která ošetří kolz s kamerou a zavolá metody pro vyhodnocení jednotlvých druhů kolzí. Kamera je specálním objektem, pro který se kolze v případě volné kamery vyhodnocují a v případě vázané kamery naopak nevyhodnocují. 9.. Exploze Kolze, která se má vyhodnott explozí, je vyhodnocována funkcí ExplosonMssle a to tak, že nechá raketu explodovat. Prvním úkonem ošetřeným těsně před samotnou explozí je odebrání explodujícího tělesa ze seznamu objektů scény, případně přesměrování kamery na jný objektv stuacích, kdy byla kamera upnuta právě na explodovaný objekt. Následně se do scény umístí anmovaný bllboard s explozí na původní místo explodujícího objektu (hlavčka třídy Bllboard vz. Příloha XI. Bllboard). Správce scény (sgomanager) má k dspozc svůj seznam jž exstujících bllboardů (exstuje nstance třídy bllboard), které mohou být právě používány a běží na nch anmace, nebo jsou volné. V případě, že má správce volný bllboard k dspozc, pouze ho ncalzuje novým hodnotam a nechá spustt novou anmac. Pokud není žádný bllboard volný, vytvoří správce novou nstanc, kterou ncalzuje a umístí na konec seznamu bllboardů. Na tomto bllboardu opět spustí anmac. Za povšmnutí stojí také metody usebllboard a tmestep třídy Bllboard. Začneme jednoduší metodou, tedy usebllboard, která označí bllboard jako použtý a nastaví první zobrazovaný frame anmace. Případně ta samá metoda volaná s parametrem nové pozce nastavuje rovnou pozc bllboardu, a tudíž se jž nemusí nastavovat explctním voláním příslušné funkce. Hlavní metodou, ve které se provádí samotná anmace, je metoda tmestep, která je vyvolána v každém snímku. Tato metoda v první řadě upravuje natočení bllboardu ke kameře, a to pomocí ukazatele na použtou kameru. Orentace bllboardu je provedena tak, že orentace z transformační matce kamery je přřazena do transformační matce bllboardu s následným otočením o 80, proto aby byl bllboard otočený ke kameře, nkol od kamery. Anmace je optmalzována, proto není načítán každý snímek anmace zvlášť, ale všechny snímky anmace jsou umístěny v jedné textuře (vz. obr. 9.). 53

Obr. 9. Takto se na textuře mění pouze texturovací souřadnce. Anmace je prováděna s určtou rychlostí, kterou určuje atrbut FPS. V okamžku, kdy nastane čas k výměně snímku anmace, dojde k přemapování texturovacích souřadnc pomocí funkce updatetexturecoordnate. Po provedení anmace (zobrazení všech snímků) se bllboard sám uvolní ze scény, tzn. jž se dále nezobrazuje. 9.. Jednoduchý odraz Jednoduchý odraz je ze zvolených algortmů pro vyhodnocování kolzí as nejjednodušší. Pro dvě koldující tělesa se vypočítá odraz jako v případě dvou koulí, a to bez ohledu na rotac. Tento výpočet je detalně rozebrán v kaptole 4.. Jednoduchý odraz. Po vypočtení nových rychlostí a směrů těles se objekty umístí na poslední známé nekoldující souřadnce, a tím je kolze vyřešena. 9.3. Fyzkální odraz Fyzkální obraz byl as nejsložtější částí projektu. Samotná teore fyzkálního odrazu je podrobně rozepsána v kaptolách. Fyzka a 4.. Fyzkální odraz. Vyhodnocení odrazu na základě fyzkálního modelu je realzováno ve funkc resolvecollsonbody, která je mplementovaná podle uvedených vzorců (vz. kaptola 4.. Fyzkální odraz). Samotná mplementace fyzkálního odrazu není tolk složtá, problematcké však bylo zajšťování potřebných fyzkálních velčn. U velčn jako je rychlost, pozce nebo samotné souřadnce koldujících těles není problém, protože tyto velčny (atrbuty) jsou obsaženy buď v příslušných 54

strukturách, nebo v objektu samotném. Problémovým velčnam jsou těžště tělesa a matce momentu setrvačnost (vz. kaptoly.. Těžště tělesa a.3. Moment setrvačnost a matce setrvačnost). Pro tyto parametry byla namplementována specální aplkace, počítající pouze tyto velčny (vz. kaptola 6. Pomocná aplkace Velčny). Charakterzace dalších problémových velčn a stuací následuje. 9.3.. Bod kolze Na první pohled se může zdát otázka výpočtu bodu kolze jako jednoduchá, skutečností však je, že patří k těm složtějším výpočtům v rámc tohoto projektu. Vzhledem k tomu, že se pohybujeme v rovně dskrétních funkcí a ne spojtých, jak by bylo pro fyzkální model potřeba, vznká takto mnoho doprovodných problémů. Prvním z nch je samotná detekce kolze, př které dochází k průnku těles, právě v důsledku dskrétního posunu těchto objektů. Platí, že př průnku těles nám zankne kolzní bod a normála, které se následně musejí vypočítat z objemu vznklého tímto průnkem. Jž byla zmíněna funkce Open Inventoru SoIntersectonDetectonActon, resp. ntersectoncb, která detekuje kolz dvou těles a vrací všechny koldující trojúhelníky. Zároveň vypočítává všechny průsečíky těchto trojúhelníků. Tyto průsečíky poté musíme elmnovat pouze na průsečíky tvořící přesně kolzní objem, resp. kolzní těleso. K tomu slouží další funkce workintersectonponts. Funkce workintersectonponts elmnuje chybné kolzní body na základě předpokladu, že bod, který je ve výčtu uveden vícekrát, je právě tím hledaným kolzním bodem. Například z obrázku 9. průsečík P nalezneme jak pro dvojc trojúhelníků (ABD, IJK), tak pro (ACD, IJK), obdobně pro bod P to jsou dvojce trojúhelníků (ABD, IJK) a (CBD, IJK). Obr. 9. Z takto vypočítaného kolzního tělesa, pomocí funkce getintersectonpont, vypočítáme kolzní bod. Ten je vypočítán tak, že jmenovaná funkce nalezne těžště kolzního tělesa. Algortmus pro výpočet těžště je uveden v kaptole... Algortmy pro výpočet těžště. Problém nastává, pokud těleso (tělesa) koldují na více místech současně (vz. obr. 9.3). V místě S a S jsou vypočítány správné průsečíky, jenže objemové těleso je tvořené oběma shluky najednou a tedy výsledný bod srážky P (těžště) je počítán ze špatného objemového tělesa. Tato chyba vede k tomu, že bod kolze se vypočítá nesprávně, a to někde mez místy S a S (modrá plocha), 55

v závslost na počtu průsečíků v jednotlvých místech S a S. Tuto chybu pravděpodobně nelze odstrant bez použtí složté heurstky. Obr. 9.3 9.3.. Normála kolze Výpočet normály kolze je zatížen podobným problémy jako výpočet bodu kolze. Před samotným výpočtem normály, která se rovněž počítá na základě koldujících trojúhelníků, je zapotřebí trojúhelníky uložené funkcí ntersectoncb upravt pomocí funkce workintersectonvertexs. Protože funkce ntersectoncb hledá dvojce koldujících trojúhelníků, mohou se v seznamu trojúhelníků každého objektu objevt stejné trojúhelníky vícekrát. Tyto výsledky jsou elmnovány právě funkcí workintersectonvertexs. Po elmnac stejných trojúhelníků můžeme přstoupt k výpočtu samotné normály. Funkce computenormal vypočítá normálu. Normála je ve výpočtu fyzkálního odrazu důležtá a rozhoduje, které těleso se doráží od kterého a jakým směrem. Jak jž bylo zmíněno u výpočtu kolzního bodu, problém nastává př dskrétním pohybu objektů a př vyhodnocení srážky jako průnku dvou těles, proto nemůžeme jednoznačně určt, které těleso narazlo do kterého. Rozlšujeme dva druhy těchto srážek, jednoduchou a složtou (vz obrázek 9.4). 56

Obr. 9.4 Př jednoduché srážce pronká několk trojúhelníků jednoho tělesa do jednoho trojúhelníku druhého. Tuto srážku lze vyhodnott tak, že normálu vypočteme z osamoceného trojúhelníku. Výsledná normála je tedy samotná normála tohoto trojúhelníku, resp. rovny, kterou trojúhelník tvoří (např. 3.). Př složté srážce pronká několk trojúhelníků jednoho tělesa do několka trojúhelníků druhého tělesa. Zde není jednoznačné, které těleso narazlo do kterého, proto se pro výpočet normály zvolí těleso s menším počtem koldujících trojúhelníků. Pro zvolené těleso se vypočítají normály pro všechny tyto trojúhelníky, které se ve výsledku zprůměrňují. Normály zprůměrňujeme tak, že vektory sečteme a výsledný vektor normalzujeme. V případě srážky se statckým tělesem se automatcky počítá normála ze statckého tělesa. Problém může nastat př průnku rotačních těles (např. válec), nebo jných plochou ukončených těles. Na obrázku 9.5 pronká 5-stěn do plochy. Př výpočtu normály dojde k stuac, kdy zprůměrňování vektorů (modré špky) všech trojúhelníků se blíží nule. V takovém případě nedostaneme rozumný výsledek výpočtu normály a celý výpočet odrazu poté proběhne chybně. Tato chyba se pravděpodobně bez použtí složté heurstky nedá odstrant a způsobuje tak chybné odražení. Chyba ve výpočtu normály má ve výsledném výpočtu největší váhu. Od normály se totž odvíjí většna dalších výpočtů. 57

Obr. 9.5 58

0. Implementace - Přesnost algortmů Jelkož je výpočet tvořen často na sobě závslým dílčím výpočty, je výsledek zatížen velkou chybou. Výsledná chyba se dělí na chybu jednotlvých úloh, zaokrouhlovací chybu ve všech výpočtech a násobnou chybu mez jednotlvým výpočty a závslým úloham. Zásadní vlv na chybu ve výpočtu mají tyto velčny: - normála kolze, byla popsána - výpočet bodu kolze (kolzních bodů), též byla popsána - přesnost těžště - přesnost matce setrvačnost Dalším faktorem ovlvňující tuto chybu je rychlost konkrétního počítače a grafcké karty. Čím pomalejší je stroj, tím je menší počet snímků za sekundu, a tím je větší kolzní objem těles. Větší kolzní objem těles způsobuje větší chyby př výpočtech normály a kolzních bodů, a další problémy s nm spojené. 0.. Přesnost těžště a matce setrvačnost Př výpočtu se určuje rameno srážky, které se vypočítává z bodu srážky, a těžště tělesa. Pokud je v jednom z bodů chyba, jsou chybně vypočítána ramena, která se dále používají ve výpočtu. S většnou vektorů je prováděn vektorový součet a chyba vznklá chybným těžštěm, nebo bodem srážky, může mít poté zásadní vlv jak na velkost, tak na směr vektoru. Obdobně chyba v matc setrvačnost má také zásadní vlv na výpočet, a to protože přes matc setrvačnost se pronásobuje většna vektorů. S použtím matce setrvačnost vznkl př řešení dplomového projektu další nečekaný problém. Algortmus totž neumí pracovat s lbovolnou matcí setrvačnost, která využívá devační momenty. A většna vypočítaných matcí setrvačnost je špatně podmíněná a v algortmu nepracuje korektně. Matce obsahuje velké číselné rozdíly, velká čísla na hlavní dagonále a naopak čísla blízká nule ve zbytku matce. Zjštění, že algortmus nepracuje korektně s plnou matcí setrvačnost, ale jen s matcí dagonální (složenou jen z momentů setrvačnost) zabralo dlouhou dobu věnovanou ladění a testování aplkace. Tento problém se ukázal řeštelný, protože model se snažíme vycentrovat do těžště a matce setrvačnost pro těleso, které má střed souřadné soustavy v těžšt má devační momenty rovny nule. Proto byla po provedené analýze a zjštění těchto skutečností upravena funkce programu velčny tak, aby devační momenty zaokrouhlla na nulu. Tím se matce setrvačnost pro tělesa, která mají pevně dané těžště, spíše upřesnla. 0.. Zaokrouhlovací a násobná chyba Zaokrouhlovací chyba vznká př každém výpočtu a výpočtů je v aplkac relatvně hodně. Chyba vznklá zaokrouhlováním je však relatvně malá, č dokonce zanedbatelná, vůč ostatním chybám. Tato chyba je ale nepatrně větší než by mohla být, protože př většně výpočtů musel být použt datový typ float, který je mplementován ve všech objektech knhovny Open Inventor místo datového typu double. 59

Násobná chyba vznká př použtí jednoho chybného výsledku v další operac, takto se chyba neustále zvětšuje. Jelkož většna dílčích úloh je na sobě závslých, není tato chyba zanedbatelná a je nutné počítat s tím, že ovlvní výsledek odrazu. Násobná chyba se nedá odstrant, dá se však elmnovat použtím jných metod výpočtů, případně upravením algortmu. Největší násobná chyba byla v průběhu testování ladění a testování aplkace odstraněna. Jednalo se o chybu vznklou př přepočítávání momentu matce setrvačnost v každém snímku běžící aplkace. Chyba rostla velm rychle, protože matce se počítala z matce předešlého snímku. Elmnace byla provedena úpravou algortmu tak, že se pro výpočet používala základní matce momentu setrvačnost, nkolv matce z předchozího snímku. 0.3. Ovlvnění výsledku Jelkož je výpočet ve výsledku zatížen velkým počtem chyb, dochází k chybnému vyhodnocení odrazu. Chybně je vyhodnocena jak velkost působící síly, tak její směr (vektor). Velkost působící síly by neměla způsobovat žádné vdtelné problémy v aplkac. Zato však směr odrazu jž způsobuje další problémy. Většnou př mezních stuacích ve výpočtu, kdy některé z vektorů svírají mez sebou úhly blížící se 80, 90, 0, může být směr vyhodnocen úplně špatně nebo s velkou chybou, a následně může dojít k zakousnutí těles. K zakousnutí může dojít př relatvně malé chybě, kdy mají být výsledné vektory pod malým úhlem. Jako zakousnutí těles je označeno vzájemné a trvalé pronkání a vyhodnocování kolze. Těleso se může z tohoto stavu dostat časem samo, nebo v něm dlouhou dobu setrvávat. Některé z těchto chyb by šly pravděpodobně vyřešt komplkovanou heurstkou. Například když dojde k nežádoucímu stavu zakousnutí, lze od sebe objekty ručně odtrhnout nebo dát náhodný mpuls síly oběma koldujícím tělesům. 0.4. Chyba aproxmace a statckého tělesa Každý lbovolně složtý objekt je reprezentován matcí momentu setrvačnost. Tato matce udává rozložení hmoty kolem jednotlvých os. Pro pravdelné objekty jako je kvádr č krychle je rozložení hmoty správné a použtý algortmus pracuje relatvně dobře s ohledem na další chyby. Ncméně pro nepravdelná tělesa, jako je například stíhačka, je rozložení hmoty sce ve správném poměru, nkol v objemu (vz. obr. 0.). Červený čtverec představuje předpokládaný objem stíhačky rozložený v jednotlvých osách, který je reprezentován matcí momentu setrvačnost. Obr. 0. 60

Pokud nastane stuace, že dojde ke srážce se statckým tělesem v místě mmo červenou oblast (srážka S), dojde k chybnému výpočtu a tedy k navýšení odrazové energe. Pokud dojde naopak ke srážce v místě S, energe odrazu bude chybně snížena. Z tohoto vyplývá, že pokud dojde k sér odrazů mmo červenou oblast, dojde ke kaskádnímu navyšování energe, které někdy (například v demonstrační aplkac Box-Fghter) zapříční extrémní nárůst rychlost a následné proskočení stěnou boxu. Př srážkách těles mez sebou nemá tato chyba takový vlv. V řízené aplkac (demo aplkace průlet tunelem) nebo př použtí tlumení se chyba také plně neprojeví. Chyba popsaná jako chyba aproxmace není v rámc této práce matematcky podložena. Použtá lteratura se problémem zabývá jen v teoretcké rovně [4] a nalezená praktcká řešení využívají zase jen jednoduchých objektů jako krychle a kvádr [5, 6, 7, 8]. Proto byla provedena řada testů, které nepřímo ukazují na chybu způsobenou aproxmací. Testy byly provedeny pro jednotlvé modely krychle, kvádru a stíhače v uzavřené statcké krychl, obdobně jako demo příklad Box-Fghter. Pro krychl a kvádr aplkace běžela cca hodnu a za tuto dobu došlo k překročení maxmální energe soustavy u méně než % zaznamenaných kolzí. Tato chyba je způsobená vlvem ostatních chyb. Pro model stíhače však dochází k překročení energe velm často a statstku není možné provést, protože energe př špatných odrazech roste násobně. Počet odrazů, resp. doba správného běhu aplkace, závsí na počátečním nastavení parametrů. Demo aplkace Box-Stíhač je proto nastavena tak, aby k chybám docházelo co možná nejméně. Jným možným způsobem by bylo nepoužívat model jako komplexní objekt, ale rozdělt ho na pevně defnované a vázané objekty, u kterých je moment setrvačnost znám, a následně řešt problém jako soustavu takto defnovaných objektů. Tento problém představuje v podstatě přesnou fyzkální smulac a je přesahuje rámec této práce. Obecně př srážce se statckým tělesem dochází ke změnám celkové energe, protože statcké těleso gnoruje působící síly. Tím dochází př srážce se statckým tělesem k porušení zákona o zachování energe, což také může způsobovat nečekané chyby př odrazu. 0.5. Chyby knhovny Open Inventoru Ve fáz testování a konečného ladění projektu se objevla výjmka v aplkac, která je způsobená chybou ve funkc IntersectonDetectonActon v knhovně Open Inventor. Po zajštění nových knhoven se jž výjmka neobjevovala. Další závažnou chybou Open Invetoru je problém ztráty focusu př vyvolání lbovolného dalogu. Tato chyba byla také vyřešena. V orgnálním archvu a na stránkách knhovny Open Inventor jsou k dspozc knhovny, obsahující tyto chyby. Díky panu ng. Pečvov jsou k dspozc v rámc této dplomové práce překomplované funkční knhovny. K projektu jsou přloženy tyto funkční knhovny, které je nutné použít pro správnou funkc demo aplkací. 6

. Etapy vývoje Každé větší vývojové etapě projektu předcházelo studum lteratury souvsející s daným problémem. Proto s nyní představíme pouze fáze praktcké mplementace. Nastudování potřebných materálů probíhalo souběžně s řešením mplementovaných problémů... Rozsah ročníkového projektu Dplomová práce vychází z ročníkového projektu s názvem Knhovna pro detekc kolzí mez objekty scény. První práce spočívala v seznámení s knhovnou Open Inventor a mplementování trvální vrtuální scény (grafckého okna aplkace). Tato scéna obsahovala jednoduchou sluneční soustavu reprezentovanou koulem. První detekce kolzí byla provedena pouze pro obalové koule, které byly navíc pevně defnovány, za použtí funkce Open Inventoru SoIntersectonDetectonActon. Následné vyhodnocení probíhalo jen na úrovn vyhodnocení srážky dvou koulí. Prvním krokem k rozumné aplkac bylo rozdělení do té doby provedené práce na moduly a následné převedení na objekty. Byly vytvořeny základní třídy SgObject a SgoManager. Pro tyto objekty byly mplementovány metody detekce kolze a vyhodnocení kolze, které byly postupně rozšřovány. Dále přbylo vyhodnocení kolze pomocí exploze, a s tím souvsející třída bllboardng. V druhém semestru byly v prác na ročníkovém projektu mplementovány základní algortmy pro srážku na základě fyzkálního modelu, které ovšem používaly většnou konstantních velčny. S tímto musely být přdány algortmy na výpočet bodu srážky a normály srážky. Nakonec byly mplementovány funkce pro pohyb ve scéně a třída SgInterface. V ročníkovém projektu fungovala jednoduchá detekce kolzí s pevně daným obalovým tělesem koule a jednoduché vyhodnocení kolze srážky koulí. Fyzkální vyhodnocení s použtím konstantních velčn fungovalo v rámc demonstrační aplkace relatvně dobře... Rozsah dplomové práce Pro dplomovou prác bylo třeba nahradt konstantní hodnoty hodnotam vypočítaným, proto byla mplementována pomocná aplkace počítající těžště, moment setrvačnost a obalová tělesa. Aplkace se sestávala z načtení WRLM modelu a z jeho převodu pro knhovnu ColDet. Také došlo k aplkac algortmů počítající těžště a moment setrvačnost a k řešením problému průchodů paprsků. Dále bylo vylepšeno ovládání rozšíření objektů o metody pro ovládání stíhače. Byly naprogramovány metody ovlvňující prostředí (tření, gravtace). Samotná detekce kolze byla rozšířena o rozdělení prostoru pomocí obalových těles. Dále byla využta vypočítaná obalová tělesa, jak koule, tak box. S nově získaným velčnam byla upravena stávající aplkace ročníkového projektu. Vyskytla se však řada chyb a nepřesností. Bylo nutné upravt funkc pro výpočet kolzního bodu, která kolzní bod počítala nepřesně. Také byla provedena řada testů a dlouhodobé ladění programu. Rovněž bylo 6

nutné opětovné a hlubší studum problému fyzkálního vyhodnocení kolze. Algortmus pro fyzkální detekc celá aplkace byly v průběhu ladění několkrát upraveny. Například zjštění, že algortmus pracuje jen s dagonální matcí momentu setrvačnost, s vyžádalo jak jednoduchou úpravu v pomocné aplkac, tak úpravu hlavní aplkace. Také odstranění násobné chyby př aktualzac matce setrvačnost. Navíc byla objevena chyba v algortmu počítajícím normálu kolze, který musel být přepracován. Byl namplementován textový edtor umožňující načtení tunelu s objekty a upravena práce s kamerou. Závěr práce byl věnován úpravě samotných modelů, prostředí, aplkacím samotným a zpracování dokumentace. Část dokumentace byla vytvořena na základě dokumentace ročníkového projektu a byla doplněna novou lterární rešerší a mplementačním záležtostm, spolu s poukázáním na zjštěné chyby a problémy s tímto spojené. 63

Závěr Zadáním této dplomové práce bylo vyřešt detekc a vyhodnocování kolzí na základě fyzkálního modelu ve 3D prostoru a demonstrovat je na vhodných příkladech. K zadanému tématu byla nastudována dostupná lteratura, a na jejím základě vypracována lterární rešerše. Na základě získaných znalostí a vědomostí byly navrženy algortmy pro detekc kolzí mez objekty scény a algortmy na vyhodnocování těchto kolzí s ohledem na možné optmalzace. V dplomovém projektu byl mplementován pomocný program pro výpočet těžště a matce momentu setrvačnost. Byly mplementovány algortmy řešící detekc kolzí. Dále algortmy pro odraz koule vs. koule a pevné těleso vs. pevné těleso, které řeší odraz na základě fyzkálního modelu. Všechny algortmy byly vytvořeny v prostředí Wn3 v programovacím studu Vsual Studo za použtí programovacího jazyka C++ s využtím grafcké knhovny OpenGL a nadstavby Open Inventor, a jsou podrobně popsány v této dokumentac. Pro demonstrac algortmů byl mplementován jednoduchý herní engne, ve kterém byly vytvořeny demonstrační aplkace, zvláště pak aplkace Průlet tunelem. Nejsložtější algortmy řešící fyzkální odraz dvou pevných těles jsou zatíženy velkým množstvím chyb, jak vyplývá z dokumentace. Z tohoto důvodu se mohou v aplkacích vyskytovat různé nechtěné stavy. Pro reálné použtí, například v počítačových hrách, je nutné k těmto algortmům v současné podobě přdat různé komplkované heurstky. Konkrétně pro fyzkální problémy spojené s matcí setrvačnost, především devační momenty matce setrvačnost vs. použtý algortmus a chyba aproxmace, bych však doporučl konzultac s odborníkem v oboru fyzky a matematky, ke které v rámc této práce z časových důvodů nedošlo. V neposlední řadě tato práce přnesla poztva mé osobě. Během vypracovávání jsem získal řadu nových poznatků a vědomostí z oboru 3D počítačové grafky a praktcké mplementace fyzkálních algortmů srážky. Zlepšl s a zdokonall vědomost a schopnost jž známé. Seznáml se detalně s grafckou knhovnou Open Inventor a různým programovacím technkam. Rozšířl jsem s své znalost objektově orentovaného programování a mplementace v C++. 64

Lteratura [] Hallday, D., Resnck, R., & Walker, J. (003). Fyzka (Vol. ). VUTIUM, Brno, ISBN 80-4-868-0, PROMETHEUS, Praha, ISBN 8-796-3-9. [] Ježek, F., Míková, M., & Tomczková, S. (005). Geometre pro FST (skrpta). Plzeň. [3] Theoretcal Foundaton: Mechancal Bass of Moton Analyss (nternet)...006. <http://kwon3d.com/theory/bass.html>. [4] Wtkn, A., & Baraff, D. (997). Physcally Based Modelng: Prncples and Practce (nternet)...006. <http://www.cs.cmu.edu/~baraff/sgcourse/> [5] Hecker, Ch. (997). Physcs, Part : The Next Fronter (nternet)...006. <http://www.d6.com/users/checker/pdfs/gdmphys.pdf>. [6] Hecker, Ch. (996). Physcs, Part : Angular Effects (nternet)...006. <http://www.d6.com/users/checker/pdfs/gdmphys.pdf>. [7] Hecker, Ch. (997). Physcs, Part 3: Collson Response (nternet)...006. <http://www.d6.com/users/checker/pdfs/gdmphys3.pdf>. [8] Hecker, Ch. (997). Physcs, Part 4: The Thrd Dmenson (nternet)...006. <http://www.d6.com/users/checker/pdfs/gdmphys4.pdf>. [9] Ehmann, S. (4.06.999). Rgd Body Smulaton Tutorál (nternet). 06.09.006. <http://www.cs.unc.edu/~ehmann/rgdtutoral/>. [0] Blow, J., & Bnstock, A. J. (004). How to fnd the nerta tensor (or other mass propertes) of a 3D sold body represented by a trangle mesh (nternet)...006. <http://number-none.com/blow/nerta/ndex.html>. [] Sochor, J., & Tobola, P. (005). Detekce kolze (nternet)...006. <http://www.f.mun.cz/~sochor/pa00/slajdy/kolznmetody.pdf> [] Pelkán, J., & Tobola, P. (003). Datové struktury pro prostorové vyhledávání (nternet)...006. <http://www.f.mun.cz/~sochor/pa00/slajdy/spacesearch.pdf> [3] Mller, K. Collson Detecton (nternet)...006. <http://www.gamespp.com/algorthms/collsondetecton.html> [4] Advanced Collson Detecton Technques (nternet)...006 <http://www.gamespp.com/algorthms/advancedcollsondetectontechnques.html> [5] Pravda, J. (00). Jak vyzrát na kolze (nternet)...006 <http://www.bulder.cz/art/cpp/kolze.html> [6] Fauerby, K. (000). Collson detecton & Response (nternet)...006 <http://www.peroxde.dk/download/tutorals/tut0/pxdtut0.html> 65

[7] Collson Detecton Vertex-n-Trangle Check (nternet)...006 <http://www.gamespp.com/algorthms/collsondetectontutoral.html> [8] Kolář, D. (00). Postrelační databáze (nternet, prvátní stránky FIT VUT)...006 <https://www.ft.vutbr.cz/study/courses/prd/prvate/lectures/prednaskyprd.pdf> [9] Möller, T. A Fast Trangle-Trangle Intersecton Test (nternet)...006. <http://www.cs.lth.se/home/tomas_akenne_moller/pubs/trtr.pdf>. [0] Tropp, O., Tal, A., & Shmshon, I. (006). A fast trangle to trangle ntersecton test for collson detecton (nternet)...006. <http://ms.hevra.hafa.ac.l/~shmshon/papers/tropptalshmshon.pdf>. [] Turek, M. (004). CZ NeHe OpenGL, vše o programování grafky (nternet)...006. <http://nehe.ceskehry.cz/> [] Dostál, R. (00). Objektově orentované programování v C++ (nternet)...006. <http://www.bulder.cz/seral4.html> [3] Prata, S. (00). Mstrovství v C++. Computer Press, Praha, ISBN 80-76-339-0. [4] Klgard, J., K. (996). The OpenGL Utlty Toolkt (GLUT) Programmng Interface API Verson 3 (nternet)...006. <http://www.opengl.org/documentaton/specs/glut/spec3/spec3.html> [5] Van Heesh, D. (000). ColDet Documentaton (nternet)...006. <http://sourceforge.net/projects/coldet> [6] Pečva, J. (004). Serál Open Inventor (nternet)...006. <http://www.root.cz/seraly/open-nventor/>. [7] Systeme n Moton AS. (005). Con Documentaton (nternet)...006. <http://doc.con3d.org/con/> [8] Carey, R., & Gavn, B. (997). The Anotated WRML97 Reference Manual (nternet)...006. <http://www.cs.vu.nl/~elens/documents/vrml/reference/book.htm> 66

Přílohy Příloha I. Ovládání pomocné aplkace a screenshot Aplkace velčny se dá spustt bez parametrů nebo s parametry. Pokud se pustí bez parametrů postupně se na vše potřebné zeptá. Spouštění s parametrem je následující: První parametr - název souboru Druhý parametr - krok aplkace Třetí parametr - přesnost Název souboru určuje jaký soubor se bude zpracovávat, povolený formát je pouze VRML V.0 utf8. Krok aplkace určuje velkost dělící mřížky, nebo se znaménkem - určuje parametr na kolk dílků se rozdělí nejdelší strana obalového boxu modelu. Rozumné hodnoty závsí na počtu jednotek modelu. Pro použté modely jsou rozumné parametry krok=0,5 jednotky nebo rozdělení modelu na cca 400-600 dílku. Třetím parametrem je přesnost určuje v kolka osách se provede výpočet (-3). S každým stupněm přesnost se opakuje výpočet v jedné z os, proto roste časová náročnost. Obrázek je barevně nvertován 67

Příloha II. Analýza krychle Analýza pro krychl o straně 50 jednotek. Soubor Cube.wrl (8 ponts, trangles). krok: 50 Moment setrvacnost: 36.5 0 0 0 7304. 0 0 0 7304. chyb: 0, Chyba v %: 0 Vysledny moment setrvacnost: 5863.6 0 0 0 5863.6 0 0 0 5863.6 Cas potrebny pro vypocet IT: 0s krok: 5 Moment setrvacnost: 39063.6 0 0 0 54594.8 0 0 0 54594.8 chyb: 0, Chyba v %: 0 Vysledny moment setrvacnost: 4947.8 0 0 0 4947.7 0 0 0 4947.7 Cas potrebny pro vypocet IT: 0s Moment setrvacnost: 7304. 0 0 0 36.5 0 0 0 7304. chyb: 0, Chyba v %: 0 Moment setrvacnost: 54594.8 0 0 0 39063.6 0 0 0 54594.8 chyb: 0, Chyba v %: 0 Moment setrvacnost: 7304. 0 0 0 7304. 0 0 0 36.5 chyb: 0, Chyba v %: 0 Moment setrvacnost: 54594.8 0 0 0 54594.8 0 0 0 39063.6 chyb: 0, Chyba v %: 0 krok: 6.5 Moment setrvacnost: 404.7 0 0 0 480.9 0 0 0 480.8 chyb: Chyba v %: 4.783e-007 Vysledny moment setrvacnost: 45855.3 0 0 0 45687. 0 0 0 45855.3 Cas potrebny pro vypocet IT: 0s krok: 3.5 Moment setrvacnost: 444.7 0 0 0 4440 0 0 0 4440 chyb: Moment setrvacnost: 4758.3 0 0 0 405.7 0 0 0 4758.3 chyb: 0, Chyba v %: 0 Chyba v %: 8.737e-007 Moment setrvacnost: 4443.6 0 0 0 4503.9 0 0 0 4443.6 Moment setrvacnost: 480.9 0 0 0 480.8 0 0 0 404.7 chyb: Chyba v %: 4.783e-007 chyb: 0, Chyba v %: 0 Moment setrvacnost: 4440 0 0 0 4440 0 68

0 0 444.7 chyb: Chyba v %: 8.737e-007 Vysledny moment setrvacnost: 4345. 0 0 0 43435.3 0 0 0 4345. Cas potrebny pro vypocet IT: 0s krok: 5.65 Moment setrvacnost: 478.8 0 0 0 43087 0 0 0 43086. chyb: 3 Chyba v %: 7.75e-006 Vysledny moment setrvacnost: 465.9 0 0 0 4599.7 0 0 0 465.4 Cas potrebny pro vypocet IT: s Moment setrvacnost: 43009 0 0 0 466 0 0 0 43008.3 chyb: 0, Chyba v %: 0 Moment setrvacnost: 43087 0 0 0 43086. 0 0 0 478.8 chyb: 3 Chyba v %: 7.75e-006 69

Příloha III. Analýza krychle Položka výsledné těžště je korekce původního těžště. Soubor Cube.wrl 8 vrcholu trojuhelnku Velkost kroku: 50 pruchod: chyb, v %: 9.596e-007 pruchod: chyb 0, v %: 0 3 pruchod: chyb, v %: 9.596e-007 tezste x:-7.509 y:-6.863 z:-7.509 Cas potrebny pro vypocet tezste: s pruchod: Pocet chyb 0, v %: 0 pruchod: Pocet chyb 0, v %: 0 3 pruchod: Pocet chyb 0, v %: 0 Vysledny moment setrvacnost: 45565. 0 0 0 456.4 0 0 0 45565 Cas potrebny pro vypocet IT: 0 s Celkovy cas: s Soubor Cube.wrl 8 vrcholu trojuhelnku Velkost kroku: 0 pruchod: Pocet chyb, v %: 7.837e-006 pruchod: Pocet chyb 0, v %: 0 3 pruchod: Pocet chyb, v %: 7.837e-006 tezste x:-.70594 y:-.77473 z:-.70558 Cas potrebny pro vypocet tezste: 0s pruchod: Pocet chyb 0, v %: 0 pruchod: Pocet chyb 0, v %: 0 3 pruchod: Pocet chyb 0, v %: 0 Vysledny moment setrvacnost: 46.4 0 0 0 46.4 0 0 0 46.5 Cas potrebny pro vypocet IT: s Celkovy cas: s Rozdíl mez výpočty cca 7,3 % Soubor Cube.wrl 8 vrcholu trojuhelnku Velkost kroku: 5 pruchod: Pocet chyb 6, v %:.96003e-005 pruchod: Pocet chyb 0, v %: 0 3 pruchod: Pocet chyb 6, v %:.96003e-005 tezste x:-0.80885 y:-0.8069 z:-0.80985 Cas potrebny pro vypocet tezste: s pruchod: Pocet chyb 0, v %: 0 pruchod: Pocet chyb 0, v %: 0 3 pruchod: Pocet chyb 0, v %: 0 Vysledny moment setrvacnost: 4953.8 0 0 0 4956.3 0 0 0 4958.8 Cas potrebny pro vypocet IT: 9 s Celkovy cas: 0s Rozdíl mez výpočty cca 0,73 % Soubor Cube.wrl 8 vrcholu trojuhelnku Velkost kroku:.5 pruchod: Pocet chyb 5, v %: 4.03766e-005 pruchod: Pocet chyb 0, v %: 0 3 pruchod: Pocet chyb 5, v %: 4.03766e-005 tezste x:-0.4575 y:-0.4077 z:-0.44847 Cas potrebny pro vypocet tezste: 3s pruchod: Pocet chyb 0, v %: 0 pruchod: Pocet chyb 0, v %: 0 3 pruchod: Pocet chyb 0, v %: 0 Vysledny moment setrvacnost: 4730. 0 0 0 4733. 0 0 0 4736.4 Cas potrebny pro vypocet IT: 7 s Celkovy cas: 75s Rozdíl mez výpočty cca 0,53 % Soubor Cube.wrl 8 vrcholu trojuhelnku Velkost kroku:.5 pruchod: Pocet chyb 0, v %: 7.96e-005 pruchod: Pocet chyb 0, v %: 0 3 pruchod: Pocet chyb 0, v %: 7.96e-005 tezste x:-0.0633 y:-0.06638 z:-0.05444 Cas potrebny pro vypocet tezste: 7s pruchod: Pocet chyb 0, v %: 0 pruchod: Pocet chyb 0, v %: 0 3 pruchod: Pocet chyb 0, v %: 0 Vysledny moment setrvacnost: 70

3479. 0 0 0 3407. 0 0 0 33495.3 Cas potrebny pro vypocet IT: 745 s Celkovy cas: 77s Rozdíl mez výpočty cca 6,8 % Soubor Cube.wrl 8 vrcholu trojuhelnku Velkost kroku: 0.833333 pruchod: Pocet chyb 03, v %: 0.00060787 pruchod: Pocet chyb 0, v %: 0 3 pruchod: Pocet chyb 03, v %: 0.00060787 tezste x:-0.34675 y:-0.35588 z:-0.3646 Cas potrebny pro vypocet tezste: 4s pruchod: Pocet chyb 0, v %: 0 pruchod: Pocet chyb 0, v %: 0 3 pruchod: Pocet chyb 0, v %: 0 Vysledny moment setrvacnost: 0664.6 0 0 0 0664.6 0 0 0 0664.6 Cas potrebny pro vypocet IT: 073 s Celkovy cas: 4s Rozdíl mez výpočty cca 40 % Soubor Cube.wrl 8 vrcholu trojuhelnku Velkost kroku: 0.65 pruchod: Pocet chyb 39, v %: 0.00030466 pruchod: Pocet chyb 0, v %: 0 3 pruchod: Pocet chyb 39, v %: 0.00030466 tezste x:-0.704 y:-0.488 z:-0.855 Cas potrebny pro vypocet tezste: 69s pruchod: Pocet chyb 0, v %: 0 pruchod: Pocet chyb 0, v %: 0 3 pruchod: Pocet chyb 0, v %: 0 Vysledny moment setrvacnost: 6748.4 0 0 0 6748.4 0 0 0 6748.4 Cas potrebny pro vypocet IT: 530 s Celkovy cas: 5370s Rozdíl mez výpočty cca 8.9 % Soubor Cube.wrl 8 vrcholu trojuhelnku Velkost kroku: 0.5 pruchod: Pocet chyb 5, v %: 0.00000395 pruchod: Pocet chyb 0, v %: 0 3 pruchod: Pocet chyb 5, v %: 0.00000395 tezste x:-0.0830 y:-0.083637 z:-0.0869 Cas potrebny pro vypocet tezste: 3s pruchod: Pocet chyb 0, v %: 0 pruchod: Pocet chyb 0, v %: 0 3 pruchod: Pocet chyb 0, v %: 0 Vysledny moment setrvacnost: 535.7 0 0 0 535.7 0 0 0 535.7 Cas potrebny pro vypocet IT: 350 s Celkovy cas: 48s Rozdíl mez výpočty cca 8,3 % Soubor Cube.wrl 8 vrcholu trojuhelnku Velkost kroku: 0.46667 pruchod: chyb 43, v %: 0.00033674 pruchod: chyb 0, v %: 0 3 pruchod: chyb 43, v %: 0.00033674 tezste x:-0.070809 y:-0.069568 z:-0.06866 Cas potrebny pro vypocet tezste: 40s pruchod: Pocet chyb 0, v procentech: 0 pruchod: Pocet chyb 0, v procentech: 0 3 pruchod: Pocet chyb 0, v procentech: 0 Vysledny moment setrvacnost: 4735.5 0 0 0 4735.5 0 0 0 4735.5 Cas potrebny pro vypocet IT: 556 s Celkovy cas: 5666s Rozdíl mez výpočty cca 4% 7

Příloha IV. Analýza jehlanu Soubor cone.wrl 50 vrcholu 96 trojuhelnku Velkost kroku: 30 pruchod: chyb 0, v %: 0 pruchod: chyb, v %: 4.094e-006 3 pruchod: chyb 0, v %: 0 tezste x:-0.5553 y:74.434 z:-0.73348 Cas potrebny pro vytezste: 0s pruchod: chyb 0, v %: 0 pruchod: chyb 0, v %: 0 3 pruchod: chyb 0, v %: 0 Vysledny moment setrvacnost: 547.86 0 0 0 3369.5 0 0 0 5446.58 Cas potrebny pro vyit: 0 s Celkovy cas: 0s Soubor cone.wrl 50 vrcholu 96 trojuhelnku Velkost kroku:.5 pruchod: chyb 0, v %: 0 pruchod: chyb 4, v %: 0.000336368 3 pruchod: chyb 0, v %: 0 tezste x:-0.0009839 y:74.9884 z:-0.038747 Cas potrebny pro vytezste: 4s pruchod: chyb 0, v %: 0 pruchod: chyb 37, v %: 0.000946 3 pruchod: chyb 0, v %: 0 Vysledny moment setrvacnost: 499.67 0 0 0 3004.4 0 0 0 490.54 Cas potrebny pro vyit: s Celkovy cas: 6s Rozdíl mez výpočty cca 9% Soubor cone.wrl 50 vrcholu 96 trojuhelnku Velkost kroku: 0.75 pruchod: chyb 0, v %: 0 pruchod: chyb 53, v %: 0.004984 3 pruchod: chyb 0, v %: 0 tezste x:0.0030556 y:74.9546 z:-0.039443 Cas potrebny pro vytezste: 6s pruchod: chyb 0, v %: 0 pruchod: chyb 3, v %: 0.0005608 3 pruchod: chyb 0, v %: 0 Vysledny moment setrvacnost: 4857.09 0 0 0 958.3 0 0 0 4864.6 Cas potrebny pro vyit: 79 s Celkovy cas: 95s Rozdíl mez výpočty cca,% Soubor cone.wrl 50 vrcholu 96 trojuhelnku Velkost kroku: 0.5 pruchod: chyb 0, v %: 0 pruchod: chyb 356, v %: 0.009746 3 pruchod: chyb 0, v %: 0 tezste x:0.0040865 y:74.9739 z:-0.05635 Cas potrebny pro vytezste: 50s pruchod: chyb 0, v %: 0 pruchod: chyb 98, v %: 0.00488 3 pruchod: chyb 0, v %: 0 Vysledny moment setrvacnost: 477.6 0 0 0 863.78 0 0 0 4784.88 Cas potrebny pro vyit: 345 s Celkovy cas: 395s Rozdíl mez výpočty cca,8% Soubor cone.wrl 50 vrcholu 96 trojuhelnku Velkost kroku: 0.375 pruchod: chyb 0, v %: 0 pruchod: chyb 593, v %: 0.0048958 3 pruchod: chyb 0, v %: 0 tezste x:0.00399497 y:74.9786 z:-0.04979 Cas potrebny pro vytezste: 65s pruchod: chyb 0, v %: 0 pruchod: chyb 499, v %: 0.004068 3 pruchod: chyb 0, v %: 0 Vysledny moment setrvacnost: 4085.53 0 0 0 570.8 0 0 0 44.6 7

Cas potrebny pro vyit: 575 s Celkovy cas: 640s Rozdíl mez výpočty cca,9% Soubor cone.wrl 50 vrcholu 96 trojuhelnku Velkost kroku: 0.3 pruchod: chyb 0, v %: 0 pruchod: chyb 778, v %: 0.0064374 3 pruchod: chyb 0, v %: 0 tezste x:0.0049944 y:74.9839 z:-0.007446 Cas potrebny pro vytezste: 03s pruchod: chyb, v %: 9.78969e-005 pruchod: chyb 748, v %: 0.00604 3 pruchod: chyb 0, v %: 0 Vysledny moment setrvacnost: 3436.5 0 0 0 846.7 0 0 0 3657.75 Cas potrebny pro vyit: 6 s Celkovy cas: 9s Rozdíl mez výpočty cca 3, % Soubor cone.wrl 50 vrcholu 96 trojuhelnku Velkost kroku: 0.5 pruchod: chyb 0, v %: 0 pruchod: chyb 47, v %: 0.0094949 3 pruchod: chyb 0, v %: 0 tezste x:0.003647 y:74.9864 z:-0.0589 Cas potrebny pro vytezste: 55s pruchod: chyb 0, v %: 0 pruchod: chyb 63, v %: 0.0095004 3 pruchod: chyb 0, v %: 0 Vysledny moment setrvacnost: 308.38 0 0 0 55.35 0 0 0 37.5 Cas potrebny pro vyit: 905 s Celkovy cas: 060s Rozdíl mez výpočty cca 3, % Soubor cone.wrl 50 vrcholu 96 trojuhelnku Velkost kroku: 0. pruchod: chyb 6, v %: 4.97343e-005 pruchod: chyb 85, v %: 0.050446 3 pruchod: chyb 5, v %: 4.445e-005 tezste x:0.003866 y:74.9835 z:-0.05807 Cas potrebny pro vytezste: 56s pruchod: chyb, v %: 8.797e-006 pruchod: chyb 8, v %: 0.04835 3 pruchod: chyb 6, v %: 4.9078e-005 Vysledny moment setrvacnost: 589.5 0 0 0 38.33 0 0 0 64.5 Cas potrebny pro vyit: 3545 s Celkovy cas: 380s Rozdíl mez výpočty cca 6,7 % 73

Příloha V. Analýza stíhače Soubor Bomber.wrl 4 vrcholu 78 trojuhelnku Velkost kroku: 39.4 pruchod: chyb 0, v %: 0 pruchod: chyb 0, v %: 0 3 pruchod: chyb 0, v %: 0 tezste x:0.550 y:0.0833 z:-0.45597 Cas potrebny pro vytezste: 0s pruchod: chyb 0, v %: 0 pruchod: chyb 0, v %: 0 3 pruchod: chyb 0, v %: 0 Vysledny moment setrvacnost: 953.75 0 0 0 53.97 0 0 0 7305.88 Cas potrebny pro vyit: 0 s Celkovy cas: 0s Soubor Bomber.wrl 4 vrcholu 78 trojuhelnku Velkost kroku: 7.88 pruchod: chyb 0, v %: 0 pruchod: chyb 0, v %: 0 3 pruchod: chyb 0, v %: 0 tezste x:.0009 y:-0.00877 z:-0.63596 Cas potrebny pro vytezste: 0s pruchod: chyb 0, v %: 0 pruchod: chyb 0, v %: 0 3 pruchod: chyb 0, v %: 0 Vysledny moment setrvacnost: 344.3 0 0 0 400.75 0 0 0 703.78 Cas potrebny pro vyit: s Celkovy cas: s Rozdíl mez výpočty cca 3,8% Soubor Bomber.wrl 4 vrcholu 78 trojuhelnku Velkost kroku: 3.94 pruchod: chyb 0, v %: 0 pruchod: chyb 0, v %: 0 3 pruchod: chyb 0, v %: 0 tezste x:0.8494 y:-0.0004779 z:-0.078 Cas potrebny pro vytezste: s pruchod: chyb 0, v %: 0 pruchod: chyb 0, v %: 0 3 pruchod: chyb 0, v %: 0 Vysledny moment setrvacnost: 3047.98 0 0 0 3907.76 0 0 0 6698.66 Cas potrebny pro vyit: s Celkovy cas: s Rozdíl mez výpočty cca 4,6% Soubor Bomber.wrl 4 vrcholu 78 trojuhelnku Velkost kroku:.97 pruchod: chyb 0, v %: 0 pruchod: chyb 0, v %: 0 3 pruchod: chyb, v %: 8.43635e-006 tezste x:0.36743 y:0.030365 z:-0.9693 Cas potrebny pro vytezste: 3s pruchod: chyb 0, v %: 0 pruchod: chyb 0, v %: 0 3 pruchod: chyb, v %: 8.3404e-006 Vysledny moment setrvacnost: 830.86 0 0 0 3950.9 0 0 0 6473.39 Cas potrebny pro vyit: 4 s Celkovy cas: 7s Soubor Bomber.wrl 4 vrcholu 78 trojuhelnku Velkost kroku: 0.985 pruchod: chyb 0, v %: 0 pruchod: chyb 0, v %: 0 3 pruchod: chyb 4, v %: 0.0000956 tezste x:0.858 y:-0.0877 z:-0.0594835 Cas potrebny pro vytezste: 0s pruchod: chyb 0, v %: 0 pruchod: chyb 0, v %: 0 3 pruchod: chyb 4, v %: 0.0000597 Vysledny moment setrvacnost: 87.53 0 0 0 39.7 0 0 0 640.65 Cas potrebny pro vyit: s Celkovy cas: 3s 74

Rozdíl mez výpočty cca 0,8% Soubor Bomber.wrl 4 vrcholu 78 trojuhelnku Velkost kroku: 0.656667 pruchod: chyb, v %: 8.807e-006 pruchod: chyb, v %: 8.807e-006 3 pruchod: chyb 3, v %:.643e-005 tezste x:0.087557 y:-0.0049058 z:-0.037355 Cas potrebny pro vytezste: s pruchod: chyb 0, v %: 0 pruchod: chyb 0, v %: 0 3 pruchod: chyb 3, v %:.65e-005 Vysledny moment setrvacnost: 87.08 0 0 0 3939. 0 0 0 647.45 Cas potrebny pro vyit: 64 s Celkovy cas: 85s Rozdíl mez výpočty cca 0,% Soubor Bomber.wrl 4 vrcholu 78 trojuhelnku Velkost kroku: 0.495 pruchod: chyb, v %: 8.8595e-006 pruchod: chyb, v %:.7785e-005 3 pruchod: chyb 8, v %: 7.0874e-005 tezste x:0.03379 y:-0.00070 z:-0.0 Cas potrebny pro vytezste: 38s pruchod: chyb, v %: 8.7564e-006 pruchod: chyb, v %: 8.7564e-006 3 pruchod: chyb 8, v %: 0.000457 Vysledny moment setrvacnost: 799. 0 0 0 3869.5 0 0 0 6354.58 Cas potrebny pro vyit: 33 s Celkovy cas: 7s Rozdíl mez výpočty cca,% Soubor Bomber.wrl 4 vrcholu 78 trojuhelnku Velkost kroku: 0.394 pruchod: chyb, v %: 8.88857e-006 pruchod: chyb, v %:.7777e-005 3 pruchod: chyb 3, v %: 0.000555 tezste x:0.005734 y:-0.00644004 z:-0.04955 Cas potrebny pro vytezste: 59s pruchod: chyb, v %: 8.78497e-006 pruchod: chyb, v %: 8.78497e-006 3 pruchod: chyb 7, v %: 0.00049344 Vysledny moment setrvacnost: 79.6 0 0 0 3794.6 0 0 0 65.98 Cas potrebny pro vyit: 60 s Celkovy cas: 39s Rozdíl mez výpočty cca,6% Soubor Bomber.wrl 4 vrcholu 78 trojuhelnku Velkost kroku: 0.38333 pruchod: chyb 0, v %: 0 pruchod: chyb 3, v %:.6746e-005 3 pruchod: chyb 55, v %: 0.00048995 tezste x:-0.048 y:-0.00806898 z:-0.00337 Cas potrebny pro vytezste: 86s pruchod: chyb 0, v %: 0 pruchod: chyb 5, v %: 4.403e-005 3 pruchod: chyb 8, v %: 0.00058477 Vysledny moment setrvacnost: 539.67 0 0 0 3666.47 0 0 0 5764.39 Cas potrebny pro vyit: 49 s Celkovy cas: 55s Rozdíl mez výpočty cca 7,7% Soubor Bomber.wrl 4 vrcholu 78 trojuhelnku Velkost kroku: 0.6667 pruchod: chyb 3, v %:.67836e-005 pruchod: chyb 6, v %: 5.3567e-005 3 pruchod: chyb 3, v %: 0.0008569 tezste x:-0.057787 y:-0.0053065 z:- 0.0060575 Cas potrebny pro vytezste: 36s pruchod: chyb 3, v %:.64709e-005 pruchod: chyb 6, v %: 5.948e-005 3 pruchod: chyb 5, v %: 0.00045889 75

Vysledny moment setrvacnost: 376.6 0 0 0 3370.88 0 0 0 508. Cas potrebny pro vyit: 80 s Celkovy cas: 946s Rozdíl mez výpočty cca,7% Soubor Bomber.wrl 4 vrcholu 78 trojuhelnku Velkost kroku: 0.97 pruchod: chyb, v %: 8.94763e-006 pruchod: chyb 39, v %: 0.000348957 3 pruchod: chyb 09, v %: 0.0009759 tezste x:-0.0489834 y:-0.03875 z:-0.00008807 Cas potrebny pro vytezste: 46s pruchod: chyb, v %: 8.84305e-006 pruchod: chyb 7, v %: 6.904e-005 3 pruchod: chyb 87, v %: 0.000769345 Vysledny moment setrvacnost: 5.04 0 0 0 7.6 0 0 0 455.43 Cas potrebny pro vyit: 89 s Celkovy cas: 065s Rozdíl mez výpočty cca 7.3% 76

Příloha VI. Ovládání aplkace a screenshoty Hlavní aplkace průlet tunelem, se ovládá následovně: Zobrazení nápovědy F/H Volba ovládání: Relatvní (mění se působící síla na těleso) Relatvní s autoplotem (default) Přepnutí mez klávesncí a myší (default=klávesnce) M/m Ovládání stíhačky: Střelba Ovládání translace Ovládání rotace špkam F, levé tlačítko myš A,S,W,D (Q-Nahoru,E-Dolu) Kursorove špky (CTRL+Left/Rght - rotace kolem směrové osy) Myš Ovládání rotace myší (CTRL+Myš - rotace kolem směrové osy) Zastavení veškerého pohybu (ekvvalent ruční brzdě) SPACE Ostatn nastavení: Zvýšení odporu prostředí Snížení odporu prostředí Přepínání kamery Pozce kamery Pozce kamery (clen) T R V X,C Tab Ostatní aplkace jsou jen demonstrační jedné možné ovládání je: Zobrazení nápovědy Ostatn nastavení: Zvýšení odporu prostředí Snížení odporu prostředí Zapnutí gravtace Vypnutí gravtace F/H T R G+Špka dolů G+Špka nahoru 77

Aplkace Box Cubes Aplkace Box - Fghter 78

Aplkace Box Objects Aplkace Box Průlet tunelem 79

80