IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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 Minótaura (4. časť, streľba)

... pokračovanie z minulej lekcie

Prichádza akcie. Dáme hráči zbraň. Zvolíme Fazer, pretože ho môžeme odprevadiť zaujímavými efektmi.

Pripravíme si funkciu vytvorenie zbrane. Zavolajte ju počas inicializácia. Hráč nevidí zbraň celú, stačí vytvoriť hlaveň. Zložíme ju z jadra Fazer, akéhosi reaktora, čo bude zelene žiariace rúrka. Okolo jadra bude plášť. Oboje spojené do skupiny, aby sme mohli so zbraňou ľahko manipulovať.

Jadro vytvoríme ako valec bez podstáv. Zložitosť stačí pomerne nízka, 3. Výšku Y ponecháme 1, povrch nastavíme až u celej zostavy. Valec sklopíme okolo osi X dolu a tým ho položíme v smere od seba. Textúru použijeme podľa nasledujúceho obrázku (nájdete ju na konci kapitoly). Osvetlenie objektu vypneme, je to žiariace objekt a nechceme teda aby bol tieňovaný.

3D grafika
3D grafika

Plášť Fazer je tiež otexturovaný valec bez podstáv. Nastavíme mu kovový odlesk a obrysy, tým zprůhledníme otvory v plášti, aby bolo viditeľné jadro.

3D grafika
3D grafika

Jadro aj plášť Fazer spojíme do skupiny a celok pripojíme ku kamere, aby hráč zbraň videl stále pred sebou. Nastavíme veľkosť Fazer, nakloníme ho trochu hore a posunieme mierne nadol pod oči hráča. Zobrazenie zbrane je v skutočnosti veľmi nereálne. Keby sme sa pozreli na hráča zo strany, bola by to malá trubička tesne pred jeho očami. Ale to je v 3D grafike častý prípad, že sa veci klame aby nejako vyzerali a často vyzerajú lepšie ako keby sa zobrazili realisticky. K nereálnému meradle sme siahli preto, že hráča púšťame blízko steny a dlhšia zbraň by prenikala múrov.

3D grafika

Program spustite. Mali by ste vidieť hlaveň Fazer. Skúste sa otáčať, vidíte ako sa meni jej kovový lesk. Zbraň by nikde nemala vniknúť do steny.

3D grafika

Pre zvýšenie efektu budeme zbraň animovať. Založte funkciu animácie zbrane a volajte ju z hlavnej slučky programu. V obsluhe funkcie budeme náhodne rotovať jadro Fazer. Tým docielime efekt blikania povrchu. Fazer budeme posúvať do strán, vesměru X, a to podľa aktuálnych súradníc hráča. Dosiahneme tým efekt ako keď hráč svojou zbraní hojdá přichůzi. A ešte ju budeme ľahko nakláňať do strán.

3D grafika

Vyskúšajte funkčnosť. Prejdite sa a sledujte ako sa zbraň pohybuje s chôdzou. Je to pomerne zjednodušená metóda, rýchlosť húpanie je závislá na smere chôdze a pri jednom diagonálnom smere sa zbraň nehýbe vôbec. Ale hráči to pre dojem stačí, rovnako diagonálne chodby v našej hre nemáme. Dokonca táto nedokonalosť pridáva trochu realistické premenlivosti. (Žeby bol hráč smerom na severozápad unavenejší?)

Prejdeme na obsluhu striel. Vytvorte si zoznam striel. Maximálny počet striel stačí 10. Zoznam bude obsahovať číselné premenné ID strely, smer letu strely Y a čítač doletu strely. Neskôr ešte budeme potrebovať ID výbuchu a čítač doby výbuchu, môžete si ich tam pripraviť už vopred.

3D grafika

Strely vytvoríme vopred a budeme ich recyklovať. Vytvárať ich budeme vo funkcii vytvorení striel a výbuchov, ktorej volanie pridajte do inicializácia. Vo funkcii vytvoríme všetky strely ako 2D objekty s textúrou zobrazenú nižšie. Možno ste čakali priehľadný valec. Je to zas trochu oklamanie, aby sme si prácu zjednodušili. Priehľadná textúra zaistí rozmazané hrany strely. Pri rýchlosti strely hráč nespozoruje nesúlad, strelu nevidí nikdy zo strany. Strele nastavte výšku Y podľa konštanty výška strely nad zemou, ktorú v inicializácii nastavte na 0.4. Viditeľnosť vypnite, strely budú viditeľné len keď poletí.

3D grafika
3D grafika

Ak sa chcete pozrieť ako strela vyzerá a doladiť vzhľad, presuňte na chvíľu skupinu pre vytvorenie strely mimo cyklus, odstavte tlačidlom Vypnúť vypnutie viditeľnosti strely a pridajte nastavenie súradníc X a Z niekam blízko hráča, napr. 2 a 0.5. Program spustite a pozrite sa na strelu vedľa vás. Až ju doladíte, nezabudnite všetko vrátiť späť.

3D grafika

Do skupiny ovládanie hráčov v hlavnej slučke doplníme obsluhu začatí streľby. Potrebujeme k tomu premennú čítač času do ďalšieho výstrelu (pri štarte programu musí mať hodnotu 0, pretoe radšej inicializujte), konštantu doba medzi strelami, ktorú inicializujte na hodnotu 0.25 (čo znamená 4 výstrely za sekundu) a funkciu výstrel. Obsluha odpočíta končiaci k uvedenému dátumu čas od posledného výstrelu a ak dosiahol nuly a je stlačená strieľajúcej klávesa (zvolili sme medzerník a obe klávesy Ctrl), tak odštartuje nové počítadlo času a zavolá funkciu generujúce novú strelu.

3D grafika

Do obsluhy funkcie výstrel najskôr skusmo pridajte len príkaz pre prehratie zvuku výstrelu a vyskúšajte, či program reaguje správne na strieľajúcej klávesy opakovanými zvukmi výstrelu.

Pri začatí výstrele budeme prechádzať postupne všetky strely zoznamu a budeme hľadať, ktorá strela je voľná, to znamená ktorá má vypnutú viditeľnosť. Zoznam neprohledáváme od začiatku, ale odproměnné index minulé strely, v ktorej máme uchovaný index minule vygenerovanej strely. Je to z toho dôvodu, že ku každej strele patrí aj výbuch. Pri krátkej streľbe do blízkej steny by sa mohlo stať, že recyklujeme strelu ktorej výbuch ešte prebieha a mohla by ho novým výbuchom predčasne ukončiť. Ďalším dôvodom je zvuk výstrelu, mohol by sa predčasne ukončiť prebiehajúci zvuk predošlé strely.

3D grafika

Ak nie je strela viditeľná, je možné ju recyklovať. ID strely si uchováme doproměnné ID strely sa septembra, použijeme ju neskôr pri obsluhe žiara od strely. Prehráme zvuk výstrelu. Aby sa pri opakovaní výstrele nespúšťal a neprerušoval stále rovnaký zvuk, použijeme rozlišovaciu kód zvuku podľa indexu strely. Zapneme viditeľnosť strely a nastavíme ju na súradnici kamery. Z kamery si uchováme aktuálny smer otočenie Y, to bude smer letu strely. Čítač doletu strely nastavíme na hodnotu podľa konštanty vzdialenosť doletu strely, ktorú v inicializácii nastavte na hodnotu 5 (tj. Dolet strely je 5 políčok).

3D grafika

Ak teraz program vyskúšate, môžete vidieť, že pri cúvaní a súčasnej streľbe trousíte za sebou strely, až do počtu 10.

3D grafika

Ďalej sa budeme zaoberať funkcií obsluha striel a výbuchov. Jej volanie doplňte do hlavnej slučky programu.

Pridajte do programu konštantu rýchlosť letu strely, ktorú nastavte v inicializácii na hodnotu 5 (tj. 5 políčok za sekundu). Vo funkcii si pripravte miestnej premenné stará súradnice X strely, stará súradnice Z strely, nová súradnice X strely a nová súradnice Z strely. Dôvod ich použití bude zrejmý za chvíľu.

Obsluhu striel vykonávame postupne v cykle pre všetkých strely. Nie je potrebné inicializovať ukazovateľ v zozname, po prekročení konce sa previnie automaticky nazačátek.

3D grafika

Narazíme Ak na viditeľnú (to znamená letiaci) strelu, obslúžime ju. Uchováme si staré súradnice strely na neskôr a vypočítame a nastavíme nové súradnice podľa smeru letu strely. Odčítame urazený vzdialenosť od počítadla doletu strely a ak je hodnota čítača rovná alebo menšia 0, vypneme viditeľnosť strely a tým rokov strely ukončíme.

3D grafika

Program vyskúšajte. Mali by ste byť schopní strieľať strelami, strely v určitej vzdialenosti samé miznú. Vidíme pri tom, že sme zvolili príliš vysokú rýchlosť otáčania, zle sa s ňou zameriava. Znížime ju preto na 3.

3D grafika

Pridáme ku strele ďalší sprievodný efekt, žiaru. Žiara strely osvieti okolité prostredie. Použijeme na to objekt svetlo. Svetiel máme v 3D prostredí len obmedzený počet. Spravidla 8, v závislosti na grafickej karte. Preto si vystačíme iba s jednou septembra, ktorú použijeme vždy len pre najbližší strelu. Obmedzenie nie je príliš nápadné - pri opakovanej streľbe je najvýraznejší osvetlenie miesta blízko hráča a pri ukončení streľby je zrejmé plynutie žiara s poslednou strelou.

Vytvorenie žiara pridáme na koniec funkcie vytvorenie striel a výbuchov. Do premennej ID strely sa septembra si uchováme naposledy použitú ID strely (je jedno ktorá strela to je). To preto, že žiaru obsluhujeme podľa striel a tak aby sa žiara vypla hneď pri spustení programu. Žiaru vytvoríme ako objekt svetla. Farbu žiara sme zvolili zelenú, aby bola dobre kontrastné s okolitým prostredím. Typ svetla bodové - strela bude osvetľovať všetko okolo seba. Nastavením kvadratického zoslabenie na 0.5 dosiahneme to, že žiara bude dosahovať len do určitej vzdialenosti, len aby osvietila blízke steny.

3D grafika

Obsluhu žiara pridáme nakoniec funkcie obsluhastřel a výbuchov. Do miestnych premenných funkcie si pripravte logickú premennú žiara viditeľná. Ako si asi spomínate, pri aktivácii novej strely sme si uchovali ID najnovšie strely do premennej ID strely sa septembra. V obsluhe žiara si uchováme príznak viditeľnosti strely a jej súradnice X a Z, to všetko potom nastavíme do parametrov žiary. Tým sme zaistili, že žiara bude strelu sledovať a prípadne sa vypne, ak nebude mať o ňu žiadna strela už záujem.

3D grafika

Program spustite a žiaru vyskúšajte. Mala by sledovať naposledy vystrelenú strelu. Ale - priznajme si to - výsledok je dosť nevalný. Žiara osvetľuje iba strop a jednu stranu stien. Podlaha a steny na opačnej strane zostávajú bez zmeny. Je to z toho dôvodu, že po súčte hlavného osvetlenia a rozptýleného svetla sa na týchto stenách dosiahlo maximálneho osvitu. Preto sa na nich prídavné svetlo už nijako neprejaví.

3D grafika

Aby sme efektu žiara docielili, sme nútení znížiť celkový jas scény. To je tiež jeden z dôvodov, prečo je väčšina hier tmavo ladená - aby bola rezerva pre vytváranie svetelných efektov. Fakľa horiace blízkosti jasne biele steny by určite vyzerala nezaujímavo.

Na zníženie jasu prostredia si už vopred pripravíme novú funkciu, aktualizácie osvetlenie, ktorú využijeme neskôr. Pomocou osvetlenie budeme indikovať zranenia hráčov. Ak bude hráč zranený, začne vidieť červeno.

Pripravte číselnú premennú život hráčov (0 až 1), ktorú v inicializácii nastavte na 1 (teda maximálny život hráča). Pridajte volanie funkcie aktualizácie osvetlenia do hlavnej slučky. V obsluhe funkcie vyberieme ako aktívny objekt hlavné svetlo scény, ktoré má ID = 2. Farbu svetla nastavíme tak, že červená zložka bude neustále na maximálnej hodnote 0.5, zatiaľ čo zelená a modrá zložka bude klesať spolu s klesajúcim zdravím hráča. Podobne nastavíme aj rozptýlené svetlo, len intenzitu nastavíme nižšia, na 0.3. V inicializácii programu môžete zrušiť príkaz pre nastavenie rozptýleného svetla, ktorý sme tam predtým dali.

3D grafika

Teraz už vyzerajú svetelné efekty zaujímavejšie. Tmavšie vzhľad scény nemusí byť problém. Scéna sa zdá byť tmavá len v oknovém režime, kedy je okno obklopené svetlou plochou Windows. V celoobrazovkovom režime vyzerá hra podstatne lepšie.

3D grafika

.... pokračovanie nabudúce


 

Stiahnuť

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

Stiahnuté 192x (931.69 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Petr Lite (sú obsiahnuté v EXE súbore, ktorý možno v programe priamo otvoriť)

 

Všetky články v sekcii
3D grafika
Článok pre vás napísal Panda38
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Programátor C++, WinAPI, ASM.
Aktivity