Programujeme grafický engine XXVII.

opengl_logo.jpg Tá­to časť se­riá­lu tvo­rí úvod k po­mer­ne roz­siah­le­mu blo­ku, v rám­ci kto­ré­ho sa bu­de­me ve­no­vať ap­li­ká­cii fy­zi­kál­nych zá­ko­nov v mo­der­ných gra­fic­kých (her­ných) en­gi­noch. Prak­tic­kú im­ple­men­tá­ciu bu­de pred­chád­zať prís­luš­ná teória – uve­de­nie a opis re­le­van­tných ma­te­ma­tic­ko-fy­zi­kál­nych vzťa­hov.

Di­fe­ren­ciál­ne rov­ni­ce (di­ffe­ren­tial equations)
Prak­tic­kú im­ple­men­tá­ciu fy­zi­kál­nych zá­ko­nov v prip­ra­vo­va­nom en­gi­ne po­dmie­ňu­je zna­losť tzv. štan­dar­dnej di­fe­ren­ciál­nej rov­ni­ce (or­di­na­ry di­ffe­ren­tial equation – ODE). Do­vo­lím si tvr­diť, že tá­to rov­ni­ca je zá­klad­ný ka­meň dy­na­mic­ké­ho sys­té­mu, kto­rý sa po­kú­si­me vy­tvo­riť. Všet­ky ďal­šie ma­te­ma­tic­ko-fy­zi­kál­ne vzťa­hy, kto­ré bu­de­me po­uží­vať, ur­či­tým spô­so­bom ko­pí­ru­jú for­mát ODE.

Di­fe­ren­ciál­ne rov­ni­ce opi­su­jú vzťah (re­la­tion) med­zi nez­ná­my­mi fun­kcia­mi a ich de­ri­vá­cia­mi (od­vo­de­ni­na­mi). Rie­še­ním (sol­ve) uve­de­ných rov­níc je fun­kcia, kto­rá vy­ho­vu­je (sa­tis­fy) de­fi­no­va­né­mu vzťa­hu. Zá­klad­ný tvar ODE je nas­le­du­jú­ci:

x' = f(x,t)	x' je de­ri­vá­cia fun­kcie f, t pred­sta­vu­je čas, x(t0) = x0

Eule­ro­va me­tó­da (Euler's met­hod)
Prob­lé­mom ap­li­ká­cie ODE v po­čí­ta­čo­vej gra­fi­ke je jej spo­ji­tosť. Na zís­ka­nie spo­ji­té­ho vý­sled­ku by sme mu­se­li ODE rie­šiť pre kaž­dý ča­so­vý oka­mih, pri­čom dĺžka ča­so­vé­ho inter­va­lu med­zi dvo­ma rie­še­nia­mi by sa blí­ži­la k nu­le. To­to si v po­čí­ta­čo­vej gra­fi­ke ne­mô­že­me do­vo­liť, pre­to­že ne­vyh­nut­né vý­poč­ty by neú­mer­ne za­ťa­ži­li dos­tup­né zdro­je a vý­sle­dok by bol ne­pou­ži­teľ­ný.

Pre­to sa pri „po­čí­ta­čo­vom“ rie­še­ní ODE po­uží­va naj­mä Eule­ro­va me­tó­da, kto­rou ap­roximu­je­me spo­ji­tý prie­beh ODE, pri­čom vý­sled­ky zís­ka­va­me v dis­krét­nych ča­so­vých inter­va­loch. Eule­ro­va me­tó­da nie je je­di­ná mož­nosť rie­še­nia ODE, ale sa veľ­mi čas­to po­uží­va naj­mä pre jej jed­no­duc­hosť. Zá­klad­ný tvar rie­še­nia ODE Eule­ro­vou me­tó­dou je nas­le­du­jú­ci:

x(t0+dt) = x0 + dt * x'(t0) ale­bo x(t+dt) = x(t) + dt * f(x,t)	dt je dĺžka ča­so­vé­ho inter­va­lu

Dô­le­ži­tá po­dmien­ka na sta­bi­li­tu dy­na­mic­ké­ho sys­té­mu je voľ­ba dos­ta­toč­ne ma­lé­ho dt – ča­so­vé­ho inter­va­lu (ti­me step) med­zi dvo­ma vý­sled­ka­mi ODE. Pri­ma­lá hod­no­ta neú­mer­ne za­ťa­ží vý­poč­to­vú si­lu náš­ho har­dvé­ru. Nao­pak, veľ­ká hod­no­ta bu­de mať za nás­le­dok nes­ta­bi­li­tu a roz­pad sys­té­mu.

Pri prak­tic­kom rie­še­ní ODE vy­uží­va­me nas­le­du­jú­ce fy­zi­kál­ne vzťa­hy:
 rých­losť te­le­sa v ča­se t0 je de­ri­vá­ciou drá­hy (po­lo­hy) te­le­sa po­dľa ča­su: v(t0) = s'(t0)
 zrýc­hle­nie te­le­sa v ča­se t0 je de­ri­vá­ciou rých­los­ti te­le­sa po­dľa ča­su: a(t0) = v'(t0)
 si­la pô­so­bia­ca na te­le­so v ča­se t0 je de­ri­vá­ciou hyb­nos­ti te­le­sa po­dľa ča­su: F(t0) = p'(t0), p = m * v, ak uva­žu­je­me, že hmot­nosť te­le­sa sa v ča­se ne­me­ní, rov­ni­cu mož­no zjed­no­du­šiť na: F(t0) = m * v'(t0) a nás­led­ne F(t0) = m * a(t0), a(t0) = F(t0) / m – zrýc­hle­nie te­le­sa je pria­moú­mer­né pô­so­bia­cej si­le a nep­ria­moú­mer­né hmot­nos­ti te­le­sa

Si­mu­lá­cia po­hy­bu čas­tíc (par­tic­le si­mu­la­tion)
Si­mu­lá­ciu fy­zi­kál­nych ja­vov za­čne­me reali­zo­vať na čas­ti­ciach s de­fi­no­va­nou hmot­nos­ťou – hmot­ných bo­doch v gra­vi­tač­nom po­li Ze­me. Pri si­mu­lá­cii bu­de­me ov­plyv­ňo­vať po­lo­hu a rých­losť čas­tíc na zá­kla­de síl pô­so­bia­cich na tie­to čas­ti­ce. Si­mu­lač­ný sys­tém bu­de za­lo­že­ný na vzá­jom­nom vzťa­hu med­zi po­lo­hou čas­ti­ce (s), jej rých­los­ťou (v) a všet­ký­mi si­la­mi (F), kto­ré v da­nom ča­se na čas­ti­cu pô­so­bia. Rie­še­ním (sol­ve) toh­to vzá­jom­né­ho vzťa­hu spl­ní­me prís­luš­né fy­zi­kál­ne zá­ko­ny a zís­ka­me po­ža­do­va­ný gra­fic­ký vý­stup.

Obr. 1 Hmot­ný bod v 3D pries­to­re

Si­ly pô­so­bia­ce na čas­ti­ce (for­ces)
Si­ly, kto­ré v da­nom ča­se pô­so­bia na čas­ti­ce s ne­nu­lo­vou hmot­nos­ťou, mô­že­me ka­te­go­ri­zo­vať do dvoch sku­pín, na tzv. unár­ne a n-ár­ne:
 med­zi unár­ne si­ly mô­že­me za­ra­diť napr. gra­vi­tač­nú si­lu: F = m * g, g = 9,81 m/s2 ale­bo tre­ciu si­lu: F = -k * v, k je koe­fi­cient tre­nia, tie­to si­ly pô­so­bia na kon­krét­nu čas­ti­cu sys­té­mu
 n-ár­ny­mi si­la­mi ro­zu­mie­me si­ly, kto­ré v da­nom oka­mi­hu pô­so­bia na via­ce­ro čas­tíc sú­čas­ne, ide napr. o vzá­jom­né si­ly, ku kto­rým pat­rí aj prí­ťaž­li­vá si­la: F1 = ks * (l-r) - kd * (v1-v2), F2 = -F1, ks je tu­hosť pru­ži­ny, l je ak­tuál­na vzdia­le­nosť čas­tíc, r je vzdia­le­nosť čas­tíc v po­ko­ji, kd je koe­fi­cient tre­nia

Na­bu­dú­ce...
V bu­dú­cej čas­ti se­riá­lu bu­de­me po­kra­čo­vať v za­ča­tej té­me tý­ka­jú­cej sa si­mu­lá­cie fy­zi­kál­nych ja­vov. Od teórie prej­de­me k prak­tic­kej ukáž­ke im­ple­men­tá­cie fy­zi­ky v rám­ci prip­ra­vo­va­né­ho en­gi­nu.

Ďal­šie čas­ti >>

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