12.07.2015 Views

CES 2004 - Vitajte na stránkach www.einsty.hostujem.sk

CES 2004 - Vitajte na stránkach www.einsty.hostujem.sk

CES 2004 - Vitajte na stránkach www.einsty.hostujem.sk

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

P R O G R A M U J E M EDirect Animation13. èas: Práca s grafikou v 3D priestore 3V posledných dvoch èastiach seriálu sme sa venovali zobrazovaniu objektov v 3D priestore.Máme teda u základné informácie a základné predstavy o vytváraní jednoduchých 3D scén.Vieme, e základným objektom v tomto prípade je objekt triedy DAGeometry. Ten predsta−vuje trojdimenzionálne objekty, ako 3D povrchy, svetlá, zvuk v priestore, ako aj všetky ich atri−búty a kombinácie. Tak ako pri všetkých objektoch v prostredí DirectAnimation môu aj objek−ty triedy DAGeometry meni svoj charakter v èase, a teda môu by animované. Kadý 3Dobjekt pri svojom rozlíšení pozostáva z nespoèetne ve¾a bodov. Kadý bod má priradený atri−bút farby povrchu, normály (<strong>na</strong> výpoèty spojené s osvetlením), vidite¾nosti (opacity), súradni−ce textúry, vlastnosti detekcie a zvuku. Na kadý 3D objekt môe by „<strong>na</strong>tiahnutá“ textúra,ktorá dáva reálnejší vzh¾ad objektom. 3D objektom je aj svetlo, v DirectAnimation v jednej zoštyroch moných podôb s vlastným atribútom farby a dosahom vyarovania. Nakoniec kadýz týchto objektov a jeho atribútov môe by animovaný.Naposledy sme sa venovali triede DATransform3, ktorá spolu s triedami DAPoint3, DAVec−tor3 a ich vnútornými funkciami umoòuje ovláda polohu, tvar a ve¾kos 3D objektov.Zopakujme si základný postup pri vytváraní 3D scény v prostredí DirectAnimation:1. Import, prípadne vytvorenie všetkých objektov, textúr a zvukovTo z<strong>na</strong>mená vytvori objekty triedy DAImage buï importom externých súborovpouitím statických funkcií z triedy DAStatics, alebo vytvorením obrázkov vnútornýminástrojmi API. Tieto obrázky (objekty DAImage) – èi u statické, animované, aleboreaktívne – budú slúi ako prípadné textúry pre 3D objekty.Ïalej importova všetky 3D povrchy (súbory vo formáte *.x). Tie je potrebné vytvoriexterným nástrojom <strong>na</strong> 3D modelovanie. Nesmieme zabudnú, e súbor s 3D povrchommusí obsahova oddiel s vhodne definovanými súradnicami textúr a normálových vekto−rov pre jednotlivé vertexy 3D povrchu.3D objekty v podobe svetiel vytvoríme jednotlivými funkciami z triedy DAGeometry.2. Rozmiestnenie 3D objektov v priestoreVytvorením vhodných transformaèných objektov triedy DATransform3 a ichaplikovaním <strong>na</strong> 3D objekt zabezpeèíme správnu polohu, prípadne pohyb objektu.3. Nastavenie atribútov objektovJednotlivým 3D objektom priradíme atribúty farby alebo textúru. Jednotlivé atribútyi vlastné objekty triedy DAGeometry sú potomkami triedy DABehavior, a teda môe íso statické, èasovo závislé alebo reaktívne objekty reagujúce <strong>na</strong> pouívate¾<strong>sk</strong>é vstupy.4. Zjednotenie scény do kompaktného objektu triedy DAGeometryCelý priestor so všetkými objektmi zjednotíme prostredníctvom statických funkciílib.UnionGeometry() alebo lib.UnionGeometryArray().5. Vykreslenie scény pomocou vhodného typu projekcieVykreslenie zahàòa vytvorenie objektu kamery, <strong>na</strong>stavenie jej polohy, prípadnepohybu, ve¾kosti a <strong>na</strong>koniec vlastné vykreslenie do 2D objektu triedy DAImage.Teraz sa blišie pozrieme <strong>na</strong> projekciu scény. Ako u vieme, 3D scénu premietneme do ro−viny prostredníctvom funkciegeometryObj.Render(camera).Funkcia vracia objekt triedy DAImage, ktorý je dvojdimenzionálnou projekciou objek−tu DAGeometry. Parameter camera, objekt triedy DACamera, urèuje typ projekcie, t. j.spôsob, akým bude 3D objekt premietnutý do roviny. Ako urèíme vhodný typ projekcie,to uvedieme ïalej v opise triedy DACamera.TRIEDA DACAMERA. Objekty triedy DACamera predstavujú behaviárne objekty ka−mery (kamera s animovanými parametrami). Objekty vyuijeme <strong>na</strong> premietnutie 3D ob−jektu do nekoneènej roviny. Ïalšou operáciou s objektmi kamery je umiestnenie tzv. mik−rofónov <strong>na</strong> ozvuèenie priestoru.V DirectAnimation existujú dva typy kamier, a teda dva typy projekcie. Jed<strong>na</strong> kamera<strong>na</strong> paralelnú projekciu a druhá <strong>na</strong> perspektívnu projekciu. Jedným zo základných rozdie−lov oboch projekcií je, e v prípade perspektívnej projekcie, ktorá sa <strong>na</strong>jviac podobá rea−lite, sa objekty ïalej od kamery zobrazia menšie ako objekty blišie ku kamere. Obe kame−ry sú orientované tak, e sa pozerajú v negatívnom smere osi z a os y smeruje dohora. Preobe kamery existuje tzv. predná rezná rovi<strong>na</strong>, ktorá ako výsledok tzv. Z−buffered rende−ringu urèuje <strong>na</strong>jbliší bod, ktorý môe by zobrazený. Nad kamerou môeme vykonávarov<strong>na</strong>ké transformaèné operácie ako s objektmi triedy DAGeometry.Objekty kamery vytvoríme prostredníctvom týchto statických funkcií z triedy DAStatics:lib.ParallelCameraAnim(nearclip),lib.ParallelCamera(nearclip),lib.PerspektiveCameraAnim(projdst, nearclip),lib.PerspektiveCamera(projdst, nearclip).Funkcialib.PerspectiveCameraAnim(projdst,nájdete <strong>na</strong> CD REVUEnearclip)vytvára animovanú kameru <strong>na</strong> perspektívnu projekciu. Ako sme u uviedli v jednej z pred−chádzajúcich èastí seriálu, pre túto projekciu je dôleitá tzv. predná rezná rovi<strong>na</strong> a pro−jekèná rovi<strong>na</strong>. Parameter projdst predstavuje vzdialenos projekènej roviny od objektívukamery, resp. bodu projekcie. V tomto prípade ide o animovaný parameter (objekt triedyDANumber). Táto vzdialenos musí by vdy väèšia ako nula. Èím menšia je táto vzdiale−nos, tým výraznejšie sa prejaví tzv. efekt širokouhlosti.Parameter nearclip (objekt triedy DANumber) <strong>na</strong>proti tomu prestavuje vzdialenos medziobjektívom kamery a prednou reznou rovinou. Táto vzdialenos musí by vdy menšia akovzdialenos projdst. Aj keï sa s<strong>na</strong>íme vdy umiestni prednú reznú rovinu èo <strong>na</strong>jblišie kobjektívu kamery, teda rozdiel projdst – nearclip je minimálny, treba si uvedomi, e èím blišieje predná rovi<strong>na</strong> k objektívu, tým výrazne nišia je precíznos tzv. z−buffered renderingu, t. j.rozoznávania håbky. V tomto prípade môe èasto dochádza k nepresnostiam v zobrazení.Obrázok znázoròujúci perspektívnu projekciu nájdete v 11. èasti seriálu.Funkcialib.PerspectiveCamera(projdst,nearclip)vytvára statickú perspektívnu kameru, to z<strong>na</strong>mená, e oba parametre sú konštantné hod−noty typu double.Funkcialib.ParallelCameraAnim(nearclip)vracia paralelnú kameru <strong>na</strong> paralelnú projekciu. Pri tejto kamere definujeme len vzdiale−nos prednej reznej roviny.V <strong>na</strong>sledujúcom príklade si názorne ukáeme rozdiel medzi oboma projekciami. Skústemeni parametre kamier, aby ste videli, ako ovplyvòujú projekciu. Nezabudnite, e budepotrebný súbor s 3D povrchom vo formáte Direct3D, <strong>na</strong>príklad ten z prechádzajúcej èastiseriálu.Príklad JS_13_1

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!