Programujeme grafický engine XV.

opengl_logo.jpg Tvor­ba a zob­ra­ze­nie ve­ge­tá­cie reali­zo­va­né po­čí­tač­mi je po­mer­ne zlo­ži­tá té­ma. Je pred­me­tom via­ce­rých ve­dec­kých prác, kto­rých roz­sah nie­koľ­ko­ná­sob­ne pre­vy­šu­je roz­sah náš­ho se­riá­lu. Pre­to väč­ši­nu po­stu­pov opí­še­me iba v struč­nos­ti a ne­bu­de­me sa ve­no­vať všet­kým de­tai­lom. Kom­plet­ný po­stup prak­tic­ky pred­ve­die­me v rám­ci vzo­ro­vej ap­li­ká­cie.

Ap­li­ká­cia Plants v1.0
Príl­ohou tej­to čas­ti se­riá­lu je zdro­jo­vý kód ap­li­ká­cie Plants v1.0. Tá­to ver­zia ap­li­ká­cie ren­de­ru­je strom, kto­rý nes­kôr im­ple­men­tu­je­me do prip­ra­vo­va­né­ho en­gi­nu. V nas­le­du­jú­cich ver­ziách k stro­mu pri­dá­me ďal­šie ras­tli­ny – krí­ky a trá­vu.

:: Sú­bo­ry ap­li­ká­cie
Pri príp­ra­ve ap­li­ká­cie Plants sme po­uži­li os­ved­če­nú sklad­bu sú­bo­rov. Stá­li či­ta­te­lia si ur­či­te všim­nú, že pri vý­ro­be no­vých vzo­ro­vých ap­li­ká­cií sa vždy sna­ží­me vy­užiť pô­vod­né sú­bo­ry, ako napr. mIn­ter­fa­ce, cpp (mIn­ter­fa­ce.h), mA­va­tar.cpp (mA­va­tar.h), m3d­math.cpp (m3d­math.h) atď., kto­ré up­ra­vu­je­me iba mi­ni­mál­ne. Zväč­ša ide o tie is­té sú­bo­ry, kto­ré sú sú­čas­ťou ap­li­ká­cie En­gi­ne.

No­vin­kou je sú­bor mPlantTree.cpp (mPlantTree.h), v kto­rom je umies­tne­ný kód sú­vi­sia­ci s vy­tvo­re­ním a vy­kres­le­ním stro­mu. Ob­sah uve­de­né­ho sú­bo­ru ne­bu­de­me po­drob­ne ro­zo­be­rať. Všet­ky je­ho čas­ti som sa sna­žil v maximál­nej mie­re oko­men­to­vať pria­mo v sú­bo­re. Na tom­to mies­te opí­še­me iba naj­zák­lad­nej­šie čas­ti al­go­rit­mu.

:: Al­go­rit­mus tvor­by stro­mu
1. Strom ge­ne­ro­va­ný po­čí­ta­čom vy­tvá­ra­me po­mo­cou kos­try (ske­le­ton), kto­rú ge­ne­ru­je­me vy­uži­tím jed­no­duc­hej re­kur­zie a ná­hod­ných čí­sel. Ten­to prís­tup je jed­no­duc­hý, ale po­mer­ne účin­ný. Sí­ce by sme moh­li vy­užiť so­fis­ti­ko­va­nej­šie prís­tu­py, ako napr. L-sys­té­my, no keď­že vý­stu­py via­ce­rých al­go­rit­mov sa v mno­hom po­do­ba­jú, zvo­li­li sme jed­no­duc­hšiu re­kur­ziu.

engine1.jpg
obr. 1

2. Vy­ge­ne­ro­va­nú kos­tru skla­da­jú­cu sa z jed­no­du­chých nav­zá­jom po­spá­ja­ných čiar „oba­lí­me“ ko­nár­mi. Ko­ná­rom (branch) sa v na­šom prí­pa­de ro­zu­mie aká­koľ­vek časť stro­mu vrá­ta­ne kme­ňa (stem), ko­ná­rov a ve­tiev.

engine2.jpg
obr. 2

3. Kon­co­vé ko­ná­re stro­mu (vet­vy) dopl­ní­me o lis­ty (lea­ves). Sa­moz­rej­me, že ne­bu­de­me ge­ne­ro­vať kaž­dý jed­not­li­vý list oso­bit­ne, ale sku­pi­nu lis­tov nah­ra­dí­me špe­ciál­nou textú­rou.

engine3.jpg
obr. 3

4. Na zá­kla­de vy­tvo­re­né­ho 3D stro­mu prip­ra­ví­me tzv. 2D ploc­hy (bi­llboards), kto­ré vy­uži­je­me v prí­pa­de, ak sa bu­de po­zo­ro­va­teľ nac­hád­zať v de­fi­no­va­nej vzdia­le­nos­ti od stro­mu.

Jed­not­li­vé bo­dy al­go­rit­mu po­drob­ne opí­še­me v nas­le­du­jú­cej čas­ti se­riá­lu. Mo­men­tál­ne sa za­me­ria­me na bliž­ší opis zvo­le­nej me­tó­dy LOD.

LOD (Le­vel of De­tail)
V pre­doš­lej čas­ti se­riá­lu sme ho­vo­ri­li o troch vzdia­le­nos­tiach, kto­ré hra­jú dô­le­ži­tú ro­lu v pro­ce­se ren­de­rin­gu stro­mov. Prin­cíp roz­diel­ne­ho ren­de­rin­gu to­ho is­té­ho ob­jek­tu zá­vis­lé­ho od is­té­ho fak­to­ra (napr. vzdia­le­nos­ti) je zá­kla­dom teórie, kto­rú na­zý­va­me tzv. úrov­ňou de­tai­lov – LOD. LOD mož­no im­ple­men­to­vať rôz­ny­mi spô­sob­mi, pri­čom vý­ber kon­krét­nej úrov­ne (LOD-le­vel) ne­mu­sí zá­vi­sieť iba od vzdia­le­nos­ti, ale mô­že byť ov­plyv­ne­ný rôz­ny­mi ve­li­či­na­mi. V na­šom prí­pa­de sme LOD na vy­kres­le­nie stro­mov ap­li­ko­va­li nas­le­du­jú­cim spô­so­bom:

1. Pre veľ­mi blíz­ku vzdia­le­nosť (bliž­šie ako THRES­HOLD1) je vy­kres­le­ný 3D strom, ren­de­ru­jú sa všet­ky ko­ná­re zlo­že­né z pá­sov tro­ju­hol­ní­kov (GL_TRIAN­GLE_STRIP) a všet­ky lis­ty zlo­že­né zo štvo­ru­hol­ní­kov po­kry­tých špe­ciál­nou textú­rou.
2. Pre blíz­ku vzdia­le­nosť (THRES­HOLD1 až THRES­HOLD2) je vy­kres­le­ný 2D bi­llboard, kto­rý je po­kry­tý vop­red prip­ra­ve­nou textú­rou, kto­rá rep­re­zen­tu­je pô­vod­ný 3D strom.
3. Pre väč­šiu vzdia­le­nosť (ďa­lej ako THRES­HOLD2) dôj­de k po­stup­né­mu zni­žo­va­niu vi­di­teľ­nos­ti 2D bi­llboar­du (fa­de-out), po do­siah­nu­tí vzdia­le­nos­ti THRES­HOL­D3 nie je vy­kres­le­ný ani 3D strom, ani 2D bi­llboard.

Na­bu­dú­ce...
V bu­dú­cej čas­ti se­riá­lu po­drob­ne opí­še­me všet­ky kro­ky al­go­rit­mu vy­tvo­re­nia a nás­led­né­ho vy­kres­le­nia stro­mu.

Ďal­šie čas­ti >>

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