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

Lovíme Minótaura (2. časť, ovládanie)

... pokračovanie z minulej lekcie

Ponorte sa do sveta nášho 3D bludisko. Všetko, čo je k tomu potrebné urobiť, je upraviť nastavenie kamery. Vyberte si niektoré voľné políčko a nastavte súradnice kamery X a Z podľa jeho súradníc. Súradnicu Y nastavte na hodnotu 0.5 a prípadne ešte otočte kameru podľa osi Y. Súradnice kamery budeme často potrebovať a preto si ich uchovajte do premenných súradnice X kamery a súradnice Y kamery v skupine ovládanie, ktorú si pripravte v poli spoločných premenných.

3D grafika

Program spustite. Myslím, žebudete dojmom príjemne prekvapení.

3D grafika

Skúste si trochu pohrať so súradnicou Y. Všimnite si, ako výška nad zemou mení dojem rozmerov prostredia. Ak zmeníte výšku nad terénom na 0.1, získate dojem, že ste malá myška v obrovskej hale. Naopak výška 2 vytvorí dojem, že bludisko je domčekom pre Barbínky. Človek si prináša so sebou skúsenosti z reálneho sveta. Preto aj mierky objektov v scéne musí približne zodpovedať bežnej výške človeka.

Od dojmu veľkosti prostredie sa odvíjame rýchlosť pohybu. Ak máte dojem, že sa v 3D pohybujete príliš pomaly, zmeníte dojem znížením výšky nad terénom. Potom vyzerá prostredie väčšiu ai rýchlosť pohybu vyzerá väčší.

Pridáme ovládanie pohybu hráča. Najskôr otáčania, to je najjednoduchšie. Vytvorte si veskupině ovládanie podskupinu konštanty a pripravte si tam číselnú premennú rýchlosť otáčania. V inicializáciu programe ju nastavte na hodnotu 5. Obsahy premenných je možné nastavovať tiež priamo úpravou premenné, ale pre väčšiu názornosť tutoriálov to budeme robiť radšej príkazy počas inicializácia.

Do hlavnej slučky programu doplňte skupinu ovládanie hráča. Najskôr vybertekameru (ID = 1) ako aktívny objekt. Kamera je totiž očami hráča, preto ju budeme ovládať. Pri stlačení klávesy vľavo zmeníme rotáciu podľa osi Y o pripravenú konštantu rýchlosti otáčania. Mohli by sme to urobiť priamo pripočítaním / odpočítaním konštanty, rovnako ako u tutoriálu sa zemeguľou. Ale to má jednu nevýhodu - také animácie sú silne závislé na rýchlosti počítača. Preto máme k dispozícii jeden prvok, uplynulý čas. Prvok navracia čas (v sekundách), ktorý ubehol od doby posledného vykreslenie snímky 3D grafiky. Presnejšie, navracia čas, ktorý ubehol medzi poslednými dvoma obsluhami čakania. Pridáme Ak ako parameter prvku požadovanú rýchlosť, navráti sa končiaci k uvedenému dátumu ča svynásobený touto rýchlosťou. Nezabudnite, že počítame s desatinnými číslami. Uplynulý čas sa meria s presnosťou mikrosekúnd.

3D grafika

Obsluha otáčania vpravo je obdobná, iba má opačné znamienko. Program spustite a vyskúšajte otáčanie doľava a doprava.

Pohyb vpred a vzad bude trochu zložitejšie, vyžaduje už trochu matematiky. A tiež detekciu kolízií. Najskôr si pripravte konštantu rýchlosť vpred, ktorú nastavíte v inicializácii na hodnotu 2. Podobne konštanta rýchlosť vzad, nastavte ju na hodnotu - 1 (záporná hodnota, aby sme hodnotu pri pohybe nemuseli negovať). Spravidla pohyb vzad býva pomalší ako pohyb vpred.

3D grafika

Pre pohyb vpred a vzad použijeme spoločnú funkciu, nazveme ju pohyb vpred a vzad. Funkcia bude neskôr detekovať aj kolízii sestěnami bludisko as inými aktérmi hry. Bude mať jeden vstupný parameter, rýchlosť pohybu. Pripravíme si v nej dve miestne premenné, nová súradnice X a nová súradnice Z. Novú súradnicu X vypočítame ako násobok sínusu aktuálneho smeru otočenie Y s zrekonštruovanie minulých časema rýchlosťou pohybu, výsledok pripočítame k súradnici X. Obdobne vypočítame novú súradnicu Z, len použijeme cosinus a súradnicu Z. Vypočítané nové súradnice najskôr len jednoducho uložte do premenných súradnice X a Z kamery, neskôr doplníme detekciu kolízií. Na záver aktualizujte pozíciu kamery nastavením prvkov posun v smere X a posunve smeru Z.

3D grafika

Program spustite a vyskúšajte pohyb vpred i vzad pri rôznych smeroch natočenia. Pri zlom výpočte by sa vám mohlo stať, že sa jedným smerom pohybujete správne, ale v inom smere je pohyb opačný.

Teraz už si môžeme naše 3D prostredie pozrieť trochu dôkladnejšie zvnútra. A ako vidíme, nezvolili sme správne osvetlenie. Strop je príliš presvetlený a tmavé múry príliš tmavé. Napravíme to pridaním prvku rozptýlené svetlo zo skupiny grafika / 3Dgrafika / osvetlenie a nastavením svetlo šedej farby. Rozptýlené svetlo je všadeprítomné osvetlenie, nezávislé na zdroji svetla. Implicitne je to sivá farba s jasom 0.25. Zvýšením jasu přisvětlíme tmavé múru. Strop by bol aj pri tomto rozptýlenom svetle ešte tmavý, preto u neho ponecháme prvok svietivosti, ale znížime trochu spôsobovaný jas. Výsledok vyzerá už trochu lepšie.

3D grafika

Teraz nás čaká detekcia kolízií. Hráč samozrejme nemôže prechádzať cez steny. Detekcia kolízií býva často slabým miestom u mnohých hier. Jednou z chýb býva nedostatočná detekcia, kedy hra testuje budúci pozíciu pohybu iba v priamom smere a tak neodhalí prípad, keď hráč prechádza okolo rohu budovy a vidí dierou v stene dovnútra. Alebo sa dokonca o roh múru zasekne. Ďalšia hrubou chybou je nesúladom detekciou, kedy hra nechá hráča dostať sa do miesta, z ktorého sa nemôže pohnúť preč. A posledným prípadom, ktorý síce nie je priamo chybou, ale je pre hráča nepríjemný, je prípad, keď hráč prechádza okolo múru ao stenu sa zarazí, musí cúvnuť a držať sa od steny ďalej. Správne správanie je, aby hráč po prekážkach skĺzavali.

Prvou funkciou, ktorú budemek detekciu kolízií potrebovať, je test políčka na jednej súradnici. Funkcia dostane na vstupe súradnice X a Z a jej úlohou je zistiť, či příslušnépolíčko na tejto pozícii je priechodná. Príznak priechodnosti je vrátený na výstupe funkcie. Kvôli správnemu prevodu na celé čísla aj pre súradnice menšie ako 0 je pripočítaná ešte korekcia +1, ktorá je po orezanie desatinné časti opäť odpočítaná.

3D grafika

Z dôvodu princípu 3D grafiky sa objekty vykresľujú až od určitej minimálnej vzdialenosti. Preto nemôžeme hráči povoliť priblížiť sa až tesne k stene, inak by sa v stene objavila diera a hráč by videl srkze ňu. Pre tento účel si pripravíme ďalšie konštantu, odstup od steny hráča. Jej hodnotu nastavte v inicializácii na 0.3. Testy priechodnosti preto musíme robiť nepriamo testovaním určité súradnice, ale testovaním súradníc v určitom rozsahu.

Neskôr budeme testovať aj kolízii s ostatnými aktérmi hry, preto si pripravíme prázdnu funkciu testkolize s aktérmi. Bude mať vstupné premenné IDaktera dotazu, testovaná súradnice X a testovaná súradnice Z. Na výstupe bude navracať logický príznak súradnice je priechodná. Zatiaľ v obsahu funkcie len nastavíme návratovú hodnotu na áno.

3D grafika

Ďalšou funkciou bude test priechodnosti na jednej súradnici. Funkcia má podobný vstup a výstup ako predošlá funkcie, opäť súradnice X a Z a príznak priechodnosti danej súradnice. Funkciu použijeme k testu priechodnosti i pre ostatné aktéri hry (tj. I pre nepriateľov) a preto pridáme ďalšie 2 vstupné premenné, IDaktera a odstup od steny. Pomocou predchádzajúcej funkcie test políčka na jednej súradnici budeme testovať priechodnosť pozície v 4 bodoch, vzdialených od testované pozície o odstupod múru.

3D grafika

Body sú posunuté odtestované pozície v diagonálnych smeroch. Vzhľadom k tomu, že steny sú vždy väčšie ako šírka testovanej oblasti a sú orientované pravouhlo, sú týmto testom zabezpečené všetky prípady priblíženie sa k stene, vrátane rohov. Okrem testov políčok doplníme ešte test kolízie s ostatnými aktéroch hry.

3D grafika

Vrátime sa opäť k funkcii pohyb vpred a vzad. Novo vypočítané súradnice sme zatiaľ len uložili do aktuálnych súradníc. Oba príkazy teraz vezmeme a vložíme ich do podmienky testujúci, či je novo vypočítaná súradnice priechodná. Ako aktérov pritom zvolíme kameru, teda ID = 1. Pokiaľ nie je priechodná, otestujeme pozíciu s novou súradnicou Z a starú súradnicou X. V prípade priechodnosti nastavíme novú súradnicu Z, súradnicu X necháme pôvodné. Tým zabezpečíme skĺzavaniu po objekte vesměru Z. Obdobne zabezpečíme skĺzavaniu v smere X.

3D grafika

Program opäť vyskúšajte. Skúste si prehliadania bludiskom. Tentoraz by ste sa už nemali žiadnym spôsobom dostať za steny či do dier vestěnách a po stenách by ste mali plynule kĺzať.

.... pokračovanie nabudúce


 

Stiahnuť

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

Stiahnuté 258x (761.62 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