Programujeme grafický engine XIX.

opengl_logo.jpg V tom­to člán­ku sa vrá­ti­me k ren­de­rin­gu zá­klad­ných sta­veb­ných ka­me­ňov gra­fic­kých en­gi­nov, kto­rým sme sa za­obe­ra­li na za­čiat­ku náš­ho se­riá­lu. Roz­die­lom bu­de in­teg­rá­cia čias­tko­vých po­stu­pov do kom­pak­tné­ho cel­ku, kto­rým v ko­neč­nom dôs­led­ku vy­tvo­rí­me kom­plexné pros­tre­die 3D en­gi­nu.

In­teg­rá­cia po­stu­pov
V tom­to se­riá­li sa po­stup­ným rie­še­ním čias­tko­vých prob­lé­mov, s kto­rý­mi sa stre­tá­va­me pri vý­vo­ji gra­fic­kých en­gi­nov, sna­ží­me vy­tvo­riť kom­plexné pros­tre­die so všet­ký­mi je­ho ob­jek­tmi a vlas­tnos­ťa­mi po­treb­ný­mi na do­siah­nu­tie čo naj­reál­nej­šie­ho gra­fic­ké­ho vý­stu­pu.

Ok­rem iné­ho sme uká­za­li je­den zo spô­so­bov, ako rie­šiť umies­tne­nie sve­tel­ných zdro­jov do scén a nás­led­né zob­ra­zo­va­nie vznik­nu­tých tie­ňov. V tom­to oka­mi­hu sa na uve­de­ný prob­lém po­zrie­me zo šir­šie­ho hľa­dis­ka. Pô­vod­nú scé­nu dopl­ní­me o no­vé ob­jek­ty, kto­ré na­šu si­tuáciu mier­ne skom­pli­ku­jú.

Tie­ne v kom­plexných scé­nach
Prob­lém zob­ra­zo­va­nia tie­ňov v kom­plexných scé­nach mô­že­me rie­šiť napr. ta­kým­to jed­no­duc­hým po­stu­pom:
1. do prog­ra­mo­vé­ho kó­du im­ple­men­tu­je­me al­go­rit­my po­treb­né na prá­cu s tzv. sve­tel­ný­mi ma­pa­mi (lig­htmaps – ďa­lej len ma­py),
2. kaž­dé­mu ob­jek­tu (tro­ju­hol­ní­ku) pri­de­lí­me ma­pu a vy­po­čí­ta­me far­bu (od­tieň) kaž­dé­ho jej bo­du (lu­me­lu – lu­mi­nan­ce ele­ment),
3. scé­nu zob­ra­zí­me s po­uži­tím vop­red prip­ra­ve­ných máp.
Zdá sa, že uve­de­ný po­stup je jed­no­duc­hý a net­re­ba o ňom dis­ku­to­vať. Prav­da je, že al­go­rit­my po­treb­né na prá­cu s ma­pa­mi nie sú zlo­ži­té a v kon­če­nom dôs­led­ku sme ich jed­no­duc­hý va­riant už opí­sa­li. Prob­lé­mom však zos­tá­va, ako ich efek­tív­ne vy­užiť v rám­ci roz­siah­lych scén, pl­ných ob­jek­tov rôz­ne­ho dru­hu. Na pr­vé ťaž­kos­ti na­ra­zí­me už pri rie­še­ní po­uži­tia máp v nie veľ­mi roz­siah­lej scé­ne, napr. ta­kej, aká je zob­ra­ze­ná na obr. 1.

engine1.jpg
Obr. 1 Po­uži­tie sve­tel­ných máp

Zá­klad­né prob­lé­my mož­no de­fi­no­vať tak­to:
1. Scé­na mo­der­né­ho gra­fic­ké­ho en­gi­nu je zlo­že­ná z veľ­ké­ho množ­stva ob­jek­tov. Ako však efek­tív­ne prip­ra­viť a pri­de­liť ma­py pre ta­ký veľ­ký po­čet tro­ju­hol­ní­kov?
2. Jed­not­li­vé ob­jek­ty scé­ny sú nav­zá­jom po­spá­ja­né, resp. mô­žu sa ľu­bo­voľ­ne prek­rý­vať, ale ta­kis­to ne­mu­sia spo­lu ni­ja­ko sú­vi­sieť. Ako správ­ne vy­po­čí­tať od­tie­ne jed­not­li­vých bo­dov máp?
3. Pred­pok­la­daj­me, že kaž­dý ob­jekt scé­ny má pri­de­le­nú inú textú­ru a inú ma­pu. Ako efek­tív­ne zob­ra­ziť všet­ky ob­jek­ty scé­ny?

Roz­de­le­nie mo­du­lov en­gi­nu
V pr­vých ver­ziách náš­ho en­gi­nu sme po­uži­li ur­či­tú navr­hnu­tú sklad­bu sú­bo­rov pat­ria­cich jed­not­li­vým mo­du­lom a rov­na­ký mo­del po­uži­je­me aj te­raz. Na­ďa­lej bu­de­me po­uží­vať tzv. mo­dul Inter­fa­ce, zá­klad­ný „spo­jo­va­cí“ mo­dul ap­li­ká­cie, a mo­du­ly Bac­kend a Fron­tend.

Bac­kend je mo­dul, v kto­rom sa prip­ra­via všet­ky ob­jek­ty 3D scé­ny. Je­ho hlav­ná úlo­ha je po­mo­cou pat­rič­ných sub­mo­du­lov na­čí­tať všet­ky úda­je, resp. ob­jek­ty z dá­to­vých sú­bo­rov. Nás­led­ne tie­to úda­je a ob­jek­ty tran­sfor­mo­vať do po­ža­do­va­nej po­do­by tak, aby sa ďa­lej ne­mu­se­li spra­cú­vať a moh­li sa čo naj­jed­no­duc­hším spô­so­bom po­užiť na zob­ra­ze­nie scé­ny.

Fron­tend je mo­dul, kto­rý pre­be­rá spra­co­va­né úda­je a ob­jek­ty z mo­du­lu Bac­kend a nás­led­ne ich zob­ra­zí na ob­ra­zov­ke náš­ho po­čí­ta­ča. Sú v ňom im­ple­men­to­va­né al­go­rit­my sú­vi­sia­ce s dodr­ža­ním po­ža­do­va­nej kvan­ti­ty a kva­li­ty zob­ra­ze­nia.

engine2.jpg
Obr. 2 Scé­na ren­de­ro­va­ná s po­uži­tím sve­tel­ných máp

Na­bu­dú­ce...
Na­bu­dú­ce bu­de­me po­kra­čo­vať v za­ča­tej té­me. Vy­svet­lí­me kon­krét­ne čas­ti al­go­rit­mu príp­ra­vy scé­ny en­gi­nu v1.2. Všet­ky slov­né opi­sy bu­de­me pre­zen­to­vať na kon­krét­nej ap­li­ká­cii.

Ďal­šie čas­ti >>

Zdroj: Infoware 8-9/2009



Ohodnoťte článok:
   
 

24 hodín

týždeň

mesiac

Najnovšie články

Prog­ra­mu­je­me gra­fic­ký en­gi­ne XXXVII.
V tejto a takisto v nasledujúcej časti seriálu budeme riešiť synchronizáciu streľby s pohybom postavy. Pôvodne sme sa tejto oblasti venovali oddelene od blokov súvisiacich so zobrazením postavy. čítať »
 
Prog­ra­mu­je­me gra­fic­ký en­gi­ne XXXVI.
V tejto časti seriálu sa budeme venovať tomu, ako možno do grafických (herných) enginov implementovať objekty reprezentujúce rebríky (ladders). čítať »
 
Prog­ra­mu­je­me gra­fic­ký en­gi­ne XXXV.
V tejto časti seriálu podrobnejšie rozoberieme jednotlivé časti programového kódu súvisiace s implementáciou streľby. čítať »
 
Prog­ra­mu­je­me gra­fic­ký en­gi­ne XXXIV.
V tejto časti seriálu vám v stručnosti predstavíme tzv. systémy častíc (particle systems). Kvalitne navrhnutými systémami častíc dokážeme veľmi rýchlo a elegantne zvýšiť dynamiku grafických aplikácií. čítať »
 
Prog­ra­mu­je­me gra­fic­ký en­gi­ne XXXIII.
V predchádzajúcej časti seriálu sme dokončili kapitolu, v ktorej sme sa venovali simulácii fyziky. čítať »
 
Prog­ra­mu­je­me gra­fic­ký en­gi­ne XXXII.
Touto časťou seriálu ukončíme tému implementácie fyzikálnych zákonov v rámci grafických enginov. Všetky vedomosti, ktorými v tomto okamihu disponujeme čítať »
 
Prog­ra­mu­je­me gra­fic­ký en­gi­ne XXXI.
Týmto článkom sa pomaly dostávame k záveru celku, v ktorom sme sa zaoberali simuláciou fyziky. Zostáva nám opísať princíp detekcie kolízií a uviesť spôsob reakcie simulačného systému čítať »
 
Prog­ra­mu­je­me gra­fic­ký en­gi­ne XXX.
V tomto pokračovaní seriálu si doplníme teoretické vedomosti potrebné na implementáciu fyzikálnych zákonov v grafických a herných enginoch. čítať »
 
 
 
  Zdieľaj cez Facebook Zdieľaj cez Google+ Zdieľaj cez Twitter Zdieľaj cez LinkedIn Správy z RSS Správy na smartfóne Správy cez newsletter