Programujeme grafický engine XXX.

opengl_logo.jpg V tom­to pok­ra­čo­va­ní se­riá­lu si dopl­ní­me teo­re­tic­ké ve­do­mos­ti pot­reb­né na im­ple­men­tá­ciu fy­zi­kál­nych zá­ko­nov v gra­fic­kých a her­ných en­gi­noch. Ro­zo­be­rie­me poj­my ten­zor zotr­vač­nos­ti a im­pulz. Na­ko­niec opí­še­me kon­krét­ny al­go­rit­mus si­mu­lá­cie fy­zi­ky.

Ten­zor zotr­vač­nos­ti
Ten­zor zotr­vač­nos­ti je ma­ti­ca ty­pu 3×3, kto­rá je zá­vis­lá od na­to­če­nia RB, nie od je­ho po­lo­hy. V ma­te­riál­nom po­ní­ma­ní špe­ci­fi­ku­je dis­tri­bú­ciu hmo­ty RB vzhľa­dom na je­ho ťa­žis­ko. Ma­te­ma­tic­ky sta­no­vu­je po­mer me­dzi uh­lo­vou hyb­nos­ťou L(t) a uh­lo­vou rých­los­ťou ω(t). Nah­ra­de­ním dis­tri­buo­va­nej hmot­nos­ti (dis­tri­bu­ted mass) fun­kciou hus­to­ty (den­si­ty fun­ction) je ten­zor zotr­vač­nos­ti sym­et­ric­kou ma­ti­cou zos­tro­je­nou z in­teg­rá­lov fun­kcie hus­to­ty v ce­lom ob­je­me RB.

Vý­po­čet ten­zo­ra zotr­vač­nos­ti mu­sí­me vy­ko­nať v kaž­dom oka­mi­hu si­mu­lá­cie. Z dô­vo­du urý­chle­nia vý­poč­tov ne­pou­ží­va­me kla­sic­ké in­teg­ro­va­nie, ale hod­no­tu ten­zo­ra I(t)-1 vy­po­čí­ta­va­me re­la­tív­ne vo vzťa­hu k je­ho po­čia­toč­nej hod­no­te IBS-1. Ta­ké­to zjed­no­du­še­nie však mô­že­me pou­žiť iba v prí­pa­de jed­no­du­chých RB, ako napr. kvá­der, gu­ľa a po­dob­ne (ho­vo­rí­me o tzv. sym­bo­lic­kom in­teg­ro­va­ní):

I(t)-1 = R(t) * IBS-1 * R(t)T

I(t)-1 – in­verz­ný ten­zor zotr­vač­nos­ti (ma­ti­ca 3×3),
R(t) – ro­tač­ná ma­ti­ca (3×3),
IBS-1 – kon­štant­ný in­verz­ný ten­zor zotr­vač­nos­ti – ma­ti­ca 3×3 vy­po­čí­ta­ná na za­čiat­ku si­mu­lá­cie v tzv. ob­jek­to­vom pries­to­re (bo­dy spa­ce),
R(t)T – tran­spo­no­va­ná ro­tač­ná ma­ti­ca (3×3).

engine obr1.bmp
Obr. 1 Prík­lad kon­štan­tné­ho ten­zo­ra zotr­vač­nos­ti vy­po­čí­ta­né­ho pre kvá­der

Si­la a im­pulz
Me­dzi zá­klad­né si­ly, kto­ré pô­so­bia na RB v prie­be­hu si­mu­lá­cie, ur­či­te pat­rí gra­vi­tač­ná si­la. V pod­sta­te je zá­kla­dom reál­ne­ho sprá­va­nia sa RB. Ďal­šie si­ly sú už iba dopl­nko­vé – pri si­mu­lá­cii mô­žu, ale ne­mu­sia na da­né RB pô­so­biť. Špe­ci­fic­ký druh síl sú tzv. im­pul­zy, ozna­čo­va­né pís­me­nom J. Im­pul­zy sú vek­to­ry, kto­ré ma­jú cha­rak­ter síl, ale ich jed­not­ky sa rov­na­jú jed­not­kám hyb­nos­ti. Ap­li­ko­va­ním im­pul­zu na RB dôj­de k okam­ži­tej zme­ne je­ho rých­los­ti. Im­pulz si mož­no jed­no­du­cho pred­sta­viť ako pô­so­be­nie ne­ko­neč­ne veľ­kej si­ly v prie­be­hu ne­ko­neč­ne ma­lé­ho ča­so­vé­ho inter­va­lu. Nám zná­my vzťah na vý­po­čet zme­ny rých­los­ti Δv = F / M mô­že­me v prí­pa­de pô­so­be­nia im­pul­zu pre­pí­sať na tvar Δv = J / M. Zá­klad­né pa­ra­met­re sta­vo­vé­ho vek­to­ra sú v prí­pa­de pô­so­be­nia im­pul­zu nas­le­du­jú­ce:

ΔP = J,  ΔL = τim­pulz pri­čom τim­pulz = ( s – x(t) ) x J a Δω = I(t0)-1 *  τim­pulz

Prie­beh si­mu­lá­cie
Prie­beh si­mu­lá­cie fy­zi­kál­ne­ho po­hy­bu RB je nas­le­du­jú­ci:
1. Na za­čiat­ku nas­ta­ví­me po­čia­toč­nú po­lo­hu (s) a rých­losť (v) všet­kých vr­cho­lov RB, vy­po­čí­ta­me, resp. sta­no­ví­me hmot­nosť RB (M), vy­po­čí­ta­me pr­vky ro­tač­nej ma­ti­ce (R) a pr­vky kon­štan­tné­ho in­ver­zné­ho ten­zo­ra zotr­vač­nos­ti (IBS-1).
2. Nas­ta­ví­me smer a veľ­kosť síl pô­so­bia­cich na RB [pria­mo­čia­ra (P) a uh­lo­vá (L) hyb­nosť, resp. cel­ko­vá si­la (F) a cel­ko­vý krú­tia­ci mo­ment (τ) pô­so­bia­ci na RB].
3. Na zá­kla­de síl a kon­štan­tné­ho in­ver­zné­ho ten­zo­ra zotr­vač­nos­ti vy­po­čí­ta­me pria­mo­čia­ru (v) a uh­lo­vú (ω) rých­losť RB.
4. Vy­po­čí­ta­né rých­los­ti ap­li­ku­je­me na všet­ky vr­cho­ly RB, čím zme­ní­me ich po­lo­hu, nás­led­ne vy­po­čí­ta­me no­vé pr­vky ro­tač­nej ma­ti­ce.

Je sa­moz­rej­mé, že na reál­ny vzhľad si­mu­lá­cie mu­sí­me v oka­mi­hu vý­poč­tu no­vej po­lo­hy vr­cho­lov RB ap­li­ko­vať de­tek­ciu ko­lí­zií. Mož­nos­tí je viac a vý­ber kon­krét­ne­ho ty­pu je zá­vis­lý iba od vý­vo­já­ra. Opis vy­bra­nej de­tek­cie ko­lí­zií bu­de ob­sa­hom nas­le­du­jú­cich čas­tí se­riá­lu.

Na zjed­no­du­še­nie vý­poč­tov, kto­ré tre­ba vy­ko­nať z dô­vo­du vý­poč­tu ro­tač­nej ma­ti­ce, sa v mno­hých prí­pa­doch pou­ží­va­jú tzv. kva­ter­nió­ny (quater­nions) – nor­ma­li­zo­va­né štvorpr­vko­vé vek­to­ry. Kva­ter­nió­ny do­ká­žu na roz­diel od 9-pr­vko­vých ma­tíc ucho­vať na­to­če­nie troj­roz­mer­ných ob­jek­tov iba po­mo­cou 4 hod­nôt. Ukáž­ka a opis kon­krét­ne­ho pou­ži­tia kva­ter­nió­nov bu­de sú­čas­ťou vzo­ro­vé­ho prík­la­du.

Na­bu­dú­ce...
V pos­led­ných dvoch čas­tiach se­riá­lu sme sa ve­no­va­li zá­klad­ným ma­te­ma­tic­ko-fy­zi­kál­nym vzťa­hom, kto­ré bu­de­me pou­ží­vať pri si­mu­lá­cii fy­zi­ky v na­šom en­gi­ne. Stá­le nám však zos­tá­va opí­sať tzv. ob­me­dzenia (constraints) po­hy­bu RB, reali­zo­va­né pros­tred­níc­tvom de­tek­cie ko­lí­zií.

Ďal­šie čas­ti >>

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