Programujeme grafický engine XXVIII.

opengl_logo.jpg V tej­to čas­ti se­riá­lu opí­še­me kon­krét­nu im­ple­men­tá­ciu si­mu­lá­cie fy­zi­kál­nych zá­ko­nov v rám­ci ap­li­ká­cie En­gi­ne v2.2. Vzá­jom­né prí­ťaž­li­vé si­ly pô­so­bia­ce na čas­ti­ce (hmot­né bo­dy) us­po­ria­da­me tak, aby vy­tvo­ri­li ob­jekt 3D plát­na.

3D plát­no (cloth)
Ob­jekt troj­roz­mer­né­ho plát­na umies­tne­ný do náš­ho en­gi­nu je vy­tvo­re­ný z nav­zá­jom pre­po­je­ných čas­tíc, na kto­ré sú ap­li­ko­va­né prís­luš­né fy­zi­kál­ne zá­ko­ny. Zá­klad­ný­mi pre­men­ný­mi pri fy­zi­kál­nych vý­poč­toch sú po­lo­ha, rých­losť a si­ly pô­so­bia­ce na čas­ti­ce.

engine obr1.bmp
Obr. 1 Ob­jekt plát­na zlo­že­ný z nav­zá­jom po­spá­ja­ných čas­tíc

Všet­ky po­treb­né dek­la­rá­cie a de­fi­ní­cie ob­jek­tov a fun­kcií sú ulo­že­né v mo­du­le Cloth (cloth.cpp, cloth.h). Vlas­tnos­ťa­mi kaž­dej čas­ti­ce dy­na­mic­ké­ho sys­té­mu sú hmot­nosť (mass), po­lo­ha, rých­losť a si­la, kto­rá na čas­ti­cu pô­so­bí. Ok­rem uve­de­ných vlas­tnos­tí je kaž­dej čas­ti­ci pri­ra­de­ný ďal­ší veľ­mi dô­le­ži­tý pa­ra­me­ter, tzv. ob­med­ze­nia po­hy­bu (constraints).

Ob­med­ze­nia po­hy­bu čas­tíc
V na­šom prí­pa­de po­uži­je­me na prek­lad an­glic­ké­ho slo­va constraints vý­raz ob­med­ze­nia po­hy­bu, kto­rý naj­lep­šie opi­su­je úlo­hu prís­luš­ných pre­men­ných. Aký je vý­znam ob­med­ze­ní po­hy­bu čas­tíc? Pred­stav­me si, že by sme ma­li n čas­tíc v 3D pries­to­re, ale na žiad­nu z nich by ne­pô­so­bi­la si­la, kto­rá by ob­med­zo­va­la jej po­hyb. Čas­ti­ce by sa v pries­to­re po­hy­bo­va­li ľu­bo­voľ­ným sme­rom a vý­sled­ný gra­fic­ký efekt by bol chao­tic­ký.

V reál­nom ži­vo­te sú tzv. pev­né ob­jek­ty (ri­gid bo­dies) zlo­že­né z čas­tíc (cel­kov), kto­ré sú vzá­jom­ne pre­po­je­né a tie­to pre­po­je­nia sú udr­žia­va­né, až kým ne­dôj­de k ich „ná­sil­né­mu“ pre­ru­še­niu. Prík­la­dom mô­žu byť ató­my pr­vkov, kto­ré sa zdr­žu­jú v ur­či­tej vzdia­le­nos­ti od svoj­ho jad­ra. Kaž­dé pev­né te­le­so reál­ne­ho sve­ta je zlo­že­né z nav­zá­jom pre­po­je­ných ató­mov. Rov­na­ko aj na­še plát­no vo vir­tuál­nom sve­te je zlo­že­né z nav­zá­jom pre­po­je­ných čas­tíc. Pri na­ru­še­ní vzá­jom­ných vä­zieb med­zi čas­ti­ca­mi zá­ko­ni­te dôj­de k roz­pa­du plát­na rov­na­ko, ako by to nas­ta­lo aj v reál­nom sve­te.

engine obr2.bmp
Obr. 2 Roz­pad ob­jek­tu plát­na pri na­ru­še­ní prí­ťaž­li­vých síl med­zi čas­ti­ca­mi

A prá­ve ob­med­ze­nia po­hy­bu čas­tíc, kto­ré vy­tvo­rí­me na za­čiat­ku si­mu­lá­cie, za­brá­nia roz­pa­du plát­na. Kaž­dá čas­ti­ca bu­de pat­rič­ným spô­so­bom pre­po­je­ná vzá­jom­ný­mi prí­ťaž­li­vý­mi si­la­mi so su­sed­ný­mi čas­ti­ca­mi.

Sta­bi­li­ta/roz­pad si­mu­lá­cie
Pri rie­še­ní ODE Eule­ro­vou me­tó­dou je dô­le­ži­té pa­mä­tať na to, že ča­so­vý inter­val med­zi dvo­ma vý­poč­ta­mi mu­sí byť dos­ta­toč­ne krát­ky, v opač­nom prí­pa­de sa ce­lý sys­tém roz­pad­ne. V rám­ci náš­ho en­gi­nu to za­bez­pe­čí­me sta­no­ve­ním maximál­nej hod­no­ty ča­so­vé­ho inter­va­lu med­zi dvo­ma vý­poč­ta­mi (ite­ra­tions). V prí­pa­de, že ne­dis­po­nu­je­me dos­ta­toč­ne vý­kon­ným har­dvé­rom, vý­po­čet ODE bu­de vy­ko­na­ný viac­krát. Tým sí­ce zís­ka­me po­ža­do­va­né vý­sled­ky fy­zi­kál­nych vý­poč­tov, ale na úkor FPS po­treb­ných na ply­nu­lé zob­ra­ze­nie gra­fic­ké­ho vý­sled­ku.

Aká­koľ­vek im­ple­men­tá­cia fy­zi­ky v her­ných en­gi­noch si vy­ža­du­je vý­kon­ný har­dvér. V tom­to oka­mi­hu sa za­obe­rá­me jed­no­duc­hý­mi čas­ti­ca­mi, no pri rie­še­ní dy­na­mic­ké­ho fy­zi­kál­ne­ho sys­té­mu ap­li­ko­va­né­ho na zlo­ži­tej­šie ob­jek­ty bu­dú ná­ro­ky na vý­kon har­dvé­ru eš­te väč­šie. Prá­ve pre­to sa fy­zi­kál­ne si­mu­lá­cie bež­iace v reál­nom ča­se ob­ja­vo­va­li v star­ších en­gi­noch len spo­ra­dic­ky.

Si­mu­lá­cia
Al­go­rit­mus si­mu­lá­cie je ob­sa­hom fun­kcie si­mu­la­te(), kto­rej zá­klad­né pro­ces­né kro­ky sú nas­le­du­jú­ce:
1. vy­nu­lo­va­nie všet­kých síl pô­so­bia­cich na čas­ti­ce,
2. pri­da­nie vzá­jom­ných prí­ťaž­li­vých síl, kto­rých úlo­hou je udr­žia­vať tvar plát­na – ob­med­ze­nia po­hy­bu čas­tíc,
3. pri­da­nie gra­vi­tač­nej si­ly, si­ly vet­ra, kto­rá pô­so­bí na čas­ti­ce, a tre­cej si­ly,
4. pri­da­nie si­ly, kto­rá vznik­la pri ná­ra­ze – prec­ho­de guľ­ky cez plát­no,
5. pri­da­nie síl, kto­ré za­bez­pe­čia ko­lí­ziu čas­tíc s po­dla­hou a ste­nou mies­tnos­ti.

Na­bu­dú­ce...
Ten­to­raz sme sa ve­no­va­li ap­li­ká­cii fy­zi­kál­nych zá­ko­nov na čas­ti­ce – hmot­né bo­dy. Na­bu­dú­ce uká­že­me, aké ďal­šie fy­zi­kál­ne vzťa­hy tre­ba po­znať, aby sme moh­li v po­dob­nom duc­hu si­mu­lo­vať po­hyb kom­plexných 3D ob­jek­tov.

Ďal­šie čas­ti >>

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