Pár slov k tvorbě 3D enginu hry U Becherů - Fyzikální model
Pár slov k vývoji hry U Becherů Pokusím se vám popsat jednu fázi vývoje takové 3D hry. Jedná se o engine, jemuž jsem dal jméno 3D3 a dlouhou dobu byl vůbec nejlepší, který jsem kdy napsal (ne že by byl tolik dobrý, ale lepší jsem nenapsal:).
Nejprve pár slov ke vzniku:
Programoval jsem jej od začátku velkých prázdnin roku 2003 a v podstatě na konci srpna byly jeho hrubé obrysy hotovy. Poté jsem ještě dva měsíce modeloval mapu.
Zde popíši tvorbu snad nejdůležitější část: Fyzikální model
Nedílnou součástí každého 3D enginu je nějaký fyzikální model. V tomto případě nešlo o žádný složitý, stačilo vytvořit kolizní model (abychom nemohli procházet zdmi a spolu s gravitací se nepropadli podlahou). Takový model je samá analytická geometrie. Musí zvládnout jakousi kolizi s obecnými tvary (pro narážení do zdí), gravitaci (aby nás něco drželo při zemi), tření (aby to něco nás nechalo vyjít i do kopce a hlavně jsme i na sebemenší šikmině nesklouzávali) a volitelně i nějakou tu setrvačnost...
Nejprve začneme kolizemi
Bylo potřeba vytvořit dostatečný základ, v němž se budeme moci myší rozhlížet a pomocí kursových kláves i pohybovat. Gravitaci zatím nebudeme aplikovat, abychom mohli vyzkoušet všechny zdi spolu s jejich rohy. Máme-li toto hotovo, můžeme začít takový kolizní model tvořit.
Testovací mapy
Spolu s vývojem kolizního modelu je dobré si takové mapy modelovat. První byla pro testování běžných kolizí se zdí. Zde by stačila obyčejná kolize, jak jsme si ji popsali výše. Díky jejím vnitřním rohům v ní nejsou žádné vedlejší efekty, ale pro jakoukoliv hru je ve většině případů nepoužitelná. Musíme proto přidat ještě rohy vnější. Zde nám vyvstávají hned dva problémy. První z nich je jakým způsobem řešit vnější hrany. Musí se vytvořit ještě další kolizní model a to s válcem v prostoru. Poloměr takového válce je roven x a postupujeme téměř stejně jako v předchozím případě. Kameru odsouváme ve směru nejkratší úsečky od osy válce ke kameře .. Druhý případ tím ale vyřešen není. Jde o kolizi s rohy této kostky (viz obr). Zde nám nestačí rovina nad stranou, ani válec kolem hrany. Doděláme tedy ještě kolizi s koulí (poloměr opět x, kameru odsouváme od středu). Tím už náš kolizní model začíná být pro nějaké hry použitelný, nesměli bychom ale mít vnitřní úhly menší než 90 stupňů. V takovém případě si s obyčejným odsouváním od zdí nevystačíme, neboť bude kamera ve většině případů odsunuta příliš blízko ke zdi jiné. Tento problém jsem v enginu 3D3 rozumně nevyřešil a proto ani ve hře U Becherů na takové rohy nenarazíte (snad:))
Nyní si přidáme konečně gravitaci
a s ní dva nové objekty pro řešení. Nakloněná plocha a schody. Schody jsou v podstatě vyřešeny. Nejde o nic jiného než o vnitřní a vnější hrany. Jde jen o to je udělat tak vysoké a široké, aby po nich kamera neklouzala a zároveň abychom je vyšli.. S nakloněnou rovinou je problém o něco větší. Neměli bychom sklouzávat na malých sklonech, ale na velkých bychom se zase neměli udržet.. Vytvoříme proto tření. V tomto enginu jsem to řešil následovně. Při „pádu“ (pomocí gravitace) protneme rovinu vzdálenou x od země. Průsečík je bod A. Po sklouznutí (viz efekt klouzání - výše) dostaneme bod B. No a vektor od bodu B do bodu A je potom vektor působení tření. Dle potřeby si vektor zvětšíme/zmenšíme a kameru o výsledek posuneme zpět. Nakonec otestujeme např. zábradlí apod. Ale pokud jsme dobře napsali předchozí, neměly by vyvstat další chyby..
Nakonec ještě přikládám dva obrázky, dokumentujících přechod od verze při vývoji do finální.
| Jan Zelený | 21.3.2006 |
© 2008 Jan Zelený | monade.cz





