Programujeme grafický engine XIV.

opengl_logo.jpg Tá­to časť se­riá­lu bu­de úvo­dom do po­mer­ne roz­siah­le­ho blo­ku, v kto­rom pred­sta­ví­me je­den z naj­mo­der­nej­ších prís­tu­pov k ren­de­rin­gu rôz­nych dru­hov ras­tlín (plants, ve­ge­ta­tion). Vy­svet­lí­me si nie­koľ­ko zá­klad­ných po­jmov a prís­tu­pov k tvor­be ras­tlín. Bu­de­me sa ve­no­vať rôz­nym spô­so­bom zlep­še­nia „ne­vý­hod­nej si­tuácie“, v kto­rej sa nac­hád­za­me.

engine1.jpg
Obr. 1 Strom ge­ne­ro­va­ný po­čí­ta­čom

Hen­di­kep gra­fic­ké­ho har­dvé­ru
V úvo­de sme po­uži­li for­mu­lá­ciu „ne­vý­hod­ná si­tuácia“. Pre­čo? Vy­svet­le­nie je jed­no­duc­hé – eš­te sme ne­za­ča­li prog­ra­mo­vať a už vop­red sa mu­sí­me sto­tož­niť s fak­tom, že bez po­uži­tia via­ce­rých tri­kov ne­bu­de­me schop­ní ge­ne­ro­vať reál­ne vy­ze­ra­jú­ce ras­tli­ny.

Prob­lé­mom je ne­dos­ta­toč­ný vý­kon po­čí­ta­čo­vé­ho (naj­mä gra­fic­ké­ho) har­dvé­ru sú­čas­ných po­čí­ta­čov. Aj ke­by sme vlas­tni­li naj­mo­der­nej­šiu (naj­vý­kon­nej­šiu) gra­fic­kú kar­tu, ani za jej po­mo­ci by sme ne­do­ká­za­li vy­tvo­riť dos­ta­toč­ne reál­ny ob­raz. Po­kiaľ by sme to­tiž chce­li vy­mo­de­lo­vať reál­ne vy­ze­ra­jú­ce ras­tli­ny, mu­se­li by sme po­užiť nie­koľ­ko sto­viek ti­síc tro­ju­hol­ní­kov. Prá­ve pre­to sa mu­sí­me uc­hý­liť k rôz­nym spô­so­bom „ok­la­ma­nia“ po­zo­ro­va­te­ľa. Pri­tom tre­ba vziať do úva­hy, v akej vzdia­le­nos­ti od ras­tlín sa mô­že po­zo­ro­va­teľ nac­hád­zať:
1. veľ­mi ma­lá vzdia­le­nosť – tre­ba uva­žo­vať o zob­ra­ze­ní ko­ná­rov, sto­niek, lis­tov, kve­tov,
2. ma­lá vzdia­le­nosť – zob­ra­zu­je­me 3D trá­vu, krí­ky, stro­my dopl­ne­né o 2D textú­ry,
3. bež­ná až väč­šia vzdia­le­nosť – po­uží­va­me vý­hrad­ne rôz­ne me­tó­dy „ok­la­ma­nia“ po­zo­ro­va­te­ľa – zväč­ša 2D textú­ry, LOD...

His­tó­ria a sú­čas­nosť
Pred po­drob­nej­ším opi­som kaž­dé­ho z uve­de­ných prís­tu­pov je po­treb­né pri­po­me­núť, že vý­voj zob­ra­zo­va­cích me­tód nap­re­du­je a aj vý­kon gra­fic­ké­ho har­dvé­ru neus­tá­le ras­tie. Po­kiaľ v mi­nu­los­ti prog­ra­má­to­ri po­uží­va­li pri akej­koľ­vek vzdia­le­nos­ti po­zo­ro­va­te­ľa od ras­tli­ny jed­not­né zob­ra­ze­nie po­mo­cou tzv. bi­llboar­dov, v sú­čas­nos­ti pre­fe­ru­jú 3D zob­ra­ze­nie, dopl­ne­né o niek­to­rú z me­tód urýc­hle­nia ren­de­rin­gu (napr. LOD, im­pos­tors, clus­ters, sli­cing, clip­ping, al­pha tes­ting, al­pha blen­ding...). Mo­der­ným prís­tu­pom k mo­de­lo­va­niu 3D ras­tlín sa ve­nu­je množ­stvo auto­rov. Tí vy­tvo­ri­li nie­koľ­ko rôz­nych po­stu­pov – teó­rií, kto­ré sa s ur­či­tý­mi vý­ho­da­mi aj ne­vý­ho­da­mi ap­li­ku­jú v praxi (napr. L-sys­té­my, frak­tá­ly...).

engine2.jpg
Obr. 2 Strom ge­ne­ro­va­ný po­čí­ta­čom

Veľ­mi ma­lá vzdia­le­nosť
V prí­pa­de, že sa po­zo­ro­va­teľ do­ká­že prib­lí­žiť k ras­tli­ne do bez­pros­tred­nej vzdia­le­nos­ti, ne­má­me veľ­mi na vý­ber a mu­sí­me zob­ra­ziť všet­ky jej de­tai­ly, aj keď na to bu­de­me mu­sieť po­užiť väč­šie množ­stvo tro­ju­hol­ní­kov. V tom­to prí­pa­de exis­tu­je iba veľ­mi má­lo mož­nos­tí, ako urýc­hliť zob­ra­ze­nie. Žiad­nym efek­tív­nym spô­so­bom to­tiž ne­do­ká­že­me si­mu­lo­vať tzv. pa­ra­laxový efekt (do­jem hĺbky ob­ra­zu, kto­rý vzni­ká po­zo­ro­va­ním ob­jek­tov z dvoch rôz­nych uh­lov – bež­né u člo­ve­ka, kto­rý sa na svet po­ze­rá dvo­ma oča­mi). Ob­jek­ty, kto­ré ma­jú v reál­nom sve­te tre­tí roz­mer (krí­ky, kme­ne stro­mov, ko­ná­re...), zob­ra­zu­je­me troj­roz­mer­ne. Po­kiaľ však po­tre­bu­je­me zob­ra­ziť lis­ty či trá­vu, tak­mer vždy po­uží­va­me 2D textú­ro­va­nie.

Ma­lá vzdia­le­nosť
V prí­pa­de, že po­zo­ro­va­teľ ne­má mož­nosť prib­lí­žiť sa ku kon­krét­nym ko­ná­rom či lis­tom, na ich zob­ra­ze­nie s vý­ho­dou po­uží­va­me 2D textú­ro­va­nie. Kme­ne stro­mov a krí­ky zob­ra­zí­me troj­roz­mer­ne, ale v niek­to­rých prí­pa­doch, keď sa po­zo­ro­va­teľ ne­má ako prib­lí­žiť k tým­to ob­jek­tom, mô­že­me na ich zob­ra­ze­nie po­užiť aj jed­no­duc­hé 2D textú­ry.

Väč­šia vzdia­le­nosť
V tom­to prí­pa­de už dr­vi­vá väč­ši­na en­gi­nov zob­ra­zu­je ras­tli­ny vý­luč­ne vo for­me 2D textúr (bi­llboar­ding). Po­zo­ro­va­teľ sa ne­má ako dos­tať do blíz­kos­ti ras­tlín, pre­to je ich 3D zob­ra­ze­nie po­uži­té iba veľ­mi spo­ra­dic­ky.

engine3.jpg
Obr. 3 Strom ge­ne­ro­va­ný po­čí­ta­čom

Na­bu­dú­ce...
V nas­le­du­jú­cej čas­ti se­riá­lu ap­li­ku­je­me opi­so­va­né prís­tu­py do praxe. Pred­sta­ví­me ap­li­ká­ciu, kto­rej vý­stu­py mož­no vi­dieť na pril­ože­ných ob­ráz­koch.

Ďal­šie čas­ti >>

Zdroj: Infoware 2/2009



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