IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Tutoriál na tvorbu 3D strieľačiek 2 - Prevod do 3D

(Napísal Mark Overmars - (C) YoYo Games Ltd, pre devbook.cz preložil sdraco)

Toto je pravdepodobne najdôležitejšia časť. Tu totiž premeníme našu nudnú 2D hru na oveľa lepšie vyzerajúce (ale zatiaľ stále nudnú) trojrozmernú hru.

Náš objekt player sa stane tým najdôležitejším objektom. V jeho Create udalosti inicializujeme 3D mód pomocou nasledujúceho kusu kódu:

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

Prvý riadok naštartuje 3D mód. Druhý vypne vykresľovanie povrchu, ktorý nie je vidieť. To znamena, že objekty, ktoré leží za inými objektmi, nebudú vidieť. Toto je v 3D hrách bežné. Ďalší riadok hovorí, že nebudeme používať zdroje svetla. Ďalší riadok vypne culling. To je o niečo komplikovanejšia k pochopeniu. Keď vykresľujú polygón (mnohouholník) v priestore, má 2 strany. Keď je culling zapnutý, vykreslí sa len jedna strana (definovaná poradím vrcholov). Keď sa to používa opatrne, šetrí sa kresliace čas. Ale naše múry budú viditeľné z oboch strán, takže to nie je to, čo chceme. (V podstate nie je potrebná žiadna z týchto riadkov, pretože je to predvolené nastavenie, ale pridali sme ich sem, aby ste pochopili ich význam.) Nakoniec nastavíme interpoláciu textúr. Tá zaistí, že textúry vyzerajú z blízka lepšie. (Môžete to tiež nastaviť v Global game settings).

Aby sme si boli istí, že sa udalosti v objekte player vykonajú skôr, než v iných objektoch, dáme mu depth 100 (mali by ste si pamätať, že s objektmi je pracované podľa klesajúcej depth). Tiež vymažeme End step udalosť, ktorú sme pridali v našu 3D verzii k zisteniu smeru. Už to totiž nebudeme potrebovať a mohlo by to priniesť akurát problémy.

Ďalším krokom je, aby múry vyzerali dobre a boli správne vykreslené. Za týmto účelom budeme potrebovať nejaké textúry. Niektoré z nich vytvoril David Gurrea a môžete ich nájsť na http://www.davegh.com/vg/walls.htm. (Prosím, prečítajte si tu podmienky použitia. Kvôli nim nie sú textúry obsiahnuté v tomto tutoriálu. Mali by ste si ich stiahnuť sami.). Všetky je zmenšíme na veľkosť 128x128. Je veľmi dôležité, aby veľkosť textúr bola mocnina 2 (napr. 64x64, 128x128, 256x256), inak nebudú lícovať. Tu sú textúry steny, stropu a podlahy, ktoré sme v tutoriálu použili:

Textúry stien, stropov a podlahy - Game maker - 3D hry

Pridáme tieto obrázky ako pozadia. Aby každý objekt múry múr naozaj vykresľoval s touto textúrou z pozadia, potrebujeme poznať súradnice. Tie nastavíme v Create udalosti pre každý objekt múru (pretože budú pre každý iné). Napriklad pre horizontálne stenu vložíme do Create nasledujúci kód:

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

Posledný riadok potrebuje trochu vysvetliť. Funkcia background_get_tex­ture () vracia index textúry podľa zvoleného pozadia. Použijeme to neskôr, aby sme dostali textúru k vykreslenie múru. Podobný kus kódu vložíme do Create udalostí všetkých objektov múrov.

Samotné vykreslenie múru prebehne v udalosti Draw objekte obj_wall_basic. Tu pridáme akciu Code s nasledujúcim obsahom:

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

To vykreslí múr podľa hodnôt, ktoré sme nastavili v Create event. Posledné 2 parametre nastavujú, aby sa textúra opakovala len raz v oboch smeroch, takže pokryje celú stenu. Opakovanie textúr môže byť použité na veľké plochy.

Sme takmer hotoví. Stále potrebujeme naprogramovať, ako sa budeme na svet pozerať a tiež vykresliť strop a podlahu miestností. To urobíme v udalosti Draw objekte player. Tento objekt bude odteraz hrať úlohu kamery a pohybovať sa vo svete. Vložíme sem akciu Execute code s nasledujúcim obsahom:

{
  // 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);
}

Sú tu 3 časti. V prvej sa nastaví projekcie, cez ktorú sa budeme na miestnosť pozerať. Funkcia d3d_set_projection () vyžaduje ako prvý 3 parametre bod, z ktorého sa pozeráme, ďalšie 3 parametre bod, na ktorý sa pozeráme a posledné 3 parametre sú stúpajúce smer (môže byť použitý na otáčanie kamery). Pozeráme sa z pozície (x, y, 10), to je pozícia kamery, ale trochu vyššie do vzduchu. Bod, na ktorý sa pozeráme, vyzerá trochu komplikovane, ale v skutočnosti je to jednoducho bod, ktorý je jedno políčko pred nami. Nakoniec nastavíme, že stúpajúca smer je smer z (0, 0, 1).

Druhá časť jednoducho nastaví alpha na 1, čo znamená, že sú všetky nepriehľadné. Tiež nastaví farbu na white. To je dôležité. Textúry sú obarvování aktuálne farbou. To je užitočná vlastnosť (môžete napr. Vykresliť červený strop nastavením červenej farby pred vykreslením stropu). Ale väčšinu času budete zafarbovať len bielou farbou. (Predvolené farba v Game Makeru je čierna, takže ak ju nezmeníte, celý svet bude čierny).

V tretej časti vykresľuje podlahu a strop (vo výške 32) s použitím správnych textúr. Ako vidíte, nastavili sme, aby sa textúra niekoľkokrát opakovala namiesto toho, aby sa roztiahla cez celý strop.

A to je všetko. Hru nájdete v súbore fps1.gmk nižšie k stiahnutiu. Môžete si ju spustiť a prejsť sa vo svete. Náhle naša hra vyzerá úplne inak, aj keď je vlastne stále dvojrozmerná. Iba grafika vyzerá 3D. Hra by mala vyzerať nejako takto:

Prvá 3D hra v Game Makeru - Game maker - 3D hry

 

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 1014x (83.05 kB)
Aplikácia je vrátane zdrojových kódov v jazyku GameMaker

 

Všetky články v sekcii
Game maker - 3D hry
Článok pre vás napísal David Hartinger
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David sa informačné technológie naučil na Unicorn University - prestížnej súkromnej vysokej škole IT a ekonómie.
Aktivity