ˇ ´ UCEN ´I TECHNICKE ´ V BRNEˇ VYSOKE BRNO UNIVERSITY OF TECHNOLOGY
ˇ ´ICH TECHNOLOGI´I FAKULTA INFORMACN ˇ ˇ ´ ´ ´ GRAFIKY A MULTIMEDI ´ ´I USTAV POCITACOVE FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF COMPUTER GRAPHICS AND MULTIMEDIA
˚ REPREZENTOVANYCH ´ VIZUALIZACE 3D OBJEKTU ˇ ´ ˚ MNOZINOU POVRCHOVYCH BODU 3D OBJECT VIZUALIZATION REPRESENTED BY BOUNDARY POINTS
´ RSK ˇ ´ PRACE ´ BAKALA A BACHELOR’S THESIS
´ AUTOR PRACE
ˇ HEZINA LUDEK
AUTHOR
´ VEDOUC´I PRACE SUPERVISOR
BRNO 2007
ˇ ˇ Ing. PREMYSL KRSEK, Ph.D.
´ ı Zadan´ 1. Seznamte se s problematikou objektu˚ reprezentovan´ych mnoˇzinou povrchov´ych bodu˚ ´ ı objektu˚ reprezentovan´ych mnoˇzinou povrchov´ych 2. Analyzujte problematiku zobrazovan´ bodu˚ ˇ system ´ pro 3D zobrazovan´ ´ ı objektu˚ reprezentovan´ych mnoˇzinou povr3. Navrhnete chov´ych bodu˚ ´ 4. Implementujte a otestujte navrˇzen´y system 5. Zhodnot’te dosaˇzene´ v´ysledky a stanovte dalˇs´ı v´yvoj projektu
Licenˇcn´ı smlouva Licenˇcn´ı smlouva je uloˇzena v arch´ıve Fakulty Informaˇcn´ıch Technologi´ı Vysok´eho Uˇcen´ı Technick´eho v Brnˇe.
Abstrakt C´ılem t´eto pr´ ace bylo vytvoˇren´ı syst´emu pro vizualizaci 3D objekt˚ u reprezentovan´ ych mnoˇzinou povrchov´ ych bod˚ u. Pr´ace je naps´ana v jazyce C++. Na vytvoˇreni okna, manipulaci se sc´enou, a naˇc´ıt´ an´ı objekt˚ u z extern´ıch soubor˚ u jsem vyuˇzil knihovnu OpenSceneGraph. Do syst´emu jsou zahrnuty dva integrovan´e gener´atory implicitn´ıch objekt˚ u.
Kl´ıˇcov´a slova programovac´ı jazyk C++, OpenGL, OpenSceneGraph, mnoˇzina povrchov´ ych bod˚ u, bodovˇe orientovan´e zobrazen´ı
Abstract The aim of my bachelor thesis was to create the system for visualization of 3D objects which are representated by boundary points. Thesis is written in C++ language. I have used the library OpenSceneGraph for creation of windows, manipulation with scene and for loading objects from external files. The system includes two integrated generators of implicit objects.
Keywords programing language C++, OpenGL, OpenSceneGraph, Boundary Points, Point-based rendering
Citace Ludˇek Hezina: Vizualizace 3D objekt˚ u reprezentovan´ ych mnoˇzinou povrchov´ ych bod˚ u, bakal´aˇrsk´ a pr´ ace, Brno, FIT VUT v Brnˇe, 2007
Vizualizace 3D objekt˚ u reprezentovan´ych mnoˇzinou povrchov´ych bod˚ u Prohl´aˇsen´ı Prohlaˇsuji, ˇze jsem tuto bakal´ aˇrskou pr´aci vypracoval samostatnˇe pod veden´ım pana Pˇremysla Krˇska. Uvedl jsem vˇsechny liter´ arn´ı prameny a publikace, ze kter´ ych jsem ˇcerpal. ....................... Ludˇek Hezina 15. kvˇetna 2007
c Ludˇek Hezina, 2007.
Tato pr´ ace vznikla jako ˇskoln´ı d´ılo na Vysok´em uˇcen´ı technick´em v Brnˇe, Fakultˇe informaˇcn´ıch technologi´ı. Pr´ ace je chr´ anˇena autorsk´ym z´ akonem a jej´ı uˇzit´ı bez udˇelen´ı opr´ avnˇen´ı autorem je nez´ akonn´e, s v´yjimkou z´ akonem definovan´ych pˇr´ıpad˚ u.
Obsah ´ 1 Uvod
3
2 Anal´ yza probl´ emu 2.1 Reprezentace 3D model˚ u. . . . . . 2.1.1 Hraniˇcn´ı reprezentace . . . 2.1.2 CSG strom . . . . . . . . . 2.1.3 Dekompoziˇcn´ı modely . . . 2.2 Graf sc´eny . . . . . . . . . . . . . . 2.3 Splat jako vykreslovac´ı primitivum 2.4 Poˇzadavky na syst´em . . . . . . . .
. . . . . . .
4 4 4 6 6 7 8 9
. . . . . . . . . . . . .
11 11 11 12 12 12 12 13 13 13 13 14 14 14
. . . . . . . . .
15 15 15 15 16 16 16 17 17 18
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
3 N´ avrh syst´ emu 3.1 Samostatnˇe vykresliteln´ a entita . . . . . . . 3.2 Datov´ a struktura pro popis cel´eho modelu . 3.3 Objekt pˇripojiteln´ y do grafu sc´eny OSG . . 3.4 Testovac´ı modely . . . . . . . . . . . . . . . 3.4.1 Kv´ adr . . . . . . . . . . . . . . . . . 3.4.2 Koule . . . . . . . . . . . . . . . . . 3.5 Naˇc´ıt´ an´ı 3D model˚ u z extern´ıch zdroj˚ u. . . 3.5.1 Transformace troj´ uheln´ıku na surfely 3.6 Tˇr´ıda CSplat . . . . . . . . . . . . . . . . . 3.7 Tˇr´ıda CSplatArray . . . . . . . . . . . . . . 3.8 Tˇr´ıda CSplatPlane . . . . . . . . . . . . . . 3.9 Tˇr´ıda CCubePlane . . . . . . . . . . . . . . 3.10 Tˇr´ıda CSplatSphere . . . . . . . . . . . . . 4 Implementace 4.1 Volba implementaˇcn´ıho jazyku 4.2 Volba 3D grafick´ ych n´ astroj˚ u . 4.2.1 OpenSceneGraph . . . . 4.2.2 OpenGL . . . . . . . . . 4.3 Naˇc´ıt´ an´ı 3D model˚ u z extern´ıho 4.4 Vstupn´ı bod aplikace . . . . . . 4.5 Ovl´ ad´ an´ı syst´emu . . . . . . . . 4.5.1 Spouˇstˇen´ı aplikace . . . 4.5.2 Ovl´ ad´ an´ı sc´eny . . . . .
. . . . . . . . . . . . . . . . zdroje . . . . . . . . . . . . . . . .
5 V´ ysledky
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . .
. . . . . . . . . . . . .
. . . . . . . . .
. . . . . . .
. . . . . . . . . . . . .
. . . . . . . . .
. . . . . . .
. . . . . . . . . . . . .
. . . . . . . . .
. . . . . . .
. . . . . . . . . . . . .
. . . . . . . . .
. . . . . . .
. . . . . . . . . . . . .
. . . . . . . . .
. . . . . . .
. . . . . . . . . . . . .
. . . . . . . . .
. . . . . . .
. . . . . . . . . . . . .
. . . . . . . . .
. . . . . . .
. . . . . . . . . . . . .
. . . . . . . . .
. . . . . . .
. . . . . . . . . . . . .
. . . . . . . . .
. . . . . . .
. . . . . . . . . . . . .
. . . . . . . . .
. . . . . . .
. . . . . . . . . . . . .
. . . . . . . . .
. . . . . . .
. . . . . . . . . . . . .
. . . . . . . . .
. . . . . . .
. . . . . . . . . . . . .
. . . . . . . . .
. . . . . . .
. . . . . . . . . . . . .
. . . . . . . . .
. . . . . . .
. . . . . . . . . . . . .
. . . . . . . . .
. . . . . . .
. . . . . . . . . . . . .
. . . . . . . . .
. . . . . . .
. . . . . . . . . . . . .
. . . . . . . . .
19 1
6 Z´ avˇ er
23
Literatura
24
Seznam pˇ r´ıloh
25
2
Kapitola 1
´ Uvod Prvn´ı uˇzit´ı 3D diskr´etn´ıho vzorku jako vykreslovan´eho primitiva v poˇc´ıtaˇcov´e grafice se ˇ astice je jeddatuje do roku 1983, kdy vznikl pojem particle system (ˇc´asticov´ y syst´em). C´ noduˇse bod ve 3D Euklidovsk´em prostoru, kombinovan´ y s vlastnostmi jako barva, hustota, st´ınov´an´ı a rozptylov´ y koeficient. Hlavn´ı v´ yhodou ˇc´asticov´eho syst´emu je, ˇze vykreslovac´ı krok se st´ av´ a trivi´ aln´ım. Pro kaˇzdou ˇc´astici se provede: projekce na obrazovku, zjiˇstˇen´ı viditelnosti pomoc´ı Z–bufferu a n´asledn´e vybarven´ı pixelu barvou uchov´avanou v ˇc´astici. ˇ asticov´e syst´emy se pˇredevˇs´ım uˇz´ıvaj´ı jako modelovac´ı primitivum k generov´an´ı speciC´ fick´ ych animovan´ ych u ´kaz˚ u, kter´e se obt´ıˇznˇeji popisuj´ı klasick´ ymi modelovac´ımi technikami, jako je oheˇ n, d´eˇst’ ˇci exploze. Takt´eˇz je moˇzn´e vyuˇz´ıt ˇc´ asticov´eho syst´emu k popisu plochy libovoln´eho 3D modelu. Pˇri tomto pouˇzit´ı kaˇzd´ a ˇc´ astice reprezentuje kousek plochy objektu, leˇz´ıc´ıho pod n´ım, a pˇrej´ım´ a jej´ı vlastnosti (norm´ alov´ y vektor, barvu). Orientov´an ve v ploˇse teˇcn´e k bodu, leˇz´ıc´ımu na povrchu plochy popisovan´eho objektu. Orientovan´ y bod v prostoru, jenˇz m´a velikost, se v poˇc´ıtaˇcov´e grafice naz´ yv´a surfel (z anglick´eho surf face el elemt [5]). V n´ asleduj´ıc´ım textu se budu zab´ yvat r˚ uzn´ ymi metodami reprezentace 3D model˚ u v poˇc´ıtaˇcov´e grafice, n´ asledovan´em rozborem surfelu, n´avrhu cel´eho syst´emu, jeho implementac´ı. Nakonec zhodnocen´ım v´ ysledk˚ u cel´e pr´ace a navrˇzen´ı moˇzn´eho dalˇs´ıho v´ yvoje.
3
Kapitola 2
Anal´ yza probl´ emu 2.1
Reprezentace 3D model˚ u
V poˇc´ıtaˇcov´e grafice se vyuˇz´ıv´ a nˇekolik druh˚ u reprezentac´ı 3D model˚ u objekt˚ u. A to jak pro popis povrchu, tak pro popis objemu.
2.1.1
Hraniˇ cn´ı reprezentace
Hraniˇcn´ı reprezentace neboli B–rep (z anglick´eho Boundary representation) popisuje 3D objekt pomoc´ı jeho povrchu (hranice). Informace o vnitˇrku tˇelesa se neukl´adaj´ı. • Dr´ atov´ y model Dr´ atov´ y model se skl´ ad´ a pouze z bod˚ u a hran (´ useˇcky mezi body). Tato reprezentace m´ a nedostateˇcn´e mnoˇzstv´ı topologick´ ych informac´ı, coˇz m˚ uˇze v´est k nespr´avn´e interpretaci objektu.
Obr´azek 2.1: Uk´ azka dr´ atov´ ych model˚ u (nahoˇre) a s n´ım koresponduj´ıc´ıch skuteˇcn´ ych tvar˚ u
Jak je vidˇet na obr´ azku 2.1 nedostatek topologick´ ych informac´ı vede u prostˇredn´ıho a prav´eho objektu k v´ıce neˇz jedn´e interpretaci. Proto se tato technika hod´ı pˇrev´aˇznˇe pro rychl´e orientaˇcn´ı zobrazen´ı objekt˚ u, napˇr´ıklad pˇri pr´aci se sloˇzit´ ymi 3D modely. • Polygon´ aln´ı s´ıt’ Slouˇz´ı k popisu topologie 3D modelu, kde cel´ y povrch modelu je reprezentov´an polygony a s t´ım souvisej´ıc´ımi hranami a vrcholov´ ymi body. Mnoˇzina vrcholov´ ych bod˚ u ’ je pospojov´ ana pomoc´ı hran tak, ˇze vytv´aˇr´ı souvislou s´ıt polygon˚ u 2.2.
4
Obr´ azek 2.2: S´ıt’ polygon˚ u tvoˇr´ıc´ı polokouli
Obvykle b´ yv´ a tato s´ıt’ reprezentov´ana datovou strukturou zvanou okˇr´ıdlen´a hrana. Kdy kaˇzdou hranu sv´ıraj´ı maxim´alnˇe dva polygony. Nese informaci o vrcholech, mezi kter´ ymi leˇz´ı, o polygonech, kter´e ji sv´ıraj´ı, a informace o dvou dalˇs´ıch hran´ach vystupuj´ıc´ıch z kaˇzd´eho vrcholu n´aleˇzej´ıc´ıho hranˇe (viz. obr´azek 2.3). Z toho plynou tˇri line´ arn´ı seznamy, a to seznam vrchol˚ u, hran a stˇen.
Obr´ azek 2.3: Zn´ azornˇen´ı informac´ı, jenˇz pˇren´aˇs´ı hrana [3]
• NURBS plocha NURBS (non–uniform, rational B–spline) je matematick´ y model uˇz´ıvan´ y pro generov´ an´ı a reprezentaci kˇrivek a povrch˚ u. NURBS kˇrivka je v poˇrad´ı definov´ana v´ ahov´ ymi koeficienty ˇr´ıd´ıc´ıch bod˚ u a uzlov´ ym vektorem. NURBS kˇrivky a plochy jsou zobecnˇen´ım nad B–spline kˇrivkami. Pro pr˚ uchod NURBS kˇrivkou se vyuˇz´ıv´a jedin´eho parametru, obyˇcejnˇe naz´ yvan´eho s nebo u, kdeˇzto u ploch jsou tyto parametry dva (s a t nebo u a v). Plocha je definov´ana
5
Pm Pn
Ni,p (u)Nj,q (v)wi,j Pi,j
i=0 j=0 S(u, v) = P , m Pn i=0 j=0 Ni,p (u)Nj,q (v)wi,j kde Ni,p a Nj,q jsou b´ azov´e funkce B–spline kˇrivky, Pi,j kontroln´ı body a wi,j je v´aha bodu Pi,j [4].
• Popis povrchu body Mnoˇzina bod˚ u rozm´ıstˇen´ ych po povrchu libovoln´eho objektu, jenˇz splˇ nuje vzorkovac´ı krit´eria plnˇe popisuje geometrii a topologii tˇelesa. Jednotliv´ y bod obsahuje informaci o sv´e pozici, orientaci (norm´alov´ y vektor) a barvˇe. D´ale se d´a pˇredpokl´adat ˇze zab´ır´ a jist´ y prostor a m´ a kruhovit´ y ˇci elipsovit´ y tvar. Pro korektn´ı zobrazen´ı mus´ı body pokr´ yvat cel´ y povrch bez dˇer, z ˇcehoˇz plyne nutnost pˇrekr´ yv´an´ı [1].
2.1.2
CSG strom
CSG (constructive solid geometry) je technika uˇz´ıvan´a pˇri modelov´an´ı. Vyuˇz´ıv´a jednoduch´ ych primitiv jako krychle, koule, ˇctyˇrstˇen ˇci v´alec a booleovsk´ ych operac´ı (spojen´ı ∪, pr˚ unik ∩ a rozd´ıl \) k jejich kombinov´an´ı do v´ ysledn´eho tvaru.
Obr´ azek 2.4: Rozd´ıl dvou primitiv Pomoc´ı 3D primitiv transformac´ı a booleovsk´ ych operac´ı (uzly stromu) je n´aslednˇe moˇzn´e vytv´ aˇret sloˇzitˇejˇs´ı modely. Jelikoˇz v SCG stromu nejsou informace o povrchu objektu pˇrev´ad´ı se na model polygon´ aln´ı.
2.1.3
Dekompoziˇ cn´ı modely
Dekompoziˇcn´ı modely popisuj´ı objekt jeho rozloˇzen´ım do bunˇek (voxel˚ u) uspoˇr´adan´ ych do pevn´e pravideln´e mˇr´ıˇzky. Pro reprezentaci objektu je nutn´e rozhodnout, kter´e buˇ nky v mˇr´ıˇzce jsou obsazeny. Vyuˇz´ıvaj´ı se pro popis objemov´ ych dat [3]. Metody uloˇzen´ı dat: • 3D pole diskr´etn´ıch hodnot Vytoˇc´ı se trojrozmˇern´e pole nad nejmenˇs´ım kv´adrem opsan´ ym popisovan´eho objektu, a n´ aslednˇe se vypln´ı podle obsazenosti. Vhodn´e pro vysokou rychlost pˇr´ıstupu, ale pˇrin´ aˇs´ı velkou pamˇet’ovou n´aroˇcnost.
6
Obr´ azek 2.5: Objekt sloˇzen´ y z bunˇek [3]
• Oktanov´ y strom Je odvozen od 2D varianty kvadrantov´eho stromu, zaloˇzen´em na bin´ arn´ım dˇelen´ı. Rekurzivnˇe dˇel´ı prostor kolem objekt˚ u do osmi ˇc´ast´ı. Kaˇzd´a takto vytvoˇren´ a ˇc´ ast m˚ uˇze nab´ yvat pouze tˇrech stav˚ u, a to: plnˇe obsazen, ˇc´asteˇcnˇe obsazen a neobsazen. Nad´ ale se rozdˇel´ı kaˇzd´a ˇc´asteˇcnˇe obsazen´a oblast. V dˇelen´ı se pokraˇcuje do t´e doby, pokud nejsou kvadranty homogenn´ı, nebo se nedos´ahlo urˇcen´e hloubky zanoˇren´ı (minim´ aln´ı prostorov´e velikosti buˇ nky). Tato varianta je v´ yhodn´a pro malou hustotu dat, za to pˇrin´ aˇs´ı problematick´e proch´azen´ı stromem.
2.2
Graf sc´ eny
Graf sc´eny je reprezentov´ an stromem. Jedn´a se o datovou strukturu reprezentuj´ıc´ı celou sc´enu (virtu´ aln´ı svˇet), jak 3D modely v nˇem obsaˇzen´e, jejich prostorov´e transformace, rotace popˇr´ıpadˇe animace ˇci jin´e nastaven´ı stav˚ u. Typicky se sch´ematicky kresl´ı s koˇrenov´ ym uzlem nahoˇre a vˇetvemi smˇerem dol˚ u. Zaˇc´ın´a koˇrenov´ ym uzlem reprezentuj´ıc´ım cely virtu´ aln´ı svˇet, at’ jiˇz 2D, ˇci 3D. N´ aslednˇe je virtu´aln´ı svˇet rozdroben do hierarchie uzl˚ u obsahujc´ı, informace o pozici, natoˇcen´ı, animaci, ˇci definici logick´ ych vztah˚ u mezi objekty, jako napˇr´ıklad ovl´ad´an´ı stav˚ u semaforu (zelen´ a, ˇcerven´a). N´aslednˇe ve vˇetv´ıch stromu jsou obsaˇzeny samotn´e vykresliteln´e objekty s pˇr´ısluˇsn´ ym nastaven´ım materi´al˚ u.
Obr´azek 2.6: Graf sc´eny
7
Na obr´ azky 2.6 je pˇr´ıklad grafu sc´eny reprezentuj´ıc´ı tˇri krychle. Z nichˇz dvˇe sd´ıl´ı jeden shodn´ y modifik´ ator prostorov´e transformace TR. N´aslednˇe se graf rozdˇeluje na samotnou krychli a dalˇs´ı transformaci krychle druh´e. V prav´e ˇc´asti stromu se nach´az´ı pouze jedna transformace k n´ı n´ aleˇz´ıc´ı krychle.
2.3
Splat jako vykreslovac´ı primitivum
~ = (Nx , Ny , Nz ) kde Nx , Ny , Nz ∈ Splat je rovinn´ yu ´tvar urˇcen´ y norm´alov´ ym vektorem N R, stˇredov´ ym bodem P = (Px , Py , Pz ) pro Px , Py , Pz ∈ R a velikost´ı v. Pro jeho vy~ a bodem P zkonstruovat tvoˇren´ı je nejprve nutn´e v rovinˇe urˇcen´e norm´alov´ ym vektorem N troj´ uheln´ık, nejl´epe rovnostrann´ y, kolem bodu P tak, aby bod P leˇzel v tˇeˇziˇsti troj´ uheln´ıku. Pro konstrukci troj´ uheln´ıku v ploˇse je nutn´e zn´at dva na sebe kolm´e vektory v rovinˇe konstrukce. Tento v´ ypoˇcet je ud´ an rovnicemi 2.1 a 2.2. V~1 = (−Nz − Ny , −Nz − Nx , Ny + Nx ) V~2 = (V2x , V2y , V2z ) V 2x
= −Nz ∗ Nz + Nx ∗ Nz − Ny ∗ Ny − Ny ∗ Nx
V 2y
= Nz ∗ Nz + Ny ∗ Nz + Ny ∗ Nx + Nx ∗ Nx
V 2z
= −Nz ∗ Ny − Ny ∗ Ny + Nz ∗ Nx − Nx ∗ Nx
(2.1) (2.2)
Obr´ azek 2.7: N´ akres rovnostrann´eho troj´ uheln´ıku zkonstruovan´eho kolem bodu P Kruˇznice na obr´ azku 2.7 reprezentuje v´ ysledn´ y splat, o velikosti v = |V~1 | = |V~2 |. Pak jednotliv´e vrcholy troj´ uheln´ıku reprezentuj´ı rovnice 2.3, 2.4 a 2.5. B1 = 2 ∗ V~1 + P √ 2 B2 = −1 ∗ V~1 + 3 ∗ V~2 + P √ 2 B3 = −1 ∗ V~1 − 3 ∗ V~2 + P
(2.3) (2.4) (2.5)
Troj´ uheln´ık sloˇzen´ y z takto vypoˇcten´ ych bod˚ u B1 , B2 a B3 je rovnostrann´ y a leˇz´ı v ro~ vinˇe reprezentovan´e bodem P a norm´alov´ ym vektorem N . V dalˇs´ı f´azi se rovnostrann´ y troj´ uheln´ık otexturuje tak, ˇze v´ ysledn´ y tvar bude kulat´ y. Aby bylo moˇzn´e zobrazovat polopr˚ uhledn´e objekty bez v´ yrazn´ ych pˇrechod˚ u pˇrekr´ yvaj´ıc´ıch se splat˚ u je v´ yhodn´e pouˇz´ıt 8
kruhovou texturu s rozloˇzen´ım pr˚ uhlednosti dle obr´azku 2.8, kde nejvyˇsˇs´ı hodnoty rozloˇzen´ı pˇredstavuj´ı nepr˚ uhledn´e ˇc´ asti textury.
Obr´ azek 2.8: Gaussovo rozloˇzen´ı Pˇri reprezentaci povrchu objekt˚ u pomoc´ı takto vytvoˇren´ ych entit je potˇreba db´at na jejich rozloˇzen´ı po povrchu modelu, tak aby nedoch´azelo k jejich pˇr´ıliˇsn´emu pˇrekr´ yv´an´ı, z d˚ uvodu nekonstantn´ı m´ıry pr˚ uhlednosti.
Obr´ azek 2.9: Vztah mezi rozloˇzen´ım pr˚ uhlednosti a vzd´alenostmi bod˚ u
Z obr´ azku 2.9 je patrn´e, ˇze pˇri zv´ yˇsen´ı vzd´alenosti stˇred˚ u bod˚ u se v m´ıstˇe pˇrekr´ yv´ an´ı podstatnˇe mˇen´ı celkov´ a velikost pr˚ uhlednosti pro danou oblast.
2.4
Poˇ zadavky na syst´ em
Aby byl syst´em prakticky vyuˇziteln´ y plynou z toho n´asleduj´ıc´ı poˇzadavky: • schopnost rychl´eho zobrazen´ı velk´eho objemu dat • zobrazen´ı vˇetˇs´ıho poˇctu objekt˚ u do sebe • nastavitelnost pr˚ uhlednosti u libovoln´eho objektu • nastaven´ı velikosti surfelu • manipulace se sc´enou • generov´ an´ı testovac´ıch objekt˚ u
9
• naˇc´ıt´ an´ı objekt˚ u z extern´ıho zdroje • pˇrevod polygon´ aln´ıho modelu Schopnost rychl´eho zobrazen´ı velk´eho objemu dat je z´akladn´ım stavebn´ım kamenem cel´eho syst´emu. Uvaˇzujeme–li zobrazov´an´ı stovek tis´ıc bod˚ u, n´e–li v´ıce je nutn´e zaruˇcit v dan´e situaci co moˇzn´ a nejvyˇsˇs´ı rychlost pˇrekreslovan´ı cel´e sc´eny. Pro vyˇsˇs´ı vyuˇzitelnost syst´emu je vhodn´e m´ıt moˇznost komponovat sc´enu z v´ıce neˇz jednoho 3D modelu. S t´ım souvis´ı i nutnost takto zkomponovanou sc´enu korektnˇe zobrazit. Pˇri komponov´ an´ı sc´eny z v´ıce neˇz jednoho 3D modelu se nezˇr´ıdka stane, ˇze tˇelesa um´ıstˇen´e uvnitˇr jin´ ych tˇeles nebudou vidˇet. Coˇz sice nen´ı chyba, ale je vhodn´e vnˇejˇs´ım tˇeles˚ um nastavit jistou m´ıru pr˚ uhlednosti, tak aby vˇsechny zobrazovan´e tˇelesa byly zˇreteln´e. Jelikoˇz se 3D modely obvykle liˇs´ı svou velikost´ı co do d´elky, v´ yˇsky ˇci ˇs´ıˇrky nen´ı vˇzdy nutn´e popisovat jejich povrch stejnˇe velik´ ymi surfely. Rozmˇerovˇe n´aroˇcnˇejˇs´ı trojrozmˇern´ y u ´tvar, s nev´ yrazn´ ymi nerovnostmi povrchu je v´ yhodn´e aproximovat surfely vyˇsˇs´ıch rozmˇer˚ u, neˇz objekt, kter´ y co do velikosti je nepatrn´ y, ale za to m´a ˇclenit´ y povrch. Z hlediska vyuˇzitelnosti syst´emu je v´ yhodn´e do nˇej zaˇclenit manipulaci se sc´enou. Jak rotace kolem vˇsech os tak, i posunut´ı do libovoln´eho bodu. Pro otestov´an´ı funkˇcnosti zobrazen´ı i manipulace se sc´enou je nutn´e vytvoˇrit sadu testovac´ıch 3D model˚ u, kter´e budou pˇr´ımo integrov´ any do syst´emu. Na rozd´ıl od testovac´ıch objekt˚ u zahrnut´ ych ve vnitˇrn´ı struktuˇre syst´emu, je vhodn´e pˇripojit ˇc´ ast, kter´ a bude m´ıt za u ´kol naˇc´ıt´an´ı 3D model˚ u z extern´ıho zdroje. Jelikoˇz velik´e mnoˇzstv´ı takto naˇcten´ ych 3D model˚ u bude pravdˇepodobnˇe reprezentov´ano polygon´aln´ı s´ıt´ı, je nutn´e takto tvoˇren´ y trojrozmˇern´ yu ´tvar pˇrev´est na u ´tvar tvoˇren´ y body.
10
Kapitola 3
N´ avrh syst´ emu V t´eto kapitole se budu zaob´ırat rozdˇelen´ım do jednotliv´ ych funkˇcn´ıch celk˚ u a jejich napojen´ı do zbytku syst´emu. Syst´em je postaven nad knihovnou OpenSceneGraph. To pˇredpokl´ad´ a existenci hlavn´ıho vykresliteln´eho objektu (CSplatPlane), kter´ y je pˇripojiteln´ y do grafu sc´eny OSG. K tomu slouˇz´ı ˇcistˇe virtu´aln´ı tˇr´ıda OSG::Drawable, ze kter´e bude samostatnˇe vykresliteln´ y objekt odvozen. Tato tˇr´ıda po pˇripojen´ı do grafu sc´eny zaruˇc´ı, ˇze pˇri pr˚ uchodu grafu ve vykreslovac´ı ˇc´asti se provede virtu´aln´ı metoda drawImplementation, kter´a provede vykreslen´ı cel´eho modelu.
Obr´azek 3.1: Diagram tˇr´ıd
3.1
Samostatnˇ e vykresliteln´ a entita
Samostatnˇe vykresliteln´ a entita je reprezentov´ana tˇr´ıdou CSplat, jenˇz zapouzdˇruje vˇsechny poˇcetn´ı u ´kony ke tvorbˇe splatu (viz kapitola 2.3) a jeho n´asledn´eho vykreslen´ı. Jelikoˇz je nutn´e pro korektn´ı zobrazen´ı cel´eho pr˚ uhledn´eho modelu m´ıt splaty seˇrazen´e od nejvzd´alenˇejˇs´ıho k nejbliˇzˇs´ımu rozhodl sem se do tˇr´ıdy CSplat um´ıstit metodu pro v´ ypoˇcet a n´asledn´e zjiˇstˇen´ı vzd´ alenosti od konkr´etn´ı transformaˇcn´ı matice. Tato metoda by sice nemusela b´ yt zde, ale pro jednoduˇsˇs´ı manipulaci nad jednotliv´ ymi body je v´ yhodnˇejˇs´ı takto um´ıstˇena.
3.2
Datov´ a struktura pro popis cel´ eho modelu
Je reprezentov´ ana tˇr´ıdou CSplatArray. Pˇrij´ım´a jiˇz seˇrazen´e pole bod˚ u, kter´e n´aslednˇe rozdˇeluje na vyˇsˇs´ı mnoˇzstv´ı pol´ı o menˇs´ım poˇctu bod˚ u tak, ˇze v jednotliv´em poli z˚ ust´avaj´ı pouze u ´plnˇe nepr˚ uhledn´e body, ˇci body s jistou m´ırou pr˚ uhlednosti. Pˇri n´asledn´em vykreslen´ı se projdou vˇsechny vznikl´e pole bod˚ u a omez´ı se t´ım jak testov´an´ı zmˇeny stavov´eho automatu OpenGL, tak i poˇcet jeho zmˇen. Jednotliv´e pole bod˚ u obsahuj´ı vˇsechny informace
11
nutn´e k vykreslen´ı vˇsech bod˚ u (pozice vrchol˚ u, norm´alov´ y vektor, barvu a koordin´aty textur) tak, aby bylo moˇzn´e vyuˇz´ıt OpenGL funkci glDrawArrays a vyhnou se tak pˇr´ıliˇsn´emu vol´an´ı funkc´ı pro definov´ an´ı kaˇzd´eho vrcholu zvl´aˇst’ (glVertex). Toto sice zvyˇsuje pamˇet’ovou n´aroˇcnost cel´eho syst´emu, ale na druhou stranu podstatnˇe zvyˇsuje rychlost vykreslov´ an´ı modelu.
3.3
Objekt pˇ ripojiteln´ y do grafu sc´ eny OSG
Jaj jiˇz bylo zm´ınˇeno v u ´vodu kapitoly je objekt reprezentov´an tˇr´ıdou CSplatPlane odvozenou od OSG::Drawable. Tud´ıˇz je pˇripojiteln´ y do grafu sc´eny OSG jako vykresliteln´ y objekt. Zapouzdˇruje vykreslov´ an´ı a ˇrazen´ı bod˚ u cel´e kompozice bod˚ u. Pro zobrazen´ı v´ıce objekt˚ u do sebe tato tˇr´ıda mus´ı m´ıt schopnost pˇripojen´ı objekt˚ u stejn´eho typu, pˇri zachov´an´ı korektn´ıho zobrazen´ı. Proto se bude chovat jako strom (souvisl´ y acyklick´ y neorientovan´ y graf y uzel kop´ıruje do sebe ukazatele na jednotliv´e body potomk˚ u. Z toho [8]), s t´ım ˇze rodiˇcovsk´ plyne, ˇze uzel pˇripojen´ y do grafu sc´eny OSG bude zahrnovat v jednom jedin´em poli informace o vˇsech bodech cel´e kompozice model˚ u. Koˇrenov´ y uzel cel´e kompozice model˚ u provede nad cel´ ym polem postupnˇe troj´ı seˇrazen´ı a vytvoˇr´ı si tˇri datov´e struktury popsan´e v pˇredeˇsl´e podkapitole tak, ˇze kaˇzd´ a ze struktur bude reprezentovat pohled z jin´eho smˇeru (seshora, od pˇredn´ı strany a od lev´e strany). Posl´eze pˇri samotn´em kreslen´ı se vybere strana podle transformaˇcn´ı matice a vykresl´ı se.
3.4
Testovac´ı modely
K ovˇeˇren´ı korektn´ı funkˇcnosti datov´e struktury popsan´e v pˇredeˇsl´e podkapitole je potˇreba vytvoˇrit skupinu testovac´ıch model˚ u, zahrnut´ ych pˇr´ımo v syst´emu. Kaˇzd´ y jednotliv´ y testoyt pˇripojen vac´ı model je odvozen od tˇr´ıdy CSplatPlane (viz. obr´azek 3.1) tak, aby mohl b´ do kompozice model˚ u a n´ aslednˇe do grafu sc´eny. Jelikoˇz bod nem´a konstantn´ı velikost pr˚ uhlednosti (viz. obr´ azek 2.8) je potˇreba pˇri generov´an´ı libovoln´eho 3D modelu db´at na korektn´ı um´ıstˇen´ı surfel˚ u do povrchu tˇelesa.
3.4.1
Kv´ adr
Pro generov´ an´ı bod˚ u na povrchu kv´adr vyuˇzijeme toho, ˇze kv´adr se skl´ad´a ze ˇsesti stˇen, jenˇz kaˇzd´e dvˇe protilehl´e stˇeny jsou rovnobˇeˇzn´e. N´aslednˇe generovan´e body um´ıst´ıme do mˇr´ıˇzky tak, aby pˇrechody pr˚ uhlednosti surfel˚ u mezi jednotliv´ ymi ˇc´astmi plochy byly co nejrovnomˇernˇejˇs´ı. Tento objekt je reprezentov´an tˇr´ıdou CCubePlane.
3.4.2
Koule
U generov´ an´ı bod˚ u na povrchu koule budeme surfely um´ıst’ovat se stejn´ ym zˇretelem jako ~ u krychle. A pro urˇcen´ı norm´ alov´eho vektoru N kaˇzd´emu surfelu vyuˇzijeme vlastnosti ~ stˇredov´e symetrie koule. Pro kaˇzd´ y bod A na povrchu koule a jeho norm´alov´ y vektor N ~ plat´ı: A − S = N , kde S je stˇred koule. Tento testovac´ı objekt je reprezentov´an tˇr´ıdou CSplatSphere.
12
3.5
Naˇ c´ıt´ an´ı 3D model˚ u z extern´ıch zdroj˚ u
Na rozd´ıl od objekt˚ u popsan´ ych v pˇredchoz´ı kapitole, kter´e jsou jen pro testovac´ı u ´ˇcely, je naˇc´ıt´an´ı 3D model˚ u z extern´ıch zdroj˚ u v´ıce zamˇeˇreno na praktickou vyuˇzitelnost syst´emu. Bˇeˇzn´e form´ aty soubor˚ u 3D model˚ u vyuˇz´ıvaj´ı polygon´aln´ı s´ıt’, coˇz je nutn´e pˇrev´est na bodovˇe orientovan´ y model. Postupnˇe pˇrevedeme obecn´ y polygon na troj´ uheln´ıky, kter´e se posl´eze jednoduˇseji pˇretransformuj´ı na odpov´ıdaj´ıc´ı poˇcet surfel˚ u. Tento objekt je reprezentov´ an tˇr´ıdou CSplatPlaneFile.
3.5.1
Transformace troj´ uheln´ıku na surfely
Pˇri transformaci z obecn´eho troj´ uheln´ıku v prostoru budu vych´azet z jeho velikosti. Pokud budu m´ıt moˇznost ho aproximovat jedin´ ym surfelem o pˇredem zadan´e velikosti, pak toho mus´ım vyuˇz´ıt. V opaˇcn´em pˇr´ıpadˇe pˇrich´az´ı na ˇradu vyplnˇen´ı obsahu jeho obsahu pomoc´ı podobn´eho principu, jako u testovac´ıch objekt˚ u. Budu postupnˇe proch´azet troj´ uheln´ıkem od nejdelˇs´ı strany ke zb´ yvaj´ıc´ımu bodu a po pˇr´ımk´ach pokl´adat surfely.
3.6
Tˇ r´ıda CSplat
Tato tˇr´ıda reprezentuje samostatnˇe existuj´ıc´ı a vykreslitelnou entitu. Pˇri sv´em vytvoˇren´ı (vol´an´ı konstruktoru) jiˇz plnˇe reprezentuje surfel. Pˇri vol´an´ı konstruktoru se ze zadan´e pozice a norm´ aly, popˇr´ıpadˇe velikosti ˇci barvy ve form´atu RGBA, vytvoˇr´ı za pouˇzit´ı rovuheln´ıku se uchov´avaj´ı v jednonic popsan´ ych v kapitole 2.3. Vrcholy rovnostrann´eho troj´ rozmˇern´em poli. Norm´ alov´ y vektor, barva a pozice jsou samostatnˇe uloˇzeny. V t´eto f´ azi se objekt po zavol´an´ı inline metody Render vykresl´ı podle aktu´aln´ı transformaˇcn´ı matice. Pro pouˇzit´ı ve vˇetˇs´ım celku, kde bude potˇreba ˇradit vˇsechny pˇredem vytvoˇren´e body byla implementov´ana dvojice metod, kter´e dok´aˇz´ı spoˇc´ıtat a n´aslednˇe pˇreposlat vzd´ alenost od transformaˇcn´ı matice. Pro rychlejˇs´ı z´ısk´an´ı vzd´alenosti objekt tuto informaci uchov´ av´ a aˇz pˇri opˇetovn´em vol´an´ı metody k jej´ımu vypoˇcten´ı provede v´ ypoˇcet. Pro dynamickou zmˇenu velikosti bodu jsem implementoval dvojici metod, jednu k nastaven´ı nov´e velikosti a druhou k pˇrepoˇc´ıt´an´ı vrchol˚ u rovnostrann´eho troj´ uheln´ıku. Objekt takt´eˇz podporuje zmˇenu barvy metodou SetColor a zjiˇstˇeni stavu pr˚ uhlednosti, kter´a navrac´ı kladnou hodnotu pokud nastaven´a barva m´a alfa kan´al menˇs´ı jedn´e.
3.7
Tˇ r´ıda CSplatArray
Tato tˇr´ıda reprezentuje datov´ a struktura pro vykreslov´an´ı shluk˚ u bod˚ u s moˇznost´ı vykreslen´ı, a to metodou Render, do kter´e vstupuje informace o smˇeru vykreslov´an´ı. Pro vytvoˇren´ı t´eto struktury, je j´ı nutn´e pˇredat jednorozmˇern´e pole entit popsan´ ych v pˇredeˇsl´e podkapitole. Z tohoto pole se vezmou postupnˇe informace o vrcholech troj´ uheln´ık˚ u a uloˇz´ı se do jednorozmˇern´eho pole re´ aln´ ych ˇc´ısel nazvan´eho Verticies. Podobn´ ym zp˚ usobem se zkop´ıruj´ı norm´alov´e vrcholy a informace o barv´ach. Naraz´ı li se na zmˇenu pr˚ uhlednosti (pˇredchoz´ı byl pr˚ uhledn´ y a tento nen´ı, nebo opaˇcnˇe) vytvoˇr´ı se nov´a struktura a pokraˇcuje se stejn´ ym zp˚ usobem aˇz do posledn´ıho zadan´eho bodu. Takto vytvoˇren´e struktury jsou uloˇzeny ve STL vectoru nazvan´eho Ar. Pˇri zavol´ an´ı metody Render s pˇr´ısluˇsn´ ym smˇerem vykreslov´an´ı se postupnˇe proch´ az´ı STL vector Ar a za vyuˇzit´ı OpenGL funkc´ı glVertexPointer, glNormalPointer, glColorPointer, glTexCoordPointer, glDrawArrays se vykresluje podle aktu´aln´ı transformaˇcn´ı matice 13
cel´a sc´ena. Pˇri pr˚ uchodu t´ımto vectorem testuji prvn´ı barva na hodnotu pr˚ uhlednosti, a pokud urˇc´ı dan´ a hodnota, ˇze jde o ˇc´ ast pr˚ uhlednou, vyp´ın´am Z–buffer a zap´ın´am pr˚ uhlednost. V opaˇcn´em pˇr´ıpadˇe, jestliˇze jde o ˇc´ast nepr˚ uhlednou, vyp´ın´am pr˚ uhlednost a zap´ın´am testov´an´ı hloubky.
3.8
Tˇ r´ıda CSplatPlane
Tato tˇr´ıda odvozen´ a od OSG::Drawable je pˇripojiteln´a do grafu sc´eny OSG, a pro sv´e vykreslen´ı vyuˇz´ıv´ a virtu´ aln´ı metodu drawImplementation podle doporuˇcen´ı manu´alu OSG. Do t´eto tˇr´ıdy se postupnˇe vkl´adaj´ı body, nebo objekty stejn´eho typu, jako je tato tˇr´ıda. Pˇri vloˇzen´ı bodu se uloˇz´ı ukazatel na bod do jednorozmˇern´eho pole pro pozdˇejˇs´ı vyuˇzit´ı. Pˇri vkl´ ad´ an´ı cel´eho modelu se zapamatuje ukazatel na takto vloˇzen´ y model a jeho body se pˇridaj´ı k bod˚ um jiˇz existuj´ıc´ım. Po ukonˇcen´ı vkl´ad´an´ı, at’ bod˚ u ˇci cel´ ych model˚ u, vypoˇc´ıt´ am ohraniˇcuj´ıc´ı kv´ adr (Bounding box) kolem v´ ysledn´eho modelu. K tomu aby byl objekt pouˇziteln´ y pro vykreslov´ an´ı je jeˇstˇe nutn´e zavolat metodu nazvanou SortAll. Kter´ a postupnˇe generuje tˇri transformaˇcn´ı matice podle pohledu (seshora, od pˇredn´ı strany a od lev´e strany) a velikosti ohraniˇcuj´ıc´ıho kv´adru. U kaˇzd´e takto vypoˇc´ıtan´e transformaˇcn´ı matice proch´ az´ı cel´e pole bod˚ u a u kaˇzd´eho zavol´a metodu na vypoˇc´ıt´an´ı vzd´alenosti. Posl´eze cel´e pole seˇrad´ı od nejvzd´ alenˇejˇs´ıho prvku k nejbliˇzˇs´ımu. S pomoc´ı takto seˇrazen´eho pole vytvoˇr´ı jeden prvek typu popsan´eho v pˇredeˇsl´e podkapitole. V tomto bodˇe je Model pˇripraven k vykreslen´ı. Pˇri vol´ an´ı metody pro vykreslen´ı se akor´at rozhodne, kter´e ze tˇr´ı struktur pro vykreslen´ı shluku bod˚ u se bude volat metoda Render a ve kter´em smˇeru. Pro v´ ybˇer smˇeru a urˇc´ı struktury slouˇz´ı metoda Update, kter´a je vol´ana v update cyklu syst´emu. Tato metoda zpˇetnˇe projde zpˇetnˇe cel´ y graf sc´eny OSG a zjist´ı aktu´aln´ı transformaˇcn´ı matici, podle kter´e rozhodne co a v jak´em smˇeru se bude nad´ale vykreslovat.
3.9
Tˇ r´ıda CCubePlane
Pˇri vytv´ aˇren´ı kv´ adru je nutn´e zn´ at jeho rozmˇery, a ploˇsnou velikost bodu, j´ımˇz se bude plocha vyplˇ novat. Proto konstruktor tohoto objektu obsahuje trojsloˇzkov´ y vektor (osg::Vec3) rozmˇer˚ u jednotliv´ ych hran. Pro kaˇzdou stˇenu generuji body tak, aby byl zachov´an jej´ı celistv´ y povrch a vlastnosti popsan´e v kapitole 3.4.1.
3.10
Tˇ r´ıda CSplatSphere
K vytvoˇren´ı kole plnˇe postaˇcuje znalost jej´ıho polomˇeru. Postupnˇe si ji rozdˇeluji na kruˇznice. Jednotliv´e kruˇznici pˇriˇrazuji body po jej´ım obvodu tak, aby byly zachov´any vlastnosti popsan´e v kapitole 3.4.1 a nevytv´aˇrely se body se stejn´ ym stˇredem.
14
Kapitola 4
Implementace V t´eto kapitole se budu zab´ yvat samotnou implementac´ı syst´emu, tak jak byl navrˇzen v kapitole pˇredeˇsl´e. Prvn´ı a stˇeˇzejn´ı z´ aleˇzitost´ı je Tˇr´ıda samostatnˇe vykresliteln´e entity, posl´eze jej´ı pˇr´ıprava a napojen´ı pro vykreslov´an´ı. N´asledov´ana gener´atory testovac´ıch objekt˚ uav uzavˇrena naˇc´ıt´ an´ım objekt˚ u z extern´ıch zdroj˚ u.
4.1
Volba implementaˇ cn´ıho jazyku
Jako implementaˇcn´ı jazyk jsem zvolil C++. C++ jako objektovˇe orientovan´ y programovac´ı jazyk je rozˇs´ıˇren´ım jazyka C. C++ podporuje nˇekolik programovac´ıch styl˚ u (paradigmat) jako je procedur´ aln´ı programov´ an´ı, objektovˇe orientovan´e programov´an´ı a generick´e programov´ an´ı, nen´ı tedy ˇcistˇe jazykem objektov´ ym. V souˇcasn´e dobˇe patˇr´ı C++ mezi nejrozˇs´ıˇrenˇejˇs´ı programovac´ı jazyky. Bjarne Stroustrup vyvinul C++ (p˚ uvodnˇe pojmenovan´e C with Classes“) v roce 1983 ” v Bellov´ ych Laboratoˇr´ıch (Bell Labs at Murray Hill, New Jersey) jako rozˇs´ıˇren´ı jazyka C. Rozˇsiˇrov´ an´ı zaˇcalo pˇrid´ an´ım tˇr´ıd, n´asledov´ano dalˇs´ımi rysy, virtu´aln´ı funkce, pˇretˇeˇzov´ an´ı oper´ator˚ u, v´ıcen´ asobn´ a dˇediˇcnost, ˇsablony a zach´azen´ı s v´ yjimkami.Standard programovac´ıho jazyka C++ by ratifikov´ an v roce 1998 jako ISO/IEC 14882:1998, st´avaj´ıc´ı verze je z roku 2003 (ISO/IEC 14882:2003). Nejnovˇejˇs´ı verze standardu, neform´alnˇe nazvan´ a C++0x, je prozat´ım ve v´ yvoji.
4.2
Volba 3D grafick´ ych n´ astroj˚ u
Pro tvorbu syst´emu jsem si vybral OpenSceneGraph, kter´ y je v´ ykonn´ ym 3D grafick´ ym n´astrojem vyuˇz´ıvan´ ym v´ yvojov´ ymi pracovn´ıky pro tvorbu vizu´aln´ı simulace, her, virtu´aln´ı reality, vˇedeck´ ych zobrazen´ı a modelov´an´ı. OpenSceneGraph je takt´eˇz open source a platformnˇe nez´ avisl´ y. Je postaven na konceptu SceneGraphu, zaˇrizuje objektovˇe orientovan´ y syst´em postaven´ y nad OpenGL. Osvobozuje v´ yvojov´eho pracovn´ıka od implementace a optimalizace n´ızko´ urovˇ nov´ ych grafick´ ych operac´ı, a poskytuje mnoho pˇr´ıdavn´ ych pom˚ ucek pro zv´ yˇsen´ı rychlosti n´ avrhu grafick´ ych aplikac´ı.[6]
4.2.1
OpenSceneGraph
ˇ ımˇz umoˇzn OpenSceneGraph je zcela naps´ an v jazyce C++ a postaven nad OpenGL. C´ ˇuje pln´e vyuˇzit´ı STL a n´ avrhov´ ych vzor˚ u. Poskytuje v´ yvojovou knihovnu, kter´a je volnˇe dostupn´a a zamˇeˇren´e na poˇzadavky koneˇcn´eho uˇzivatele. S´ıla OpenSceneGraphu je v jeho 15
v´ ykonu, rozˇsiˇritelnosti a pˇrenositelnosti. OpenSceneGraph tak´e podporuje jednoduchou zmˇenu vykreslovac´ıho procesu, jako je implementace vlastn´ıch vykresliteln´ ych entit, ˇcehoˇz bude vyuˇz´ıv´ ano pˇri vytv´ aˇren´ı syst´emu pro vizualizaci 3D model˚ u reprezentovan´ ych mnoˇzinou povrchov´ ych bod˚ u[2]. J´adro grafu sc´eny zapouzdˇruje funkcionalitu OpenGL zahrnuj´ıc´ı nejnovˇejˇs´ı rozˇs´ıˇren´ı. Poskytuje vykreslovac´ı optimalizace jako oˇrez´av´an´ı a ˇrazen´ı, a cel´a sb´ırku pˇr´ıpojn´ ych knihoven s jejichˇz pomoc´ı je moˇzn´e vyvinout v´ ykonou grafickou aplikaci velice rychle. Pro ˇcten´ı a z´ apis souboru dat datab´azov´a knihovna (osgDB) pˇrid´av´a podporu pro ˇsirokou variabilitu datov´ ych form´ at˚ u. Pomoc´ı mechanismu dynamicky zasunovateln´ ych plugin˚ u podporuje naˇc´ıt´ an´ı r˚ uznorod´ ych 3D dat a obr´azk˚ u. Podporovan´e form´ aty 3D dat: LightWave (.lwo), Alias Wavefront (.obj), Carbon Graphics GEO (.geo), 3D Studio MAX (.3ds), Peformer (.pfb), Quake Character Models (.md2), Direct X (.x), Designer Workshop (.dw) a AC3D (.ac) a vnitˇrn´ı .osg ASCII form´at. Podporovan´e form´ aty obr´ azk˚ u: .rgb, .gif, .jpg, .png, .tiff, .pic, .bmp, .tga
4.2.2
OpenGL
Jak jiˇz bylo pops´ ano v pˇredchoz´ı podkapitole OpenSceneGraph je postaven na OpenGL. OpenGL (Open Graphics Library) se obvykle definuje jako jazykovˇe a platformnˇe nez´avisl´ a API (rozhran´ı pro programov´ an´ı aplikac´ı[9]) pro psan´ı aplikac´ı, kter´e vytv´aˇr´ı 3D (/2D) poˇc´ıtaˇcovou grafiku. Rozhran´ı sest´av´a s v´ıce neˇz 250 r˚ uzn´ ych vol´an´ı funkc´ı. M˚ uˇze b´ yt vyuˇzita k vykreslen´ı komplexn´ı trojrozmˇern´e sc´eny za pomoc´ı jednoduch´ ych primitiv. OpenGL bylo vyvinuto Silicon Graphics Inc. (SGI) v roce 1992 a je popul´arn´ı v hern´ım pr˚ umyslu, kde konkuruje Direct3D na platform´ach Microsoft Windows. OpenGL je ˇsiroce uˇz´ıv´ana v CAD, virtu´ aln´ı realitˇe, vˇedeck´ ych vizualizac´ıch, leteck´ ych simul´atorech a v´ yvoji videoher.[7]
4.3
Naˇ c´ıt´ an´ı 3D model˚ u z extern´ıho zdroje
Naˇc´ıt´an´ı model˚ u z extern´ıho zdroje je reprezentov´ano tˇr´ıdou CSplatPlaneFile, kter´a pˇri vol´an´ı konstruktoru tento soubor otev´ır´a a naˇc´ıt´a z nˇej data do instance tˇr´ıdy typu tˇr´ıdy osg::Group za pomoci knihovny osgDB. Takto naˇcten´a data maj´ı stromovou strukturu. N´aslednˇe pokud je naˇcten´ı kompletn´ı, proch´az´ım graf a pro vˇsechny geode uzly, jenˇz obsahuj´ı alespoˇ n jeden prvek typu geometry, vol´am vlastn´ı metodu AddGeometry. Tato metoda proch´ az´ı samotn´ a data 3D modelu a pro kaˇzd´ y nalezen´ y troj´ uheln´ık zavol´a metodu AddTriangle s nalezen´ ymi vrcholy, norm´alami a barvou. Metoda AddTriangle vymˇen´ı pozice bod˚ u tak, aby byla jasnˇe zˇreteln´a nejdelˇs´ı strana troj´ uheln´ıku. Posl´eze proch´ az´ı rovnobˇeˇznˇe s nejdelˇs´ı hranou troj´ uheln´ık a generuje body na u ´seˇcce vznikl´e pr˚ unikem pˇr´ımky a dvou zb´ yvaj´ıc´ıch hran. Pro vˇsechny generovan´e body v ploˇse vymezen´e troj´ uheln´ıkem pouˇz´ıv´am, pˇri jejich vytv´aˇren´ı, norm´alov´ y vektor tohoto troj´ uheln´ıku.
4.4
Vstupn´ı bod aplikace
Vstupn´ım bodem cel´eho syst´emu je funkce main. Na jej´ım zaˇc´atku se proch´az´ı argumenty pˇr´ıkazov´e ˇr´ adky. Vˇzdy, po nalezen´em ucelen´em celku argument˚ u bud’ pro generov´an´ı implicitn´ıch model˚ u, nebo naˇc´ıt´ an´ı z extern´ıho zdroje, se prov´ad´ı jedna z alternativ vytv´aˇren´ı objekt˚ u. Po bezchybn´em pr˚ uchodu vˇsech argument˚ u se vol´a metoda CSplatPlane::SortAll nad koˇrenov´ ym uzlem cel´e kompozice model˚ u, pro jej´ı pˇripraven´ı k zobrazen´ı. N´aslednˇe se 16
prov´ad´ı nastaven´ı zobrazen´ı, pˇripojen´ı dat do sc´eny a hlavn´ı programov´a smyˇcka. Po jej´ım ukonˇcen´ı (ukonˇcen´ı syst´emu) se uvolˇ nuj´ı zdroje a syst´em ukonˇc´ı sv˚ uj ˇzivotn´ı cyklus.
4.5
Ovl´ ad´ an´ı syst´ emu
V t´eto kapitole se budu zab´ yvat ovl´ad´an´ım syst´emu. Od jeho spuˇstˇen´ı aˇz k ovl´ad´ an´ı v´ ysledn´eho zobrazen´ı.
4.5.1
Spouˇ stˇ en´ı aplikace
Syst´em je implementov´ an jako konzolov´a aplikace. Ke sv´emu spuˇstˇen´ı vyˇzaduje zad´an´ı parametr˚ u ke generov´ an´ı implicitn´ıch objekt˚ u, ˇci naˇc´ıt´an´ı dat z extern´ıch zdroj˚ u. Po korektn´ım zpracov´ an´ı parametr˚ u se prov´ ad´ı koneˇcn´e u ´pravy cel´eho zobrazovan´eho modelu (kompozice model˚ u) a ˇrazen´ı bod˚ u pro vykreslen´ı. N´aslednˇe se inicializuje grafick´e prostˇred´ı. Parametry: • -h Vyp´ıˇse na standardn´ı v´ ystup text s n´apovˇedou, jak korektnˇe spouˇstˇet syst´em. • -g Slouˇz´ı ke generov´ an´ı objekt˚ u. Za t´ımto parametrem mus´ı n´asledovat informace o generovan´em tvaru n´ aslednˇe popsan´e. – box Tento parametr slouˇz´ı pro generov´an´ı krychle. Hned za t´ımto parametrem n´asleduj´ı voliteln´ a nastaven´ı pro generov´an´ı tvaru. ∗ ∗ ∗ ∗ ∗ ∗
a=
- velikost strany a kv´adru b= - velikost strany b kv´adru c= - velikost strany c kv´adru size= - velikost bodu, kter´ ym se bude povrch reprezentovat RGB - RGB barva v´ ysledn´eho objektu RGBA - RGBA barva v´ ysledn´eho objektu
– sphere Tento parametr slouˇz´ı pro generov´an´ı koule. Hned za t´ımto parametrem n´asleduj´ı voliteln´ a nastaven´ı pro generov´an´ı tvaru. ∗ ∗ ∗ ∗
r= - polomˇer v´ ysledn´e koule size= - velikost bodu, kter´ ym se bude povrch reprezentovat RGB - RGB barva v´ ysledn´eho objektu RGBA - RGBA barva v´ ysledn´eho objektu
• -f Slouˇz´ı pro naˇc´ıt´ an´ı z extern´ıho zdroje. Za t´ımto parametrem mus´ı n´asledovat cesta a n´ azev souboru ke ˇcten´ı. Voliteln´ y parametr -size slouˇz´ı k pˇredefinov´ an´ı velikosti bodu, kter´ ym se bude dan´ y model reprezentovat
17
4.5.2
Ovl´ ad´ an´ı sc´ eny
Pro manipulaci se sc´enou jsem vyuˇzil p˚ uvodn´ı nastaven´ı OpenSceneGraphu. Pro manipulaci je pouˇz´ıv´ ana myˇs. Rotace se prov´adˇej´ı stiskem lev´eho tlaˇc´ıtka myˇsi, kdy OSG podle jej´ı vybere stˇred rotace a n´ aslednˇe provede rotaci kolem tohoto bodu. Pro hloubkov´e transformace respektive (pˇribl´ıˇzen´ı ˇci odd´alen´ı) je pouˇzito prav´eho tlaˇc´ıtka myˇsi a n´asledn´eho vertik´aln´ıho posunu. K transformaci po zb´ yvaj´ıc´ıch os´ach je vyuˇz´ıv´ano stˇredov´e tlaˇc´ıtko. D˚ uleˇzit´e kl´ avesy: • S - zobraz´ı frame rate (poˇcet sn´ımk˚ u za jednotku ˇcasu) • L - zap´ın´ a/vyp´ın´ a osvˇetlen´ı • T - zap´ın´ a/vyp´ın´ a textury • mezern´ık - uvede transformaˇcn´ı matici sc´eny do poˇc´ateˇcn´ıho stavu • Esc - ukonˇc´ı aplikaci
18
Kapitola 5
V´ ysledky Syst´em byl testov´ an na: AMD Athlon(tm) XP 2200+ 1.80 Ghz, 768 MB RAM, grafick´a karta ATI RADEON 9200 SERIES 128MB AGP 8X, verze ovladaˇce 8.252–060503a– 038185C–ATI a dosahuje v´ ysledk˚ u uveden´ ych v tabulce 5.1. N´azev Implicitn´ı objekt obr´ azek 5.1 Implicitn´ı objekt Viper MK2 obr´ azek 5.2 Viper MK2 50% pr˚ uhlednost Postaviˇcka obr´ azek 5.3 Postaviˇcka obr´ azek 5.3 Sofa obr´ azek 5.4
celkov´ y poˇcet bod˚ u poˇcet pr˚ uhledn´ ych bod˚ u frame rate 240 000 120 000 5.98 240 000 0 7.20 389 703 0 5.03 389 719 389 719 4.4 1 037 917 0 1.4 146 311 0 11.6 183 153 0 10
Tabulka 5.1: V´ ysledky testov´an´ı
N´ azev Viper MK2 obr´azek 5.2 Postaviˇcka obr´ azek 5.3 Sofa obr´ azek 5.4
poˇcet polygon˚ u frame rate 1 924 180 26 190 140 60 988 60
Tabulka 5.2: Origin´aln´ı polygon´aln´ı modely
Zu ´daj˚ u v tabulce 5.1 je patrn´e, ˇze pˇri zachov´an´ı stejn´eho, ˇci podobn´eho mnoˇzstv´ı bod˚ u a zmˇenˇe pomˇeru mezi nepr˚ uhledn´ ymi a pr˚ uhledn´ ymi body doch´az´ı k podstatn´e zmˇenˇe rychlosti pˇrekreslen´ı.
19
Obr´ azek 5.1: Implicitn´ı model dvou krychl´ı vloˇzen´ ych do sebe
Obr´azek 5.2: Testovac´ı model Viper MK2 na levo v´ ystup z vyv´ıjen´eho syst´emu, na pravo origin´aln´ı polygon´ aln´ı model
20
Obr´azek 5.3: Testovac´ı model postaviˇcky z leva 1 037 917 bod˚ u, 146 311 bod˚ u a origin´ aln´ı polygon´ aln´ı model a u kaˇzd´eho detail lev´eho oka
21
Obr´azek 5.4: Testovac´ı model postaviˇcky sofa.3ds na hoˇre polygon´aln´ı model dole v´ ystup syst´emu
22
Kapitola 6
Z´ avˇ er Pr´ace popisuje syst´em pro vizualizaci 3D objekt˚ u reprezentovan´ ych mnoˇzinou povrchov´ ych bod˚ u. V r´ amci zad´ an´ı se podaˇrilo vytvoˇrit syst´em s moˇznost´ı komponov´an´ı sc´eny s v´ıce objekt˚ u, at’ jiˇz implicitn´ıch (kole, kv´ adr), ˇci v r´amci OSG dostateˇcn´eho mnoˇzstv´ı a r˚ uznorodosti podporovan´ ych form´ at˚ u pro naˇc´ıt´an´ı dat z extern´ıch soubor˚ u. Objekt˚ um je moˇzn´e pˇri jeho zpuˇstˇen´ı urˇcit velikost surfelu, kter´ ym se bude dyn´ y povrch popisovat, a takt´eˇz i barvu jak ve form´ atu RGB, tak i RGBA, pˇri zachov´an´ı korektn´ıho zabrazen´ı cel´e sc´eny. Ovl´ad´ an´ı syst´emu pomoc´ı myˇsi je velmi intuitivn´ı. Pˇresto nem˚ uˇze co do v´ ykonu konkurovat profesion´aln´ım syst´em˚ um stejn´eho zamˇeˇren´ı. y model, Z namˇeˇren´ ych hodnot v tabulk´ach 5.1 a 5.2 a obr´azku 5.3 vypl´ıv´a, ˇze splatov´ m˚ uˇze menˇs´ım mnoˇzstv´ım bod˚ u obs´ahnout kompletn´ı topologii tˇelesa v urˇcit´e vzd´alenosti od pozorovatele, pro vyˇsˇs´ı pˇribl´ıˇzen´ı je nutn´e mˇenit velikost a poˇcet bod˚ u objektu, tak aby byly zobraziteln´e detaily. Naproti tomu reprezentaci polygon´aln´ı staˇc´ı, aby v t´eto mˇr´ıˇzce nebyly mezery, coˇz by mˇelo ruˇsiv´ y efekt. Popisov´an´ım topologie objektu za pomoc´ı splat˚ u je, moˇzn´e tento objekt ˇc´ asteˇcnˇe vyhladit. Syst´em m˚ uˇze b´ yt nad´ ale modifikov´an a vylepˇsov´an, a to pˇredevˇs´ım zv´ yˇsen´ım v´ ykonu pˇri vykreslov´ an´ı za vyuˇzit´ı Vertex/Pixel shader, optimalizac´ım pˇri generov´an´ı a naˇc´ıt´ an´ı objekt˚ u, ˇci pˇr´ıd´ an´ım vˇetˇs´ıho mnoˇzstv´ı implicitn´ıch testovac´ıch objekt˚ u.
23
Literatura [1] Miguel Sainz, R. P.: Point-based rendering techniques. [online], [cit. 2007-05-6]. URL http://www.ifi.unizh.ch/vmml/admin/upload/Points CAG.pdf [2] OSG: OpenSceneGraph. [online], [cit. 2007-05-6]. URL http://www.openscenegraph.com/index.php [3] V., C.: Poˇc´ıtaˇcov´ a grafika Modelov´an´ı pevn´ ych tˇeles. [online], [cit. 2007-05-10]. URL http://bimbo.fjfi.cvut.cz/∼chalupec/pogr/system/files/ pogr-12-modelovaniteles.pdf [4] Weisstein, E. W.: NURBS Surface. From MathWorld–A Wolfram Web Resource. [online], [cit. 2007-05-6]. URL http://mathworld.wolfram.com/NURBSSurface.html [5] Wikipedia: The Free Encyclopedia. [online], [cit. 2007-05-6]. URL http://en.wikipedia.org/wiki/Surfel [6] Wikipedia: The Free Encyclopedia. [online], [cit. 2007-05-6]. URL http://en.wikipedia.org/wiki/OpenSceneGraph [7] Wikipedia: The Free Encyclopedia. [online], [cit. 2007-05-6]. URL http://en.wikipedia.org/wiki/Opengl [8] Wikipedie: Otevˇren´ a encyklopedie. [online], [cit. 2007-05-6]. URL http://cs.wikipedia.org/wiki/Strom %28graf%29 [9] Wikipedie: Otevˇren´ a encyklopedie. [online], [cit. 2007-05-6]. URL http://cs.wikipedia.org/wiki/API
24
Seznam pˇ r´ıloh A
CD, obsahuj´ıc´ı zdrojov´e k´ ody syst´emu, programovou dokumentaci, elektronickou verzi pr´ ace, spustitelnou aplikaci
25