Tutoriál na tvorbu 3D stříleček 2 - Převod do 3D

Ostatní jazyky GameMaker 3D hry Tutoriál na tvorbu 3D stříleček 2 - Převod do 3D

(Napsal Mark Overmars - (C) YoYo Games Ltd, pro devbook.cz přeložil sdraco)

Toto je pravděpodobně nejdůležitější část. Zde totiž přeměníme naši nudnou 2D hru na o mnoho lépe vypadající (ale zatím stále nudnou) trojrozměrnou hru.

Náš objekt player se stane tím nejdůležitějším objektem. V jeho Create události inicializujeme 3D mód pomocí následujícího kusu kódu:

{
  d3d_start();
  d3d_set_hidden(true);
  d3d_set_lighting(false);
  d3d_set_culling(false);
  texture_set_interpolation(true);
}

První řádek nastartuje 3D mód. Druhý vypne vykreslování povrchu, který není vidět. To znamena, že objekty, které leží za jinými objekty, nebudou vidět. Toto je v 3D hrách běžné. Další řádek říká, že nebudeme používat zdroje světla. Další řádek vypne culling. To je o něco komplikovanější k pochopení. Když vykreslujeme polygon (mnohoúhelník) v prostoru, má 2 strany. Když je culling zapnutý, vykreslí se pouze jedna strana (definovaná pořadím vrcholů). Když se to používá opatrně, šetří se kreslící čas. Ale naše zdi budou viditelné z obou stran, takže to není to, co chceme. (V podstatě není potřeba žádná z těchto řádek, protože je to výchozí nastavení, ale přidali jsme je sem, abyste pochopili jejich význam.) Nakonec nastavíme interpolaci textur. Ta zajistí, že textury vypadají z blízka lépe. (Můžete to také nastavit v Global game settings).

Abychom si byli jistí, že se události v objektu player vykonají dříve, než v jiných objektech, dáme mu depth 100 (měli byste si pamatovat, že s objekty je pracováno podle snižující se depth). Také vymažeme End step událost, kterou jsme přidali v naši 3D verzi k zjištění směru. Už to totiž nebudeme potřebovat a mohlo by to přinést akorát problémy.

Dalším krokem je, aby zdi vypadaly dobře a byly správně vykresleny. Za tímto účelem budeme potřebovat nějaké textury. Některé z nich vytvořil David Gurrea a můžete je najít na http://www.davegh.com/vg/walls.htm . (Prosím, přečtěte si zde podmínky užití. Kvůli nim nejsou textury obsaženy v tomto tutoriálu. Měli byste si je stáhnout sami.). Všechny je zmenšíme na velikost 128x128. Je velmi důležité, aby velikost textur byla mocnina 2 (např. 64x64, 128x128, 256x256), jinak nebudou lícovat. Zde jsou textury zdi, stropu a podlahy, které jsme v tutoriálu použili:

Textury zdí, stropů a podlahy

Přidáme tyto obrázky jako background. Aby každý objekt zdi zeď opravdu vykresloval s touto texturou z pozadí, potřebujeme znát souřadnice. Ty nastavíme v Create události pro každý objekt zdi (protože budou pro každý jiné). Napřiklad pro horizontální zeď vložíme do Create následující kód:

{
  x1 = x-16;
  x2 = x+16;
  y1 = y;
  y2 = y;
  z1 = 32;
  z2 = 0;
  tex = background_get_texture(texture_wall);
}

Poslední řádek potřebuje trochu vysvětlit. Funkce background_get_tex­ture() vrací index textury podle zvoleného background. Použijeme to později, abychom dostali texturu k vykreslení zdi. Podobný kus kódu vložíme do Create událostí všech objektů zdí.

Samotné vykreslení zdi proběhne v události Draw objektu obj_wall_basic. Zde přidáme akci Code s následujícím obsahem:

{
  d3d_draw_wall(x1,y1,z1,x2,y2,z2,tex,1,1);
}

To vykreslí zeď podle hodnot, které jsme nastavili v Create event. Poslední 2 parametry nastavují, aby se textura opakovala pouze jednou v obou směrech, takže pokryje celou zeď. Opakování textur může být použito na velké plochy.

Jsme téměr hotoví. Stále potřebujeme naprogramovat, jak se budeme na svět dívat a také vykreslit strop a podlahu místností. To uděláme v události Draw objektu player. Tento objekt bude odteď hrát roli kamery a pohybovat se ve světě. Vložíme sem akci Execute code s následujícím obsahem:

{
  // set the projection
  d3d_set_projection(x,y,10, x+cos(direction*pi/180),
                             y-sin(direction*pi/180),10, 0,0,1);
  // set color and transparency
  draw_set_alpha(1);
draw_set_color(c_white);
  // draw floor and ceiling
  d3d_draw_floor(0,0,0,640,480,0,
                  background_get_texture(texture_floor),24,18);
  d3d_draw_floor(0,0,32,640,480,32,
                  background_get_texture(texture_ceiling),16,12);
}

Jsou zde 3 části. V první se nastaví projekce, přes kterou se budeme na místnost dívat. Funkce d3d_set_projec­tion() vyžaduje jako první 3 parametry bod, ze kterého se díváme, další 3 parametry bod, na který se díváme a poslední 3 parametry jsou stoupající směr (může být použit k otáčení kamery). Díváme se z pozice (x, y, 10), to je pozice kamery, ale trochu výše do vzduchu. Bod, na který se díváme, vypadá trochu komplikovaně, ale ve skutečnosti je to jednoduše bod, který je jedno políčko před námi. Nakonec nastavíme, že stoupající směr je směr z (0, 0, 1).

Druhá část jednoduše nastaví alpha na 1, což znamená, že jsou všechny neprůhledné. Také nastaví barvu na white. To je důležité. Textury jsou obarvovány aktuální barvou. To je užitečná vlastnost (můžete např. vykreslit červený strop nastavením červené barvy před vykreslením stropu). Ale většinu času budete obarvovat jen bílou barvou. (Výchozí barva v Game Makeru je černá, takže pokud ji nezměníte, celý svět bude černý).

V třetí části vykreslujeme podlahu a strop (ve výšce 32) s použitím správných textur. Jak vidíte, nastavili jsme, aby se textura několikrát opakovala místo toho, aby se roztáhla přes celý strop.

A to je vše. Hru naleznete v souboru fps1.gmk níže ke stažení. Můžete si ji spustit a projít se ve světě. Náhle naše hra vypadá úplně jinak, i když je vlastně stále dvourozměrná. Pouze grafika vypadá 3D. Hra by měla vypadat nějak takhle:

První 3D hra v Game Makeru

 

Stáhnout

Staženo 958x (83.05 kB)
Aplikace je včetně zdrojových kódů v jazyce GameMaker

 

  Aktivity (1)

Článek pro vás napsal David Čápka
Avatar
Autor pracuje jako softwarový architekt a pedagog na projektu ITnetwork.cz (a jeho zahraničních verzích). Velmi si váží svobody podnikání v naší zemi a věří, že když se člověk neštítí práce, tak dokáže úplně cokoli.
Unicorn College Autor se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.

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


 



 

 

Komentáře
Zobrazit starší komentáře (12)

Avatar
GLProgrammer
Člen
Avatar
GLProgrammer:

<muck>

 
Odpovědět 29.9.2013 12:54
Avatar
GLProgrammer
Člen
Avatar
GLProgrammer:

<muck>

 
Odpovědět 29.9.2013 12:54
Avatar
jan.sebek.honza:

problém_udělá to toto XD nevím co to je předem díky za odpověĎ

Editováno 3.3.2014 19:30
 
Odpovědět 3.3.2014 19:27
Avatar
jan.sebek.honza:

Mám problém místo 3d textur tam je jen na zdi a na zemi texture ale jsou tam ůplně všechy sprity co jsou v tom tutorialu prosím poraďtě :)8|

 
Odpovědět 3.3.2014 19:32
Avatar
jurka.stejskal:

Jak mám udlat vyšší strop?

 
Odpovědět 21.6.2014 22:34
Avatar
jurka.stejskal:

Jak mám udělat, aby se mi vzdálenější objekty nezatemňovali?

 
Odpovědět 1.7.2014 0:28
Avatar
Šimon Raichl
Redaktor
Avatar
Odpovídá na jurka.stejskal
Šimon Raichl:

Pokud máš zapnutej fog, tak ho vypni a vyšší strop? Zvětšíš hodnotu z

 
Odpovědět 15.8.2014 23:36
Avatar
Šimon Raichl
Redaktor
Avatar
Šimon Raichl:

Jo jinak díky za tenhle úvod, z toho se dá udělat něco jiného než střílečka :)

 
Odpovědět 15.8.2014 23:42
Avatar
urall
Člen
Avatar
urall:

Já Pavel Meszároš a moje hra Mao Ce Tung sem se snažíl převest mojí hru 2D Mao Ce Tunga do 3D a nešlo mi to převest Mao Ce Tunga do 3D ale nakonec sem si stahl hotovou 3D hru, a udělal sem hru já Pavel Meszároš sem udělal hru Mao Ce Tung 3D.

 
Odpovědět 23.9.2014 6:07
Avatar
Neaktivní uživatel:

já jsem se na to tak podíval,pak ještě jednou,potom ještě,pak jsem to opsal a když jsem se na to podíval potom opsání,došlo mi že to chápu jako bych to vymyslel sám.....Fuckin­gLogi....

mimochodem ta interpolace textur není úplně vhodné když to máš založený na PixelArtu

Editováno 13.6.2015 12:26
Odpovědět 13.6.2015 12:23
Neaktivní uživatelský účet
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 22. Zobrazit vše