Programujeme grafický engine XXVI.

opengl_logo.jpg Tou­to čas­ťou se­riá­lu uzav­rie­me blok, v kto­rom sme sa ve­no­va­li ap­li­ká­cii od­tlač­kov (de­cals). Za­me­ria­me sa na opis al­go­rit­mu ore­za­nia tro­ju­hol­ní­kov po­mo­cou 6 ore­zá­va­cích ro­vín (clip pla­nes).

Ore­za­nie tro­ju­hol­ní­kov do ob­je­mu 3D hra­no­la
Al­go­rit­mus ore­za­nia (clip) tro­ju­hol­ní­kov do ob­je­mu 3D hra­no­la je za­lo­že­ný na kla­si­fi­ká­cii po­lo­hy vr­cho­lov k ore­zá­va­cím ro­vi­nám de­fi­no­va­ným ste­na­mi hra­no­la. Ok­rem rie­še­nia po­lo­hy vr­cho­lu k ore­zá­va­cej ro­vi­ne je ta­kis­to dô­le­ži­té kla­si­fi­ko­vať po­lo­hu prie­seč­ní­ka (inter­sec­tion po­int) stra­ny tro­ju­hol­ní­ka a ro­vi­ny. Kon­krét­ne kro­ky al­go­rit­mu sú nas­le­du­jú­ce:
1. Pre všet­kých šesť stien 3D hra­no­la a pre kaž­dý z troch vr­cho­lov tro­ju­hol­ní­ka vy­ko­ná­me kro­ky 2 – 4.
2. Kla­si­fi­ku­je­me po­lo­hu za­čia­toč­né­ho a kon­co­vé­ho vr­cho­lu stra­ny tro­ju­hol­ní­ka vzhľa­dom na ore­zá­va­ciu ro­vi­nu.
3. Ak le­žia oba kon­co­vé vr­cho­ly v rov­na­kom po­lpries­to­re a zá­ro­veň v ob­je­me 3D hra­no­la, pri­dá­me ich do zoz­na­mu bu­dú­cich vr­cho­lov.
4. Ak kon­co­vé vr­cho­ly le­žia v opač­ných po­lpries­to­roch:
 ak le­ží za­čia­toč­ný vr­chol v ob­je­me 3D hra­no­la, pri­dá­me ho do zoz­na­mu bu­dú­cich vr­cho­lov,
 v opač­nom prí­pa­de stra­nu tro­ju­hol­ní­ka roz­de­lí­me a do zoz­na­mu bu­dú­cich vr­cho­lov pri­dá­me prie­seč­ník stra­ny a ro­vi­ny (pri­tom pla­tí pra­vid­lo, že pri ore­za­ní všeo­bec­né­ho n-uhol­ní­ka ro­vi­nou mô­že vznik­núť maximál­ne (n+1)-uhol­ník).

engine obr1.bmp
Obr. 1 3D hra­nol zos­tro­je­ný v mies­te do­pa­du guľ­ky na po­vrch ob­jek­tu

Na obr. 1 je zob­ra­ze­ná vý­sled­ná mno­ži­na tro­ju­hol­ní­kov, kto­ré rep­re­zen­tu­jú od­tla­čok. Po za­siah­nu­tí hra­ny ob­jek­tu sa da­ná hra­na „oba­lí“ od­tlač­kom.

Vý­po­čet textú­ro­va­cích sú­rad­níc
Ap­li­ká­ciou jed­no­duc­hé­ho pra­vouh­lé­ho pre­mie­ta­nia mô­že­me vr­cho­lom zís­ka­nej mno­ži­ny tro­ju­hol­ní­kov pri­ra­diť textú­ro­va­cie sú­rad­ni­ce. Tým však ne­zís­ka­me pri­ja­teľ­ný gra­fic­ký vý­sle­dok. Textú­ry na­ne­se­né na tro­ju­hol­ní­ky, kto­ré sú príl­iš od­klo­ne­né od ro­vi­ny de­fi­no­va­nej lú­čom vy­sla­ným z ús­tia hlav­ne zbra­ne, bu­dú ne­pek­ne na­tiah­nu­té, aj keď bu­dú nav­zá­jom sto­per­cen­tne pre­po­je­né (seam­less).

Opí­sa­ný prob­lém mož­no rie­šiť nie­koľ­ký­mi spô­sob­mi, ale ani je­den z nich ne­bu­de do­ko­na­lý. Pre­čo? Vy­svet­le­nie je jed­no­duc­hé – skú­ša­li ste nie­ke­dy pril­epiť dvoj­roz­mer­nú štvo­ru­hol­ní­ko­vú ná­lep­ku na roh koc­ky? Je to mož­né? Sa­moz­rej­me, že nie. Z ná­lep­ky vždy zos­ta­ne ur­či­tá časť, kto­rá bu­de preč­nie­vať. Na­niesť 2D štvo­ru­hol­ní­ko­vú textú­ru na roh ob­jek­tu (koc­ky) ta­kis­to ne­mož­no bez vy­nec­ha­nia ur­či­tej čas­ti textú­ry. Ne­že­la­ný efekt sa dá po­ľah­ky eli­mi­no­vať ap­li­ká­ciou 3D textúr, ale o tom ino­ke­dy.

engine obr2.bmp
Obr. 2 Spo­loč­ná ro­vi­na po­uži­tá na vý­po­čet textú­ro­va­cích sú­rad­níc

Čias­toč­ným rie­še­ním je po­uži­tie al­go­rit­mu vý­poč­tu textú­ro­va­cích sú­rad­níc s nas­le­du­jú­ci­mi tro­mi pra­vid­la­mi:
1. Vr­cho­ly tro­ju­hol­ní­kov, kto­ré ne­le­žia v ro­vi­ne, kto­rú za­siah­la guľ­ka, a ma­jú s niek­to­rým tro­ju­hol­ní­kom pat­ria­cim za­siah­nu­tej ro­vi­ne spo­loč­nú hra­nu, oto­čí­me oko­lo spo­loč­nej hra­ny.
2. Vr­cho­ly tro­ju­hol­ní­kov, kto­ré ne­le­žia v ro­vi­ne, kto­rú za­siah­la guľ­ka, a ma­jú s niek­to­rým tro­ju­hol­ní­kom pat­ria­cim za­siah­nu­tej ro­vi­ne spo­loč­ný vr­chol, oto­čí­me oko­lo spo­loč­né­ho vr­cho­lu.
3. Vr­cho­ly všet­kých tro­ju­hol­ní­kov da­né­ho od­tlač­ku oto­čí­me do ro­vi­ny, v kto­rej pre­beh­ne vý­po­čet textú­ro­va­cích sú­rad­níc.

engine obr3.bmp
Obr. 3 Od­tla­čok na­ne­se­ný na po­vrch ob­jek­tu

Opí­sa­ným po­stu­pom „roz­ba­lí­me“ od­tla­čok do ro­vi­ny a nás­led­ne naň na­ne­sie­me 2D textú­ru. Sa­moz­rej­me, že ten­to po­stup ne­rie­ši všet­ky mož­né prí­pa­dy a ne­bu­de vždy fun­go­vať tak, aby bol vý­sle­dok do­ko­na­lý. Na na­še úče­ly je však po­sta­ču­jú­ci.

engine obr4.bmp
Obr. 4 Vý­sled­ný gra­fic­ký efekt ap­li­ká­cie od­tlač­kov

Na­bu­dú­ce...
V nas­le­du­jú­cej čas­ti se­riá­lu sa za­me­ria­me na reak­ciu ob­jek­tov scé­ny ako od­po­veď na ak­ciu vy­vo­la­nú streľ­bou. Bu­de­me ho­vo­riť o fy­zi­kál­nych zá­ko­noch a ich ap­roximá­cii v rám­ci po­čí­ta­čov a her­ných en­gi­nov.

Ďal­šie čas­ti >>

Zdroj: Infoware 4/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