Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lovíme minotaury (1. část, bludiště)

Tak trochu se vrátíme k našemu oblíbenému bludišti, které jsme vytvářeli v políčkové grafice. Tentokrát ale v plně 3D. A s lepšími příšerami.

Založte si nový program, Bludiště 3D. Ze všeho nejdříve budeme potřebovat návrh bludiště. Využijeme opět políčkovou grafiku a plochu, která je na návrhy scén jako ušitá.

Připravte si nějaké textury, které použijete k vytvoření zdí, podlahy a stropu. Můžete použít ty, co jsou na konci lekce. Každé políčko bude tvořit 1 čtvercovou plochu s rozměry 1 x 1 a s vlastní texturou. Textury použijte o velikosti 256 x 256 bodů (tj. 8 x 8 políček). Pro všechny textury budeme používat vyhlazení textur stupně 2. Tím se sice všechny textury zredukují na rozměr 128 x 128 bodů, ale vyhladí se tím artefakty vzniklé převodem True Color textur do 256 barev, které používá Petr. Díky tomu, že převody proběhly s ditheringem, vzniknou po zmenšení opět textury v True Color.

Pro každou texturu zdi si připravte jeden předmět s obrázkem zdi. Předměty použijte k návrhu bludiště. Každé políčko pro zeď bude nahrazeno blokem až 4 stěn se stejnou texturou. Prázdné políčko překreslete obrázkem podlahy. Návrh by mohl vypadat například takto:

Program zahájíme klasicky skupinou inicializace programu a příkazem pro inicializací 3D grafiky. V programu budeme používat vyhlazení textur 2, proto můžeme tento příkaz uvést už nazačátku programu. Výsledkem bude hra běžící v celoobrazovkovém režimu, proto připravíme příkaz celoobrazovkový režim, který zajistí přepnutí. Zatím ho však necháme vypnutý (tlačítkem Vypnout), protože přepínání videomódu chvíli trvá a navíc může mít za následek rozhození rozměrů některých oken, proto raději program vyvíjíme v oknovém režimu.

Dále si připravíme prázdnou funkci vytvoření 3D bludiště a nakonec hlavní smyčku programu ukončovanou stiskem klávesy Esc. Protože se bude jednat o 3D hru vceloobrazovkovém režimu, můžeme si dovolit ji preferovat před ostatními aplikacemi, zvolíme proto časovač s časem 0. Tím zajistíme maximální plynulost chodu hry.

Přejdeme k obsluze vytváření bludiště. Vytvoříme jenom ty plochy, které bychom mohli vidět z průchozího políčka. Proto projdeme postupně všechna políčka plochy a pokud narazíme na prázdné (průchozí) políčko, vytvoříme podlahu a strop. Pak testujeme sousední políčka a není-li na nich prázdné políčko, vytvoříme tam příslušnou zeď.

K procházení políček plochy využijeme Petra. Vypneme jeho viditelnost (nepotřebujeme aby byl animovaný, stejně ho ve 3D nevidíme) a nastavíme řádek na 0 a směr doprava. Pak procházíme postupně všechny řádky a pozice plochy a testujeme, zda jsme narazili na průchodné políčko.

Narazíme-li na prázdné (průchodné) políčko, ze všeho nejdříve vytvoříme podlahu. Jenom z toho prostého důvodu, že ji můžeme snadno vidět během ladění. Podlaha bude objekt stěny (který je tvořen dvěma pravoúhlými trojúhelníky). Stěna se vytvoří jako stojící, otočená přední stranou směrem k nám (my sedíváme směrem kladné osy Z). Protoji rotací podle osy X o 90 stupňů položíme na zem. Poté ji nastavíme na souřadnice shodné se souřadnicemi Petra. S tím ovšem, že v našem 3D světě používáme osu Y směrem vzhůru a osu Z směrem od nás vpřed. Zatímco na plochu se díváme pohledem shora. Proto nastavíme souřadnici Z stěny podle souřadnice Y Petra. Stěna má rozměr 1 x 1, proto stěny můžeme jednoduše skládat vedle sebe podle políčkových souřadnic, které se také liší o 1. U 3D objektů je nula souřadnic ve středu objektu, proto přičteme k souřadnicím 0.5, aby podlaha ležela v intervalu souřadnic 0 až1. Se stěnami bludiště nebudeme v budoucnu už nijak manipulovat, proto si jejich ID nebudeme uchovávat a můžeme tedy použít pro všechny stěny jednu společnou proměnnou pomocné ID, kterou si vytvoříme jenom dočasně v lokálních proměnných funkce.

Abychom mohli vyzkoušet, jaknám funguje vytváření podlahy, musíme si nejdříve posunout kameru na pozici, ze které bludiště dobře uvidíme. Kamera je také jeden z objektů, má číslo 1. Vyberte ji jako aktivní objekt. Nastavením souřadnice X na 10 ji posunume do středu bludiště. Nastavením souřadnice Y na 18 ji posuneme tak nějak přiměřeně nahoru (hodnotu jsme zjistili zkusmo). Nastavením souřadnice Z na -6 couvneme trochu dozadu, to abychom viděli celé bludiště. No a nakonec nastavením rotace X na hodnotu sklopíme svůj pohled trochu dolů. Hodnota byla stanovena opět zkusmo. Je to v radiánech, takže by to bylo asi tak 52 stupňů.

Když teď program spustíte,měli byste vidět vytvořená prázdná políčka bludiště (podlaha).

Strop vytvoříme podobně jako podlahu. Proto zkopírujeme skupinu pro vytvoření podlahy a jenom ji pozměníme. Rotaci podle osy X musíme dělat obráceným směrem, proto namísto 90 stupňů použijeme úhel 270 stupňů. Podlaha byla ve výšce 0, zatímco strop bude ve výšce 1. Proto nastavíme souřadnici Y na 1. Nakonec přidáme malou svítivost povrchu stropu, protože je osvětlený shora a byl by jinak příliš tmavý.

Abychom vytvořený strop viděli, stačí jen abychom změnili znaménko souřadnice Y kamery na -18 a znaménko rotace podle osy X na -1. Při spuštění bychom měli vidět strop, který je podobný zrcadlově otočené podlaze.

Při vytváření stěn budeme testovat sousední políčka. Nejedná-li se o prázné (průchozí) políčko, vytvoříme před sebou zeď. Texturu nastavíme podle obsahu políčka. Pro zeď 1 zvolíme větev jinak proveď příkazy, která zahrne nejen políčko pro zeď 1, ale také okraj plochy. Zeď otočíme správným směrem podle aktuálního směru otočení Petra a posuneme na správnou pozici, opět výpočtem ze souřadnic Petra a směru otočení. Nastavením souřadnice Y na 0.5 zajistíme správnou výšku zdi nad zemí. U 3D objektů se souřadnice nastavují pro střed objektu. Podlaha má Y souřadnici 0, strop 1 a proto zeď bude mít 0.5. Na závěr nastavíme viditelnost pro obě strany stěny - to je jen pro ladicí účely, až bludiště vyzkoušíme, tak příkaz opět zrušíme.

Po spuštění by měly být vidět zdi kolem cest. Nezapomeňte ale ještě nejdříve vrátit kameru na kladnou souřadnici Y (18) a rotaci X na 1.

A po zrušení příkazu providitelnost obou stran vidíme pouze správné strany zdí.

.... pokračování příště


 

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 390x (1.17 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)

 

Všechny články v sekci
3D grafika
Článek pro vás napsal Panda38
Avatar
Uživatelské hodnocení:
1 hlasů
Programátor C++, WinAPI, ASM.
Aktivity