Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1 VOD....................................................................................................................................................................3 1.1 ANAGLYPH.........................................................................................................................................................3 1.2 JAVA3D ...........................................................................................................................................................3 1.3 FYZICK A VIRTULNY SVET.................................................................................................................................4 2 RENDEROVANIE V JAVA3D...........................................................................................................................5 2.1 VOD................................................................................................................................................................5 2.2 HLAVN HRI....................................................................................................................................................5 2.3 PODMIENKY RENDEROVANIA A API.......................................................................................................................6 2.4 MANIPULCIA SCNY (BEHAVIOUR)........................................................................................................................7 3 ANALZA RIEENIA........................................................................................................................................8 3.1 JEDEN POHAD, JEDNO PLTNO..............................................................................................................................8 3.2 DVA POHADY, DVE PLTNA.................................................................................................................................9 3.3 DVA POHADY, TRI PLTNA, KONEN RIEENIE.....................................................................................................10 3.4 OBJEKTOV DIAGRAM RIEENIA...........................................................................................................................11 4 TVORBA ANAGLYPH.....................................................................................................................................12 4.1 KONCEPTULNY NVRH..................................................................................................................................... 12 4.2 PODROBN NVRH............................................................................................................................................ 13 5 LOGICK MODEL SYSTMU......................................................................................................................15 5.1 ODDELENIE A SPOJENIE ZLEITOST.....................................................................................................................16
1 vod
Cieom projektu bolo natudova problematiku tvorby Anaglyph obrzkov v prostred Java3d a vytvori v tomto prostred demontran program AnaglyphDemo.
1.1 Anaglyph
Anaglyph je vonm okom vnman ako dvojit / zdvojen obraz jednej scny. Pri pouit 3d okuliarov, ktor maj modr a erven filter sa anaglyph jav ako priestorov obrzok, t.j. obrzok, v ktorom sa d vnma hbka. Anaglyph mono vytvori syntzou dvoch obrzkov jednej scny, priom mono rozli tri rzne prpady vstupov: 1. Jeden pohad na scnu, t.j. jeden obrzok. V tomto prpade je k dispozci iba jedno vnmanie scny / obrzok. Druh obrzok / vnmanie sveta sa vytvor posunutm pvodnho obrzku v smere osi x v ubovonom smere. 2. Dva pohady na scnu a dva ciele pohadu. V tomto prpade s k dispozci dve rzne vnmania jednej scny / obrzky z dvoch rznych stanovsk. Pozorovate pri zmene stanoviska po priamke nemen vektor pohadu. To znamen, e pozorovate sa pozer stle pred seba tm istm smerom vektory pohadu VP1 a VP2 pre obidve stanovisk s rovnak a rovnoben. 3. Dva pohady na scnu a jeden cie pohadu. Aj v tomto prpade s k dispozci dve rzne vnmania jednej scny. Avak v tomto prpade pozorovate pri zmene stanoviska po priamke men aj vektor pohadu, pretoe sa pozer stle na to ist miesto. Uveden sa d interpretova aj tak, e pozorovate men stanovisko po krunici so stredom, ktor je cie pohadu. Vektory pohadu VP1 a VP2 nie s rovnoben. AnaglyphDemo pouva vnmanie scny slo 3, t.j. dva pohady a jeden cie pohadu.
1.2 Java3D
Kninica Java3D je uren pre tvorbu a renderovanie trojrozmernej scny sveta. Pojem scna asi intuitvne chpe kad ako viditen as sveta. Kninica Java3D je postaven na dtovej truktre s nzvom graf scny (Scene Graph). Graf scny obsahuje definciu scny, t.j. objekty, ktor sa nachdzaj na scne, ich pozciu, vzhad objektov, pohad na scnu, pozciu kamery a in. Aj ke je zauvan pojem graf scny, v skutonosti ide o strom, take v alom texte bude pouvan aj pojem strom alebo pod strom. Graf scny v Java3d mono logicky rozdeli na dva pod stromy: Obsah scny content branch. Definuje obsah, teda o sa nachdza na scne, kde sa to nachdza a ako to vyzer farba, materil a in. alej definuje svetl scny, tie ich pozciu a smer a sprvanie objektov. Pohad na scnu / vnmanie scny view branch. Definuje ako sa pozorovate pozer na scnu, pozciu kamery / oka a smer pohadu. Vzhadom k tomu, e graf scny je v podstate strom, mono v om rozli vntorn uzly a listy. Vntorn uzly sa pouvaj hlavne ako transforman uzly, t.j. intancie triedy TransformGroup, ktor obsahuj maticu transformcie posunutie, rotcia a in. Listy stromu mu by bu objekty, svetl a sprvanie (content branch) alebo pohad a kamera (view branch). Graf scny v Java3D mono budova od korea stromu k listom stromu prkazom node.addChild, kde node ako vntorn uzol stromu me by troch typov: BranchGroup kompilan jednotka, TransformGroup pre vetkch potomkov (podstrom) plat dan transformcia, Group nad trieda prvch dvoch menovanch typov. V tejto prci budem pojmy ako uzol, list, potomok a podstrom intenzvne pouva v rovnakom vzname ako s
v terii grafov / stromov. Vnimkou je pojem potomok, ktorm tu oznaujem ubovon uzol v podstrome, nie len priamy nasledovnk.
2 Renderovanie v Java3D
Pre tvorbu Anaglyph v Java3d je dleit pochopi ak Java3d triedy a komponenty sa podieaj na renderovan scny. Tieto komponenty meme nsledne upravi a vyui pre nae potreby.
2.1 vod
Renderovanie scny v Java3d je proces, ktor sa realizuje za elom zobrazenia scny na obrazovke alebo za elom zskania dt / obrzku pre alie dodaton spracovanie. V obidvoch prpadoch je cieom / miestom renderovania tzv. pltno trieda Canvas3D, priom v prvom prpade sa jedn o tzv. onscreen pltno, v druhom prpade o tzv. offscreen pltno. AnaglyphDemo vyuva obidva typy pltna: dve offscreen pltna ako zdrojov pltna a jedno onscreen pltno ako cieov pltno. Zdrojov pltna reprezentuj pohad avho a pravho oka (jedno pltno na jedno oko) a pouvaj sa na syntzu cieovho anaglyph obrzku v cieovom pltne. Kninica Java3d podporuje automatick a manulne renderovanie scny v zvislosti od typu pltna (onscreen / offscreen) alebo inch faktorov. Automatick renderovanie pltna znamen, e renderovanie sa realizuje sstavne na pozad ako proces onscreen pltno. Manulne renderovanie je renderovanie na iados klienta, t.j. klient mus da podnet na server, aby realizoval renderovanie scny offscreen pltno.
class View graf scn y - pod strom Vi ewBranch uzo l strom u j av ax.media.j 3d.TransformGroup
j av a.awt.Container
j av ax.media.j3d.Canv as3D
j av ax.media.j 3d.View
j av ax.media.j 3d.PhysicalBody
V uvedenom prklade mono obsah scny definova na dvoch miestach podstrom uzla objRoot alebo podstrom uzla trg. Rozdiel medzi nimi je v tom, e scna definovan pod uzlom objRoot je statick, nepodlieha manipulcii myou. Naopak scna definovan pod uzlom trg je dynamick podlieha manipulcii. alej vysvetlm preo. Mu zato manipulan objekty mouseRotate a mouseTranslate a transforman uzol trg, na ktor odkazuj obidva tieto manipulan objekty. Transforman uzol trg hr pri manipulcii kov lohu. Je nositeom informcie o polohe objektov v scne, ktor s pod nm (jeho potomkovia). Tto informciu nesie vo forme transformanej matice, ktor reprezentuje opercie otoenia a posunutia objektov. Pri manipulcii scny dochdza k zmene matice v objekte trg, na ktor odkazuj manipulan objekty. Z pohadu pozorovatea scny tm vlastne dochdza k zmene polohy alebo otoenia vetkch objektov scny, ktor s pod trg (potomkovia uzla trg). V uvedenom prklade je dleit ete prkaz setupCallback(anf). Tento prkaz definuje obsluhu udalosti transformChanged, ktor nastva pri zmene matice transformcie uzla trg, t.j. pri manipulcii scny. Parametrom prkazu je konkrtny objekt, ktor implementuje metdu transformChanged rozhrania MouseBehaviorCallback. Obsluha udalosti transformChanged sa me vyui napr. pri renderovan scny scna sa nemus renderova sstavne, ale iba pri zmene transformanej matice (implicitne sa renderuje sstavne).
3 Analza rieenia
V tejto kapitole uvediem evolciu kdu tak ako prebiehala pri rieen od jednoduchho cvinho programu a k predbenmu rieeniu. Pjde vak len o kostru rieenia, t.j. hlavn program. V jednotlivch tdich programu sa bude postupne zvyova poet pohadov a/alebo pltien pre potreby rieenia. V grafe scny sa nebude zvyova poet objektov ViewPlatform, pretoe koncov rieenie si vysta s jednm.
Kd v tejto ukke vytvor ViewBranch, ktor obsahuje jeden pohad, jedno pltno a jeden objekt triedy ViewPlatform. Pltno sa vytvra explicitne. O ostatn sa postar kontruktor triedy SimpleUniverse. Menovite sa postar o to, e vytvor pohad, explicitne vytvoren pltno vlo do pohadu a vytvor okno do scny (ViewPlatform), na ktor pripoj pohad. Celkovo kontruktor triedy SimpleUniverse vytvor cel podstrom ViewBranch tak, ako definuje obrzok Obr. 2, to vetko okrem triedy awt.container. Trieda SimpleUniverse vytvra okno do scny so sradnicami (0,0,0) s orientciou (0,0,-Z). Cez toto okno s viditen iba objekty scny, ktor maj zporn Z sradnicu. Tento problm sa d elegantne a rchlo vyriei prkazom setNominalViewingTransform, ktor posunie okno do scny v kladnom smere osi Z na pozciu (0,0,2).
Kd v tejto ukke vytvor jeden ViewBranch, ktor obsahuje dva pohady, dve onscreen pltna a jeden ViewPlatform. Kad z pohadov referencuje jedno pltno, ktor je umiestnen v awt kontajnery a okno do scny (ViewPlatform). Viditen s oboje pltna v oboch pohadoch. Pohady nie s identick. Kad pohad zobrazuje scnu trochu inak. Avak rozdiel v zobrazen scny nie je dan rznymi oknami do scny ( ViewPlatform) alebo transformciami, pretoe kontruktor triedy SimpleUniverse vytvra vdy iba jedno okno do scny (ViewPlatform). Rozdiel v zobrazen scny je dan tmito faktormi: 1. Boli definovan rozdielne pozcie avho a pravho oka (setLeftEyePosition, setRightEyePosition) pozorovatea myBod. 2. Pre obidva pohady bolo pecifikovan (nepriamo cez pltno), ktor oko pozorovatea reprezentuje dan pohad, View1 av oko, View2 prav oko. Bolo to realizovan prkazom setMonoscopicViewPolicy v objekte canvas1 a canvas2. Take hoci uveden kd vytvor v grafe scny iba jeden ViewPlatform, t.j. iba jedno okno do scny, je mon vytvori dve rzne vnmania scny v dvoch pohadoch. To vetko vaka pozorovateovi myBod a jeho dvom oiam. Vzhadom k tomu, e SimpleUniverse vytvra len jeden pohad (view1), druh pohad (view2) sa mus vytvori manulne.
V tejto kapitole je naznaen kostra rieenia. Kd v ukke vyie vytvor ViewBranch, ktor obsahuje dva pohady, dve offscreen pltna (canvas1 a canvas2) a jeden ViewPlatform, podobne ako v predchdzajcej kapitole. Okrem toho sa tu vytvra jedno onscreen pltno (canvas3), ktor sa vak nepouva na renderovanie scny. Toto pltno sa pouva na syntzu a zobrazovanie anaglyph obrzku. Podkladom pre syntzu anaglyph s obrzky renderovan v pltnach canvas1 a canvas2. Konen rieenie teda pouva tri pltna. Zdrojov pltna canvas1 a canvas2 sa pouvaj na renderovanie scny z pohadu avho a pravho oka dve rzne vnmania scny. Cieov pltno canvas3 sa pouva na syntzu anaglyph z pohadov avho a pravho oka a na zobrazenie anaglyph. Treba vak zdrazni, e tu u nesta pvodn Java3D implementcia pltna Canvas3D. T bola rozren v triedach OffScreenCanvas3D a AnaglyphCanvas3D. Ako to vyzer objektovo, naznauje alia kapitola Objektov diagram rieenia. Samotn proces tvorby anaglyph ako je navrhnut a implementovan naznauje kapitola Tvorba anaglyph. V nej sa dozviete ako pltna spolupracuj pri syntze a zobrazen anaglyph, e tto spoluprca prebieha v manulnom reime, t.j. je vyvolan a riaden udalosami.
Linka 1 2 3 4 5
Dvod / el Je podmienkou pre renderovanie scny v Java3D. Je podmienkou pre renderovanie scny v Java3D. Sli na prenos dajov / renderovanho obrzku z canvas1 a canvas2 do anaglyph pltna canvas3. Umon zobrazi onscreen pltno canvas3 v hlavnom okne. Umon manipulciu objektov v scne (behavior).
4 Tvorba anaglyph
V tejto kapitole opem proces tvorby anaglyph v rmci AnaglyphDemo v dvoch pohoadoch: konceptulny a podrobn. Tvorba anaglyph prebieha v manulnom reime, t.j. je riaden udalosami, ktor generuje kninica Java3D. AnaglyphDemo pouva dva typy udalosti: 1. transformChanged nastva pri zmene matice transformcie, t.j. pri manipulcii scny, ke dochdza k zmene vnmania scny viac o tom vi kapitola Manipulcia scny (behaviour). 2. postSwap signalizuje koniec renderovania offscreen pltna, ktor vyvolala metda renderOffScreenBuffer, viac o tom vi kapitola Podmienky renderovania a API. Uveden udalosti maximalizuj efektivitu pri renderovan v tom zmysle, e minimalizuj nadbytonos opercii poda hesla: sprav iba nevyhnutne nutn.
aktualizovan zdrojov obrzky canvas1_buffer a canvas2_buffer. V uvedenej postupnosti krokov s k tomuto elu pouit prznaky canvas1_buffer_ready a canvas2_buffer_ready. V konenom nvrhu to zrejme bude inak pouije sa jedna riadiaca stavov premenn na vetko na bod 3 a 8.
{RState==0}
loop ov er canv as1 and canvas2 if RState == 0 [for X=1 to 2 ] ren derOffS creen Buffer() re nd er()
p ostS wap() setIm age X() setIm a ge X() RSta te Add(X) opt [RS tate==7] rep ain t() pa int() Cre ateAna gl yph() RSta teSet(0)
Vzhadom k tomu, e dvojiky objektov (canvas1 a canvas2, view1 a view2) pouvaj pri renderovan rovnak alebo prov opercie, je vhodn ich nahradi jednm zstupnm objektom v cykle s dvomi iterciami. Take miesto objektov canvas1 a canvas2 je v diagrame pouit jeden objekt s nzvom canvasX a miesto objektov view1 a view2 objekt viewX, kde znak X je pouit ako zstupn znak a tie ako riadiaca premenn cyklu, ktor men hodnotu od 1 po 2.
Stavov premenn RState objektu triedy AnaglyphFacade sli na riadenie. Postupne men svoju hodnotu od 0 po 7 v krokoch 0 4 5 7, kde jednotliv hodnoty maj tento vznam: 0 je zaiaton stav 4 nastala udalos transformChanged 5 canvas1_buffer je aktualizovan 6 canvas2_buffer je aktualizovan 7 buffer v obidvoch pltnach je aktualizovan
on screen AnaglyphCanv as3D + + + # se tIm ag e1 () : voi d se tIm ag e2 () : voi d pai nt() : vo id Crea teA na gl yph () : voi d
Legend
A na glyp h co ncern S cen e co ncern Ja va(3D) co ncern
AnaglyphFactory + + + + redBl ueA na glyps() : vo id redGreen Anagl yp s() : voi d colo rA nag lyps() : vo id op tim i zedAn agl yps() : voi d
AnaglyphFacade + + createA nag lyphUni verse()() : voi d tran sfo rm Cha nged() : vo id
Canv asConfig
j av a.applet.Applet + +
use
Ob sahuje tri ed y, ktor p ou va trieda Sce neFa ctory n a tvo rbu g rafu scny.
scenebuilders
Ukka kdu vychdza z relneho kdu v triede AnaglyphDemo metdy Init. V uvedenej ukke vidno, ako jednoducho mono (znovu) poui anaglyph vnmanie scny v inom programe. Staia nato prkazy oznaen slom 1 a 4 a konfigurcia v triede CanvasConfig. O vetko ostatn sa postar trieda AnaglyphFacade. Trieda CanvasConfig obsahuje zkladn konfiguran daje ako vekos pltna, vekos kontajnera (okna), anaglyph md (AnaglyphMode), sradnice pozorovatea (viewPoint) a in.