Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

Metódy 3D grafiky (4. časť, kamera)

... pokračovanie z minulej lekcie

V závislosti na type programu môžeme voliť rôzne spôsoby pohľadu na scénu. Tu si rozoberieme niekoľko typických prípadov kamier.

1. Pohľad 1. osoby

Pri pohľade 1. osoby je kamera nastavená tak, aby svet videla očami postavy hráčov. U postavy mravca je animácia kamery jednoduchá - stačí neustále kameru nastavovať rovnako ako súradnicu a smer otočenie postavy hráčov. Musíme pritom zabezpečiť, aby kamera bola neustále nad terénom v takej výške, ako to zodpovedá postave hráčov (presnejšie výške očí hráča).

S výškou pohľadu nad terénom je spojený ešte efekt dojmu rozmeru priestoru (už sme sa o tom zmienili v lekciách k bludisku 3D). Čím je pozorovacia výška vyššia, tým sa okolitý priestor zdá menšie. Naopak obrovských rozmerov docielime tým, že výšku pohľadu položíme veľmi nízko. Je to dané skúsenosťami hráčov z reálneho sveta. Rozmery prostredie hodnotia podľa výšky svojho obvyklého pohľadu v reálnom svete, preto by mala výška pohľadu zodpovedať obvyklej výške priemerného človeka. Napríklad zvolíme ak takéto mierka sveta, kedy vzdialenosť 1 jednotka odpovedá rozmerom 1 meter a podľa toho budeme budovať aj rozmery objektov (napríklad stromček vysoký 3 jednotky, tj. 3 metre), potom by výška pohľadu mala byť okolo 1,7. Vyskytujú sa dokonca aj hry, kde hráč môže nastaviť svoju výšku v reálnom svete a podľa toho program prispôsobí výšku pohľadu, aby hráč videl meradlo 3D sveta v správnych proporciách tak, ako je zvyknutý z reálneho sveta.

Menšie komplikácie nás čakajú v prípade autá a lietadlá. V tom prípade musí kamera sledovať nielen pozíciu, otočenie a výšku dopravného prostriedku, ale aj jeho nakláňanie v smeroch X a Z. Aby sme mohli prenášať na kameru aj rotácie nakláňanie postavy, musíme v týchto prípadoch upravovať aj poradie rotáciou vykonávaných s kamerou.

3D grafika

2. Ostreľovač

Ostreľovač je zvláštne modifikáciou pohľadu 1. osoby. Vychádza zo základného nastavenia kamery 1. osoby s tým rozdielom, že cez obrazovku položí masku zameriavacieho kríža, čím jednak zúži pohľad hráča a jednak mu umožní presne zamerať cieľ. Premietacie rovinu od pozorovateľa oddiali a tým zväčší mierku zobrazenia (= zoom). Hráč môže posúvaním vzdialenosti premietacie roviny klávesmi Home a End meniť zväčšenie pohľadu, scénu si približuje a odďaľuje.

Krátke zastavenie nad použitím slov ostreľovač a ostreľovač. Slovo ostreľovať znamená, že nejaký objekt kropíme paľbou, teda neustále ostreľuje. Spravidla je to dlhá akcia a často bez valného výsledku. Kým ak niečo odstrelíte, spravidla to zprovodíme zo sveta. Môže to byť napríklad odstrel budovy, čo je jednorazová akcia. Preto je správny preklad slova sniper ako ostreľovač, pretože jeho úlohou je niekoho jednorázovo zniesť zo sveta, teda odstreliť, pokiaľ možno raz správne mierenou ranou. Nemá za úlohu kropiť nepriateľa opakovanú paľbou. Naopak, ak označíme ostreľovača slovom ostreľovač, môže sa uraziť, pretože ho označujeme za neúspešného kropiace.

3D grafika

3. Pohľad 3. osoby

Pri pohľade 3. osoby pozorujeme postavu hráča z pohľadu akoby nezúčastnené osoby, pozerajúc sa na scénu cez hráčovo rameno. Pri nastavení kamery použijeme súradnicu hráčov sa smerom otočenie a kameru posunieme o určitý úsek dozadu za neho. Výšku nad terénom spravidla nastavujeme o kúsok vyššie než je postava hráča, pretože inak by nám postava prekážala vo výhľade. V tomto móde kamera nesleduje nakláňanie postavy hráčov.

V móde 3. osoby sa môžu vyskytnúť niektoré úskalia. Menším úskalím je zneužívanie módu hráčom, ktorý si natáčaním môže zabezpečiť videnie za roh, bez toho je videný inými protihráčmi. Väčším úskalím je, že sa kamera za hráčom dostáva do miest, kam sa nemá dostávať - pod úroveň terénu, za budovy, či postavu strácame z dohľadu prekrytím iným objektom. Rozsiahlejšie hry to rieši tak, že prekrývajúce objekty (stromy) sprehľadní, aby bola postava hráča neustále viditeľná. Ak má sa kamera dostať za úroveň terénu, posunie sa do bezpečnej oblasti. Tieto opatrenia sú už príliš náročná a tak sa zvyčajne uspokojíme s kompromismi - napríklad pod terén podložíme veľkú plochu s farbou terénu, aby podhľad pod terénom nebol taký výrazný, a prekryv veľkými objekty riešime programovo - ak sa objaví kamera na zakázanom mieste, znížime vzdialenosť kamery k hráčovi alebo kameru zdvihneme.

3D grafika

4. Plávajúce kamera

Plávajúce kamera vychádza z pohľadu 3. osoby. Pohľad 3. osoby je vhodný pre rýchle akcie, ale v pomalšom móde môže pôsobiť zmätenie pohľadu, kamera sa chová príliš chaoticky a hráč môže strácať prehľad o hre. Na účely pomalších hier je vhodnejšie plávajúce kamera, ktorá tiež sleduje hráčov z pohľadu 3. osoby, ale s určitým oneskorením. Kamera sa akoby tiahne za hráčom a snaží sa neustále dostať na pozíciu zodpovedajúcu 3. osobe. To je vhodné napríklad pri ovládaní auta, pretože namiesto neustále sa zmietajúceho okolitého sveta pozorujeme ako sa auto natáča a zrýchľuje, čím získame presnejší cit pre jeho správanie a lepšie sa pritom orientujeme v prostredí.

Prechod z kamery pre 3. osobu na plávajúce kameru je pomerne jednoduchý. Namiesto toho, aby sme priamo nastavovali súradnice kamery, uložíme si údaje do premenných ako požadovaný koncový stav. Potom meníme vlastnosti kamery tak, že k aktuálnemu stavu pričítame rozdiel medzi požadovaným a souřasným stavom vynásobený konštantou rýchlosti reakcie kamery a uplynulým časom. Vďaka tomu sa kamera správa tak, že pri veľkom rozdiele vlastností sa na cieľovú pozíciu presúva najskôr rýchlo, ale akonáhle pozíciu už takmer dosahuje, rýchlosť presunu klesá.

Trochu náročnejšie je doťahovanie rotácia podľa osi Y. Uhol otočenia je cyklický, s hodnotami 0 až 360 °, preto nemôžeme zistiť rozdiel otočenie len ako jednoduchý rozdiel smerov. Po odpočítaní aktuálneho a koncového stavu musíme rozdiel najskôr normalizovať - posunúť uhol do rozmedzia hodnôt -180 ° až + 180 ° (pripočítaním alebo odčítaním 360 °). Až až potom môžeme smer dokorigovávat postupným pričítaním rozdielu.

3D grafika

5. Rámová kamera

Rámová kamera je pohľad na scénu zhora (presnejšie trochu zošikma) tak, aby postavu hráča udržiavala v určitých medziach, v pohľadovom ráme. V stredu pohľadu je určitá oblasť, v ktorej sa postava môže pohybovať voľne. Ak prekročí určité hranice, kamera sa začne posúvať spolu s postavou.

Mód je vhodný zvlášť v kombinácii s ovládaním myšou, kedy hráč klikaním do terénu určuje postave, kam sa má presunúť. Voľná oblasť v stredu rámu zaisťuje, aby sa kamera zbytočne neposúvala pri akomkoľvek pohybe postavy hráča, čo prispieva k udržaniu prehľadu o scéne. Na druhú stranu je potrebné ponechať primerane široké okraje rámu, aby hráč videl dostatočne ďaleko pred postavu a nevystavoval sa tak nejakému nebezpečenstvu útoku nepriateľov. Najvyššie umožňuje Ak program aj počas hry meniť mierka zobrazenia as ním aj šírku okrajov rámu (spravidla pri zmene mierky zostane veľkosť voľné oblasti nezmenená a mení sa len okraje).

Rámová kamera sa spravidla nenatáča do rôznych smerov, ale sleduje scénu vždy len z jedného smeru. Hráči to pomáha v orientácii v scéne, kedy vie ktorým smerom sa čo nachádza a ktorým smerom sa pohybuje. Ak program s týmto konstantím smerom počíta, nemusí to znamenať pre hráča žiadne obmedzenia, pretože nevhodné kombinácie pohľadov sa dajú ošetriť už v čase návrhu scény alebo neskôr programovo - napríklad aby sa hráč nedostal do skrytého miesta za budovu kde by sa mohol stratiť.

Sklon kamery v tomto móde býva pomerne zvislý, kedy nie je príliš veľký rozdiel meradlá v prednej a zadnej časti pohľadu. Preto stačí sledovať pozíciu hráča len ako obdĺžnikovú, s daným rozptylom v smere X a Z. Ak sa dostane postava mimo danej rozmedzí hraníc, súradnice kamery sa skorigujú tak, aby sa postava objavila opäť v povolených medziach.

3D grafika

6. Automatická kamera

Automatická kamera predstavuje sústavu statických kamier rozmiestnených po ploche terénu, ktoré sa automaticky prepínajú podľa pozície hráča. Tento mód je vhodný napríklad u pretekov áut, kedy nahrádza sledovanie závodu pevnými kamerami rozmiestnenými pozdĺž trate.

Hoci sa to môže spočiatku tak zdať, v skutočnosti nevytvárame viacerých objektov kamier. Objekt kamery môže byť vždy iba jeden. Jediné, čo pre viac kamier potrebujeme, je zoznam súradníc X a Z statických kamier. Zoznam zostavíme z prvku plochy, ktorý sme použili na generovanie terénu z plochy. Pomocou prepínača 1 si na mape vyznačíme miesta, kde sa budú kamery nachádzať. Pri štarte programu mapu prejdeme a kde nájdeme príznak kamery, súradnice kamery si uložíme do zoznamu statických kamier.

Počas obsluhy automatických kamier neustále opakovane prechádzame zoznam kamier a vyhľadávame kameru, ktorá je postave hráča najbližšie. Pritom pridávame určitý bonus kamere, ktorá je práve aktívna. To je z toho dôvodu, aby sa nám neprepínal kamera pri opakovanom prechádzaní cez určitú hranicu medzi kamerami. Prepnutie kamier je pre hráčov mätúce a preto ich treba minimalizovať a prepínať len v prípade nutnosti. Preto je vhodné udržať aktuálny kameru pokiaľ možno dlhšie.

Po nájdení najbližší kamery nastavíme súradnice objektu kamery na súradnice nájdenej statické kamery. Výšku kamery nastavíme podľa výšky terénu v mieste kamery.

Kamera musí samozrejme postavu hráča sledovať, tj, automaticky sa za ňou otáčať. Uhol natočenia kamery podľa osi Y zistíme z rozdielov súradníc postavy hráča a kamery. Využijeme na to prvok uhol bodu, s malou korekciou, pretože je orientovaný inak ako smer otáčania v 3D.

3D grafika

Pri výpočte sklonu kamery podľa osi X (tj. Uhol a na predošlom obrázku) poznáme absolútnu výšku kamery y, výšku postavy hráča nad terénom h (pre lietadlo si výšku uchovávame z obsluhy animácie lietadla, pre ostatných uvažujeme 0) a výšku terénu v mieste postavy hráča t. Z rozdielu výšok určitej výšky kamery nad rovinou hráča c. Z rozdielov súradníc postavy hráčov a kamery vypočítame vzdialenosť postavy od kamery d, môžeme k tomu využiť funkciu vzdialenosť bodu. Uhol sklonu a potom určíme zo vzniknutého pravouhlého trojuholníka pomocou funkcie uhol bodu.

3D grafika

7. Statická kamera

Statická kamera je len zjednodušeným prípadom automatických kamier. Ide o jedinú statickú kameru umiestnenú v strede scény, ktorá sleduje postavu hráčov podobne ako automatické kamery. Zjednodušením je to, že nemusíme prechádzať zoznam kamier a vyhľadávať najbližšie kameru, inak je obsluha pohľadu kamery rovnaká.

3D grafika

8. Prehľadová kamera

Posledným typom kamery je prehľadová kamera. Je to celkový pohľad na scénu zhora, ako na jednu veľkú mapu. Obsluha kamery je jednoduchá, potrebujeme ju iba umiestniť do správnej pozície a nastaviť jej vhodné merítko zväčšenia pohľadu.

U prehľadové kamery musíme zabezpečiť viditeľnosť celého terénu, aby nám časti terénu nezmizli napríklad kvôli obmedzenia vzdialenosti dohľadu alebo kvôli zakrytie hmlou. Preto pre tieto účely hmlu vypíname (rovnako ako oblohu) a vzdialenosť dohľadu máme prednastavenú dostatočne veľkú. Objekty v scéne by mali vedieť riešiť znižovanie viditeľnosti sa vzdialenosti - napríklad aby pri prehľadovom módu úplne zmizli, inak bude renderovanie pohľadu príliš časovo náročné.

U prehľadové kamery nepotrebujeme nutne vidieť priamo postavu hráča, ale potrebujeme vidieť, kde sa hráč nachádza. To zaistíme indikátorom. V našom progamy používame štvorcovú plochu o dostatočnej veľkosti, ktorá je umiestnená kúsok nad hráčom a priebežne jeho pozíciu sleduje (na snímke je to červený puntík vľavo hore).

3D grafika

.... pokračovanie nabudúce


 

Stiahnuť

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

Stiahnuté 181x (6.09 MB)
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