Metody 3D grafiky (6. část, objekty)

Ostatní jazyky Petr Lite 3D grafika Metody 3D grafiky (6. část, objekty)

... dokončení z minulé lekce

V poslední části tutoriálu, zabývajícího se metodami 3D grafiky, se budeme věnovat tvorbě statických objektů.

Abychom si usnadnili definici rozmístění objektů ve scéně, zkopírovali jsme si plochu používanou při vytváření terénu z plochy a do terénu jsme rozmístili ikonky objektů, které budeme chtít ve scéně vytvořit. Při spuštění programu procházíme tuto mapu a narazíme-li na známou ikonku nějakého objektu, objekt vytvoříme a jeho vlastnosti (včetně souřadnice a ID prvku) uložíme do seznamu statických objektů.

1. 2D objekt

Prvním z představitelů statických objektů jsou 2D objekty. 2D objekt je jednoduchá textura, zpravidla s průhledností, která je umístěná na čtvercové či obdélníkové ploše. Plocha 2D objektu má tu speciální vlastnost, že se neustále natáčí směrem k pozorovateli. Proto 2D objekty vidíme z jakéhokoliv směru a vypadají ze všech směrů stejně. Bohužel, hráče neoklameme a pozná hned, že se jedná jen o 2D obrázek a ne o reálný 3D objekt. 2D objekty proto používáme spíše pro menší jednoduché objekty (tráva, květiny) a pro velmi vzdálené objekty.

2. Statický 2D objekt

Vylepšením 2D objektů jsou statické 2D objekty. Od jednoduchých 2D objektů se liší tím, že se skládají ze 4 stěn, které jsou navzájem kolmé (překřížené). K pozorovateli se nenatáčí. Prostorový dojem je mnohem vyšší než u jednoduchých 2D objektů. Nevýhodou je vyšší složitost objektu (4x více plošek) a textura objektu by měla být osově symetrická. Používá se proto převážně u stromů.

3. 3D objekty

Nejlepší dojem vytvoříme plně 3D objektem. K vytváření 3D objektů si buď můžeme vystačit s interním generátorem objektů Petra nebo modely objektů vytvoříme ve 3D editoru. Na následujících snímcích jsou příklady 3D objektů vytvořených v editoru Milkshape, následně převedených do textového souboru ve formátu x a vytvořených jako objekty v demonstračním programu pomocí prvku objekt z textu.

4. Snížená úroveň detailů LOD

Vykreslování 3D grafiky je příliš náročné na výkon. Jednou z možností, jak vykreslovací jednotce trochu odlehčit, je používání snížené úrovně detailů (LOD = Level of Details). Technika spočívá v tom, že objekt má nejvyšší složitost pouze při blízkém pohledu. Se vzdalováním od objektu složitost objektu postupně klesá.

Jako příklad je v ukázkovém programu vytvořen model fontánky. Je to programově generovaný model, vytvořený pomocí prvku rotační objekt. Vstupní profil byl vytvořený v programu Modelář, který je k dispozici ke stažení jako ukázkový program Petra.

Objekt fontánky je vytvořen nejdříve s velkou složitostí (12). Od určité vzdálenosti je k němu připojen jako objekt se sníženou úrovní detailů další objekt fontánky, tentokrát s mnohem nižší složitostí (6) a bez stínu. Při pohybu hráče směrem od fontánky je vidět po nějakou dobu objekt s plnou složitostí a od určité vzdálenosti se změní na objekt s menší složitostí. Při správně navržených objektech nemusí být rozdíl vzhledem ke vzdálenosti ani patrný. Ke druhému stupni složitostí je připojen ještě třetí stupeň složitosti fontánky. Tentokrát je to jen jednoduchý 2D objekt, tedy textura neustále se otáčející směrem k pozorovateli. Z původních několika set plošek modelu zbyly nakonec jen 2 plošky a přesto je objekt stále ještě dobře viditelný. Tímto způsobem lze sestavovat poměrně složité scény aniž by docházelo k citelnému snížování výkonu renderování grafiky.

Na následujících snímcích vidíte porovnání změn ve vzhledu objektu v přechodových vzdálenostech. Přechod mezi složitostí 6 a 2D objektem je znatelný spíš podle toho, že voda ve fontánce přestane být animovaná. Poznámka: Textura pro 2D objekt byla získána sejmutím objektu z obrazovky, oříznutím okrajů a vyplněním vody průhlednou barvou (v editoru Petra se střídají body modré a průsvitné barvy).

5. Kolize s objekty

Jistě nevypadá dobře, pokud hráč může procházet skrz stromy a jiné objekty. Z toho důvodu je třeba řešit kolizi hráče se statickými objekty.

Abychom nemuseli při každém kroku procházet vždy znovu celý seznam.statických objektů ve scéně, je během generování objektů sestavována kolizní mapa. Je to seznam všech pozic na mapě (v ukázkovém programu je velikost mapy 50 x 50, tj. celkem 2500 pozic). Je-li v mapě nalezen statický objekt, je uložen jednak do seznamu statických objektů (který potřebujeme k aktualizaci výšek objektů v terénu) a současne je index do seznamu statických objektů uložen do seznamu kolizní mapy na příslušnou pozici v mapě.

Pohybujeme-li hráčem, testujeme při každém jeho kroku příslušnou pozici v kolizní mapě a její blízké okolí. Je-li na testované pozici nalezen nějaký statický objekt, vezme program jeho index a nastaví si ukazatel na objekt v seznamu statických objektů. Tam je informace o tom, zda je objekt průchozí nebo ne.

Není-li průchozí, rozliší se test typu kolize. Nejjednodušším případem je kruhový test. U objektu je zaznamenáno, do jakého okruhu od středu objektu nemá hráč přístup. Stačí jen vypočítat vzdálenost hráče od středu objektu a porovnáním zjistit, zda nastala kolize s objektem nebo ne. Tento typ kolize je vhodný například pro stromy.

Druhý typ testované kolize je obdélník. V tomto případě jsou u objektu poznamenány počáteční a koncová souřadnice X a Z kolizní oblasti. Spadá-li testovaná souřadnice hráče dovnitř této oblasti, nastala kolize. Tento typ kolize je vhodný například pro budovy. Vyžaduje, aby testovaná obdélníková oblast byla souběžná s osami souřadného systému (raketa v ukázkovém programu proto nemůže být otočena šikmo).

Nastane-li kolize hráče, přehraje se zvuk nárazu. Pro příjemnější ovládání je obsluhováno klouzání hráče po objektu. Je-li detekována kolizní oblast, provede se ještě test kolize v možném směru X nebo Z, kdy se bude měnit jenom jedna souřadnice a druhá zůstane stejná. Je-li některá ze souřadnic průchozí, změní se pouze tato souřadnice a hráč jakoby klouže po povrchu objektu ve směru osy X nebo Z. Tato metoda funguje pouze u stěn rovnoběžných s osami X a Z. Pokud bychom ji chtěli více zobecnit, testovali bychom možné směry pro klouzání v několika vektorech směrů odkloněných od požadovaného směru pohybu. Použili bychom pak vektor pohybu, který by byl nejbližší požadovanému směru.


 

Stáhnout

Staženo 280x (6.09 MB)
Aplikace je včetně zdrojových kódů v jazyce Petr Lite (jsou obsaženy v EXE souboru, který lze v programu přímo otevřít)

 

  Aktivity (1)

Článek pro vás napsal Panda38
Avatar
Programátor C++, WinAPI, ASM.

Jak se ti líbí článek?
Celkem (2 hlasů) :
55555


 


Miniatura
Všechny články v sekci
3D grafika

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!