Programujeme grafický engine XI.

opengl_logo.jpg V tej­to čas­ti se­riá­lu sme sa pô­vod­ne ma­li vrá­tiť k ap­li­ká­cii En­gi­ne, do kto­rej sme plá­no­va­li in­teg­ro­vať prip­ra­ve­né ob­jek­ty MD3. Po­čas príp­ra­vy vzo­ro­vej ap­li­ká­cie som si však uve­do­mil, že sme si do­po­siaľ ne­po­ve­da­li dô­le­ži­té in­for­má­cie o po­uži­tí tzv. sve­tel­ných máp (lig­htmaps). Sve­tel­né ma­py sú pre kva­lit­ný vzhľad akej­koľ­vek 3D gra­fic­kej ap­li­ká­cie nes­mier­ne dô­le­ži­té. Jed­nou z ich hlav­ných úloh je aj si­mu­lá­cia tie­ňov, kto­rých zob­ra­zo­va­nie nie je pria­mo po­dpo­ro­va­né kniž­ni­cou OpenGL. Nas­le­du­jú­ce tri čas­ti se­riá­lu te­da bu­de­me ve­no­vať opi­su prá­ce so sve­tel­ným ma­pa­mi, pri­čom texto­vú časť dopl­ní­me o vzo­ro­vú ap­li­ká­ciu. Na za­čia­tok vy­svet­lí­me po­tre­bu po­uži­tia sve­tel­ných máp v ap­li­ká­cii En­gi­ne.

Ap­li­ká­cia En­gi­ne
V oka­mi­hu, keď do scé­ny zob­ra­ze­nej ap­li­ká­ciou En­gi­ne vlo­ží­me aký­koľ­vek ob­jekt, zis­tí­me, že aj po ap­li­ko­va­ní os­vet­le­nia po­nú­ka­né­ho kniž­ni­cou OpenGL scé­na stá­le neob­sa­hu­je ne­vyh­nut­nú sú­časť, kto­rou sú tie­ne. Ob­jek­ty vlo­že­né do scé­ny bu­dú os­vet­le­né – ste­ny ob­jek­tov priv­rá­te­né k sve­tel­né­mu zdro­ju bu­dú mať iný fa­reb­ný od­tieň ako od­vrá­te­né ste­ny. Prob­lé­mom však je, že po­mo­cou OpenGL ne­do­ká­že­me vy­po­čí­tať tie­ne, kto­ré tie­to ob­jek­ty vr­ha­jú. Kva­li­ta­tív­ne zob­ra­ze­nie scé­ny je tak vý­raz­ne deg­ra­do­va­né. Bež­ný po­uží­va­teľ na pr­vý po­hľad zis­tí, že nie­čo nie je v po­riad­ku.

Ako však zob­ra­ziť tie­ne, kto­ré sú v reál­nom sve­te dôs­led­kom nep­riec­hod­nos­ti sve­tel­ných lú­čov nep­rieh­ľad­ný­mi ob­jek­tmi? Exis­tu­je nie­koľ­ko spô­so­bov ako ten­to fy­zi­kál­ny jav si­mu­lo­vať v po­čí­ta­čo­vej gra­fi­ke. Jed­ným z nich je po­uži­tie tzv. Sten­cil zá­sob­ní­ka (buf­fe­ra). O tom­to spô­so­be sme sa už zmie­ni­li. Je­ho ne­vý­ho­dou však je, že pri ňom doc­hád­za k viac­ná­sob­né­mu vy­kres­le­niu scé­ny, čo si v rám­ci ta­kej roz­siah­lej ap­li­ká­cie, ako je her­ný En­gi­ne, ne­mô­že­me do­vo­liť. Na po­dob­nom prin­cí­pe je za­lo­že­ných nie­koľ­ko iných al­go­rit­mov (ich zá­kla­dom je zväč­ša viac­ná­sob­né vy­kres­ľo­va­nie scé­ny za po­uži­tia špe­ci­fic­ké­ho pre­mie­ta­nia), no ani je­den z nich ne­mô­že­me vziať do úva­hy, pre­to­že na­šu scé­nu si mô­že­me do­vo­liť vy­kres­liť na­naj­výš raz.

Sve­tel­né ma­py (lig­htmaps)
Prob­lém náj­de­nia vhod­né­ho al­go­rit­mu na ge­ne­ro­va­nie tie­ňov s veľ­mi pri­ja­teľ­ný­mi vý­sled­ka­mi rie­ši po­uži­tie spo­mí­na­ných sve­tel­ných máp. Sve­tel­né ma­py sú kla­sic­ký­mi textú­ra­mi, kto­ré sa na­ne­sú na ob­jek­ty scé­ny v kom­bi­ná­cii s pô­vod­ný­mi textú­ra­mi.

Prob­lé­mom po­uži­tia sve­tel­ných máp je ne­vyh­nut­nosť vý­poč­tu fa­rieb ich bo­dov (lu­mels) v oka­mi­hu príp­ra­vy scé­ny. Mô­že­me sa sí­ce stret­núť aj s tzv. dy­na­mic­ký­mi sve­tel­ný­mi ma­pa­mi, kto­rých far­by sa vy­po­čí­ta­va­jú pri kaž­dom zob­ra­zo­va­com cyk­le, ale ta­ký­to prís­tup nie je bež­ný. Aký­koľ­vek vý­kon­ný po­čí­tač to­tiž ne­do­ká­že v reál­nom ča­se vy­ko­nať toľ­ko po­treb­ných vý­poč­tov, aby bo­lo mož­né zob­ra­ziť scé­nu v po­ža­do­va­nom po­čte FPS.

:: Dy­na­mic­ké sve­tel­né ma­py
Dy­na­mic­ké sve­tel­né ma­py sa po­uží­va­jú naj­mä na si­mu­lá­ciu rôz­nych sve­tel­ných efek­tov, napr. vý­buc­hov, po­hy­bu sve­tel­ných zdro­jov, si­mu­lá­ciu le­tu striel, ra­kiet... V ta­kýc­hto prí­pa­doch však ne­doc­hád­za k vý­poč­tu fa­rieb jed­not­li­vých bo­dov sve­tel­ných máp. Far­by ich bo­dov sa ni­ja­ko ne­me­nia, zos­tá­va­jú kon­štan­tné. Vý­sled­ný efekt sa do­sa­hu­je vhod­ným umies­te­ním sve­tel­ných máp v scé­ne.

:: Sta­tic­ké sve­tel­né ma­py
Na ge­ne­ro­va­nie tie­ňov s po­uži­tím sve­tel­ných máp tre­ba vy­po­čí­tať far­bu kaž­dé­ho ich bo­du. To sa de­je zväč­ša v ča­se príp­ra­vy scé­ny na zob­ra­ze­nie. V zob­ra­zo­va­com cyk­le nás­led­ne ne­doc­hád­za k žiad­nej zme­ne fa­rieb bo­dov sve­tel­ných máp a tie sa jed­no­duc­ho po­uži­jú na po­kry­tie kon­krét­nych ob­jek­tov. Na obr. 1 mô­že­me vi­dieť vý­sle­dok po po­uži­tí sta­tic­kých sve­tel­ných máp, kto­rý­mi bol si­mu­lo­va­ný tieň.

engine OBR1.bmp
Obr. 1 Scé­na s vy­ge­ne­ro­va­ným tie­ňom

Na­bu­dú­ce...
V bu­dú­cej čas­ti se­riá­lu opí­še­me kon­krét­ny al­go­rit­mus vy­tvo­re­nia sve­tel­ných máp, kto­rý bu­de­me nes­kôr de­monštro­vať na vzo­ro­vom prík­la­de.

Ďal­šie čas­ti >>

Zdroj: Infoware 11/2008



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