Metódy 3D grafiky (6. časť, objekty)
... dokončenie z minulej lekcie
V poslednej časti tutoriálu, zaoberajúceho sa metódami 3D grafiky, sa budeme venovať tvorbe statických objektov.
Aby sme si uľahčili definíciu rozmiestnenie objektov v scéne, skopírovali sme si plochu používanú pri vytváraní terénu z plochy a do terénu sme rozmiestnili ikonky objektov, ktoré budeme chcieť v scéne vytvoriť. Pri spustení programu prechádzame túto mapu a narazíme ak na známu ikonku nejakého objektu, objekt vytvoríme a jeho vlastnosti (vrátane súradnice a ID prvku) uložíme do zoznamu statických objektov.
1. 2D objekt
Prvým z predstaviteľov statických objektov sú 2D objekty. 2D objekt je jednoduchá textúra, spravidla s priehľadnosťou, ktorá je umiestnená na štvorcové alebo obdĺžnikové ploche. Plocha 2D objektu má tú špeciálnu vlastnosť, že sa neustále natáča smerom k pozorovateľovi. Preto 2D objekty vidíme z akéhokoľvek smeru a vyzerajú zo všetkých smerov rovnako. Bohužiaľ, hráča neoklamete a spozná hneď, že sa jedná len o 2D obrázok a nie o reálny 3D objekt. 2D objekty preto používame skôr pre menšie jednoduché objekty (tráva, kvety) a pre veľmi vzdialené objekty.
2. Statický 2D objekt
Vylepšením 2D objektov sú statické 2D objekty. Od jednoduchých 2D objektov sa líši tým, že sa skladajú zo 4 stien, ktoré sú navzájom kolmé (prekrížené). K pozorovateľovi sa nenatáča. Priestorový dojem je oveľa vyššia ako u jednoduchých 2D objektov. Nevýhodou je vyššia zložitosť objektu (4x viac plôšok) a textúra objektu by mala byť osovo symetrická. Používa sa preto prevažne u stromov.
3. 3D objekty
Najlepší dojem vytvoríme plne 3D objektom. Na vytváranie 3D objektov si buď môžeme vystačiť s interným generátorom objektov Petra alebo modely objektov vytvoríme v 3D editore. Na nasledujúcich snímkach sú príklady 3D objektov vytvorených v editore Milkshape, následne prevedených do textového súboru vo formáte x a vytvorených ako objekty v demonštračnom programe pomocou prvku objekt z textu.
4. Znížená úroveň detailov LOD
Vykresľovanie 3D grafiky je príliš náročné na výkon. Jednou z možností, ako vykresľovací jednotke trochu odľahčiť, je používanie zníženej úrovne detailov (LOD = Level of Details). Technika spočíva v tom, že objekt má najvyššiu zložitosť iba pri blízkom pohľade. Sa vzďaľovaním od objektu zložitosť objektu postupne klesá.
Ako príklad je v ukážkovom programe vytvorený model fontánky. Je to programovo generovaný model, vytvorený pomocou prvku rotačné objekt. Vstupné profil bol vytvorený v programe Modelár, ktorý je k dispozícii na stiahnutie ako ukážkový program Petra.
Objekt fontánky je vytvorený najskôr s veľkou zložitosťou (12). Od určitej vzdialenosti je k nemu pripojený ako objekt so zníženou úrovňou detailov ďalší objekt fontánky, tentoraz s oveľa nižšou zložitosťou (6) a bez tieňa. Pri pohybe hráčov smerom od fontánky je vidieť po nejakú dobu objekt s plnou zložitosťou a od určitej vzdialenosti sa zmení na objekt s menšou zložitosťou. Pri správne navrhnutých objektoch nemusí byť rozdiel vzhľadom na vzdialenosť ani viditeľný. O druhom stupni zložitosťou je pripojený ešte tretí stupeň zložitosti fontánky. Tentoraz je to len jednoduchý 2D objekt, teda textúra neustále sa otáčajúci smerom k pozorovateľovi. Z pôvodných niekoľko sto plôšok modelu ostali nakoniec len 2 plôšky a napriek tomu je objekt ešte stále dobre viditeľný. Týmto spôsobom možno zostavovať pomerne zložité scény bez toho aby dochádzalo k citeľnému znižovaniu výkonu renderovanie grafiky.
Na nasledujúcich snímkach vidíte nákupný zmien vo vzhľade objektu v prechodových vzdialenostiach. Prechod medzi zložitosťou 6 a 2D objektom je znateľný skôr podľa toho, že voda vo fontánke prestane byť animovaná. Poznámka: Textúra pre 2D objekt bola získaná odobratím objektu z obrazovky, orezaním okrajov a vyplnením vody priehľadnou farbou (v editore Petra sa striedajú body modrej a priesvitné farby).
5. Kolízie s objektmi
Iste nevyzerá dobre, ak hráč môže prechádzať skrz stromy a iné objekty. Z toho dôvodu je potrebné riešiť kolízii hráčov so statickými objektmi.
Aby sme nemuseli pri každom kroku prechádzať vždy znovu celý seznam.statických objektov v scéne, je počas generovanie objektov zostavovaná kolízne mapa. Je to zoznam všetkých pozícií na mape (v ukážkovom programe je veľkosť mapy 50 x 50, tj. Celkom 2500 pozícií). Ak je v mape nájdený statický objekt, je uložený jednak do zoznamu statických objektov (ktorý potrebujeme na aktualizáciu výšok objektov v teréne) a súčasne je index do zoznamu statických objektov uložený do zoznamu kolízne mapy na príslušnú pozíciu v mape.
Pohybujeme Ak hráčom, testujeme pri každom jeho kroku príslušnú pozíciu v kolízne mape a jej blízke okolie. Ak je na testované pozícii nájdený nejaký statický objekt, vezme program jeho index a nastaví si ukazovateľ na objekt v zozname statických objektov. Tam je informácia o tom, či je objekt priechodná alebo nie.
Ak nie je priechodná, rozlíši sa test typu kolízie. Najjednoduchším prípadom je kruhový test. Pri objekte je zaznamenané, do akého okruhu od stredu objektu nemá hráč prístup. Stačí len vypočítať vzdialenosť hráčov od stredu objektu a porovnaním zistiť, či nastala kolízia s objektom alebo nie. Tento typ kolízie je vhodný napríklad pre stromy.
Druhý typ testované kolízie je obdĺžnik. V tomto prípade sú pri objekte poznačené počiatočné a koncové súradnice X a Z kolízne oblasti. Spadá Ak testovaná súradnice hráčov dovnútra tejto oblasti, nastala kolízia. Tento typ kolízie je vhodný napríklad pre budovy. Vyžaduje, aby testovaná obdĺžniková oblasť bola súbežná s osami súradnicového systému (raketa v ukážkovom programe preto nemôže byť otočená šikmo).
Ak nastane kolízia hráča, prehrá sa zvuk nárazu. Pre príjemnejšie ovládanie je obsluhované kĺzanie hráčov po objekte. Ak je detekovaná kolízny oblasť, vykoná sa ešte test kolízie v možnom smere X alebo Z, kedy sa bude meniť iba jedna súradnice a druhá zostane rovnaká. Ak je niektorá zo súradníc priechodná, zmení sa len nasledujúce súradnice a hráč akoby kĺže po povrchu objektu v smere osi X alebo Z. Táto metóda funguje iba pri stenách rovnobežných s osami X a Z. Ak by sme ju chceli viac zovšeobecniť, testovali by sme možné smery pre kĺzanie v niekoľkých vektoroch smerov odklonených od požadovaného smeru pohybu. Použili by sme potom vektor pohybu, ktorý by bol najbližší požadovanému smeru.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 290x (6.09 MB)
Aplikácia je vrátane zdrojových kódov v jazyku Petr Lite (sú obsiahnuté v EXE súbore, ktorý možno v programe priamo otvoriť)