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

Ostatní jazyky Petr Lite 3D grafika 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ženo 382x (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)

 

  Aktivity (1)

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

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


 


Miniatura
Předchozí článek
Pozor, padá hvězda!
Miniatura
Všechny články v sekci
3D grafika

 

 

Komentáře

Avatar
Dr. Danger
Neregistrovaný
Avatar
Dr. Danger:

Mám problémy najít příkaz "stěna".
Prosím napište mi cestu k tomuto příkazu.

Děkuji předem

 
Odpovědět 30.4.2011 18:01
Avatar
sdraco
Tým ITnetwork
Avatar
Odpovídá na Dr. Danger
sdraco:

Grafika -> 3D grafika -> vytvořit -> stěna

Odpovědět 30.4.2011 18:08
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
(none)
Neregistrovaný
Avatar
(none):

Když spustím program,tak se mi nezobrazuje podlaha.
Nevíte čím to je?

 
Odpovědět 4.5.2011 19:40
Avatar
sdraco
Tým ITnetwork
Avatar
Odpovídá na (none)
sdraco:

Pokud jste soubor nijak needitoval a spouštíte ten přímo zde umístěný, tak by to mělo fungovat, teď jsem to zkoušel a všechno bylo OK. Pokud to nejde, tak máte pravděpodobně nějakou nekompatibilní grafickou kartu.

Odpovědět 4.5.2011 19:55
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
(none)
Neregistrovaný
Avatar
(none):

Je nutné,aby se mi příkaz "celoobrazovkový režim"
zobrazil jako nefunkční příkaz 8|?

 
Odpovědět 26.6.2011 16:27
Avatar
sdraco
Tým ITnetwork
Avatar
Odpovídá na (none)
sdraco:

Celoobrazovkový režim je plně funkční, pravděpodobně používáte nějakou starou verzi Petra, stáhněte si aktuální z webu Islandsoft.

Odpovědět 26.6.2011 19:48
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
(none)
Neregistrovaný
Avatar
(none):

Promiňte,asi jste mě špatně pochopil.Tady v ukázce
jak máme napsat tento program,je označen příkaz
"celoobrazovkový režim" jako nefunkční.Musí to tak
být i v mém programu????o_O

 
Odpovědět 1.7.2011 12:27
Avatar
sdraco
Tým ITnetwork
Avatar
Odpovídá na (none)
sdraco:

Jak je zde napsáno: "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". Jinak řečeno, že pokud program testujete, dělá se to lépe v oknovém režimu, protože je to rychlejší a nemůže se stát, že když něco špatně naprogramujete a hra spadne s chybou, tak že vám nezůstane přepnuté rozlišení. To samozřejmě neznamená, že ho v hotovém programu nemůžete zapnout nebo že se nemůžete podívat, jako to v celoobrazovkovém režimu vypadá.

Odpovědět 1.7.2011 13:57
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
(none)
Neregistrovaný
Avatar
(none):

Promiňte že vás ruším,ale teď vám popíšu svojí situaci:Napsal jsem všechny příkazy dobře(asi 2h.
jsem si to kontroloval),mám platnou grafickou kartu a zkusil jsem vše,co jste mi poradil.
Nevíte čím to je že mi to stále nejde.
Prosím pomozte,já už jsem vážně v koncích ;( .

 
Odpovědět  +1 11.7.2011 19:27
Avatar
Panda38
Redaktor
Avatar
Odpovídá na (none)
Panda38:

V příkladu je "celoobrazovkový režim" nefunkční, aby se snadno dělaly úpravy bez dlouhého čekání na přepnutí obrazovky. Pokud příkaz chcete aktivovat, vyberte ho kliknutím a stiskem tlačítka "Vypnout" (=písmenko F v rámečku) ho povolíte.

 
Odpovědět 12.7.2011 11:25
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.

Zobrazeno 10 zpráv z 10.