Programujeme grafický engine XXV.

opengl_logo.jpg V tej­to čas­ti se­riá­lu po­drob­nej­šie ro­zo­be­rie­me jed­not­li­vé čas­ti prog­ra­mo­vé­ho kó­du sú­vi­sia­ce s im­ple­men­tá­ciou streľ­by. Uká­že­me si je­den z mno­hých prís­tu­pov, kto­rý mož­no po­užiť nie­len na zob­ra­ze­nie di­er po guľ­kách, ale vo všeo­bec­nos­ti na aké­koľ­vek po­kry­tie ob­jek­tu (je­ho čas­tí) iným ob­jek­tom. Všet­ky opi­so­va­né čas­ti kó­du sú ob­sa­hom sú­bo­ru load­md3.cpp (load­md3.h), za­ra­de­né­ho do zlož­ky com­mon.

Zbraň
Zob­ra­ze­nie zbra­ne je zá­klad­ný pred­pok­lad im­ple­men­tá­cie streľ­by v her­nom en­gi­ne. Na vý­ro­bu sie­ťo­vé­ho mo­de­lu ob­jek­tu pred­sta­vu­jú­ce­ho zbraň (weapon mo­del) mô­že­me po­užiť ľu­bo­voľ­ný 3D gra­fic­ký edi­tor. Vy­tvo­re­ný ob­jekt ulo­ží­me do sú­bo­ru na­mi pre­fe­ro­va­né­ho for­má­tu.

engine obr1.bmp Obr. 1 Sie­ťo­vý mo­del ob­jek­tu pred­sta­vu­jú­ce­ho zbraň

Pre ap­li­ká­ciu En­gi­ne v2.1 sme zvo­li­li for­mát MD3, kto­rý sme opí­sa­li v 8. čas­ti toh­to se­riá­lu. Uro­bi­li sme tak nie­len pre­to, že uve­de­ný for­mát je po­mer­ne jed­no­duc­hý, ale naj­mä pre­to, že ok­rem de­fi­ní­cie sta­tic­ké­ho sie­ťo­vé­ho mo­de­lu ob­jek­tu sú­bo­ry MD3 ob­sa­hu­jú aj in­for­má­cie o ani­má­cii toh­to ob­jek­tu. For­mát MD3 sí­ce pre­ko­ná­va­jú mo­der­nej­šie for­má­ty, ale pre na­še po­tre­by úpl­ne po­sta­ču­je.

Drá­ha le­tu gu­liek
V pr­vot­ných fá­zach im­ple­men­tá­cie streľ­by ne­bu­de­me ni­ja­kým spô­so­bom vy­zna­čo­vať drá­hu stre­ly ani rie­šiť jej za­kri­ve­nie (drá­hu stre­ly bu­de­me idea­li­zo­vať). Jed­no­duc­hým spô­so­bom vy­be­rie­me ob­jekt, kto­rý bu­de za­siah­nu­tý pria­mo­čia­rym „lú­čom“, vy­sla­ným z ús­tia hlav­ne.

Di­ery po guľ­kách
Sie­ťo­vý mo­del ob­jek­tu (mesh), kto­rý rep­re­zen­tu­je di­eru po guľ­ke, je v her­nom en­gi­ne naj­čas­tej­šie tvo­re­ný mno­ži­nou vhod­ne otextú­ro­va­ných tro­ju­hol­ní­kov. Vzhľad po­uži­tých textúr mô­že­me ná­hod­ne me­niť a zá­ro­veň ho pris­pô­so­biť ak­tuál­ne­mu ma­te­riá­lu, kto­rý sme po­uži­li na po­kry­tie po­vr­chu za­siah­nu­té­ho ob­jek­tu.

engine obr2.jpg Obr. 2 Textú­ry po­uží­va­né pri ren­de­rin­gu od­tlač­kov

Her­né en­gi­ny ne­vyt­vá­ra­jú pries­to­ro­vé di­ery po guľ­kách, ale tie nah­rád­za­jú ploš­ný­mi ob­jek­tmi, kto­ré sa v po­čí­ta­čo­vej ter­mi­no­ló­gii na­zý­va­jú od­tlač­ky (de­cals). Na­ne­se­nie od­tlač­ku na ro­vin­ný ob­jekt je jed­no­duc­hé. V prí­pa­de za­kri­ve­ných po­vr­chov (na mies­tach spo­jov dvoch a via­ce­rých tro­ju­hol­ní­kov) je si­tuácia zlo­ži­tej­šia. Ne­ve­šaj­me však hla­vu a po­zri­me sa, ako ta­ký­to prí­pad vy­rie­šiť.

Ap­li­ká­cia od­tlač­kov na za­kri­ve­né po­vr­chy
Na ko­rek­tné na­ne­se­nie od­tlač­ku na za­kri­ve­ný po­vrch vy­ko­ná­me nas­le­du­jú­ce kro­ky (sú­vi­sia­ci kód je ob­sa­hom fun­kcie CLoad­MD3::draw()):

1. V pr­vom ra­de mu­sí­me vy­po­čí­tať 3D po­lo­hu bo­du (mies­ta do­pa­du), kto­rý za­sia­hol lúč vy­sla­ný z ús­tia hlav­ne sta­no­ve­ným sme­rom, pri vý­poč­te mu­sí­me vziať do úva­hy vzdia­le­nosť mies­ta do­pa­du od ús­tia hlav­ne a vy­brať ta­ký bod (ta­ký tro­ju­hol­ník), kto­rý je naj­bliž­šie k ús­tiu hlav­ne.
2. Oko­lo mies­ta do­pa­du zos­tro­jí­me 3D hra­nol, kto­rý bu­de rep­re­zen­to­vať pries­to­ro­vý ob­jem, osi 3D hra­no­la sú tvo­re­né vek­tor­mi, kto­ré ko­reš­pon­du­jú s vek­tor­mi vy­po­čí­ta­ný­mi na zá­kla­de ro­tá­cie po­hľa­du (ka­me­ry).
3. Vy­be­rie­me všet­ky tro­ju­hol­ní­ky, kto­ré za­sa­hu­jú do 3D hra­no­la, pri­tom kon­tro­lu­je­me po­lo­hu všet­kých 3 vr­cho­lov tro­ju­hol­ní­kov op­ro­ti 6 ro­vi­nám (ste­nám 3D hra­no­la); tro­ju­hol­ní­ky, kto­ré ne­za­sa­hu­jú do pries­to­ro­vé­ho ob­je­mu 3D hra­no­la, z ďal­ších vý­poč­tov vy­lú­či­me.
4. Vy­bra­té tro­ju­hol­ní­ky ore­že­me po­mo­cou 6 ro­vín (stien 3D hra­no­la) – al­go­rit­mus po­drob­ne opí­še­me v nas­le­du­jú­cej čas­ti se­riá­lu.
5. Mno­ži­ne ore­za­ných tro­ju­hol­ní­kov pri­ra­dí­me spo­loč­né textú­ro­va­cie sú­rad­ni­ce, a to ta­kým spô­so­bom, aby v spo­joch nev­znik­li ne­že­la­né ar­te­fak­ty.

Na­bu­dú­ce...
Na­bu­dú­ce po­drob­ne opí­še­me al­go­rit­mus ore­za­nia tro­ju­hol­ní­kov po­mo­cou 6 ore­zá­va­cích ro­vín a dopl­ní­me pár uži­toč­ných in­for­má­cií, kto­ré sa tý­ka­jú po­uži­tých al­go­rit­mov.

Ďal­šie čas­ti >>

Zdroj: Infoware 3/2010



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