Dokumentace knihovny modelů
Čas poslední aktualizace 28. Jan 2012 09:30:PMÚvod
Knihovna 3D modelu se skeletalni animaci. Vsechno vykreslovaní používá OpenGL Pracuje s knihovnou Cal3D, ktera se stara o vsechny vypocty behem animace. Cal3D ale neimplementuje zadne vykreslovani, protoze se snazi byt nezavisla na grafickem API, proto bylo nutne vytvorit vlastni vykreslovani. Tato operace byla prevzata z ukazkoveho programu, ktery prezentuje knihovnu Cal3D. Ve vysledku to probiha tak, ze Cal3D vygeneruje pixely, normaly a texturovaci souradnice do pole, ktere se pomoci vertex arrays pote vykresli. Krome vykreslovani je zde podle vzoroveho prikladu i nacitani modelu. Hlavni funkci teto knihovny je ale sdileni modelu i kdyz jen v omezene mire. Pro kazdy model existuje tzv. CoreModel, ktery obsahuje staticke informace o modelu. Prave tento objekt je v knihovne vzdy pouze jeden pro kazdy pouzivany model. Z neho se pak vytvareji konkretni instance, jez uz nelze sdilet, protoze je kazdy naprosto jiny dle prave provadene animace. I tak se ale usetri hodne pameti kvuli texturam, ktere se nactou vzdy jen jednou. Knihovna umoznuje vkladat zaznamy (klice) modelu, vytvaret instance modelu, vykreslovat a samozrejme i mazat.
Krome modelu typu Cal3D umoznuje knihovna pracovat se statickymi modely typu MS3D (Milkshape 3D) a animovanymi typu *.mdl, ktery pouziva Half-life 1 + vsechny jeho modifikace. U obou typu je implementovana velice efektivni sdileni dat.
Soubory
Soubory knihovny modelů
- modelslib.cpp
- modelslib.h
- milkshapeModel.h
- milkshapeModel.cpp
- model.h
- model.cpp
- studio.h
- StudioModel.h
- studio_utils.cpp
- studio_render.cpp
- mathlib.h
- mathlib.cpp
Text
Závislosti
- queue
- iostream
- string
- map
- cal3d/cal3d.h
- textureslib.h
Obsah
- Vlastnosti
- Include
- Vytvoření konkrétního modelu
- Animace
- Vykreslování
- Uvolnění a modelu
- Vyprázdnění knihovny.
- Literatura
Vlastnosti
Jak už bylo napsáno v úvodu, tak tento modul umožňuje načítat modely, sdílet základní data a provádět animace a vykreslování.
Knihovna dokáže načítat formáty knihovny Cal3D, MS3D a Halflife mdl. Pro vytváření modelů cal3D je vhodné se podívat na stránky Cal3D , stáhnout si a prostudovat pluginy do 3D modelářů. Podporuje se 3D Studio max, maya, blender a Milkshape 3D. Pro správný export je nutné dodržovat několik kroků, které zde uvedu.
Include
Pro použití knihovny modelů ve vašem projektu je potřeba vložit hlavičkový soubor modelslib.h.
Modul je uložen ve jmenném prostoru, takže pro usnadnění práce můžeme použít:
Upozornění: V hlavičkovém souboru modelslib.h je definován adresář s modely, který je nastaven na "models/". Pokud chcete mít modely v jiné složce, tak hodnotu přepište.
Vytvoření konkrétního modelu
Když už máme model v databázi, tak vytvoření modelu je jednoduché:
if( !pModel )
chyba;
Pokud se model používá poprvé, tak se načte kostra modelu a dále i všechny animace, meshe a materiály, na které mohou být vázany textury, jež se načítají pomocí knihovny textur.
Funkce vrátí NULL v případě, že takový model neexistuje. Touto funkcí navíc říkáme prvku v databázi, že vznikl další uživatel tohoto modelu, protože kdyby byl už model jednou použit, tak by se data pouze zkopírovala z již načtených dat.
Pro model typu MS3D. Funkce zde vraci index display listu. Data modelu jsou hned po nacteni zkompilovana a pak smazana, protoze pro vykresleni staci mit zkompilovany display list. Funkce vrátí nulu pokud model neexistuje nebo nastala při načítání chyba.
if( !pModel )
chyba;
Poslední možností je model typu Half-life mdl. Pro použití tohoto modelu použijte následující kód:
if( !pModel )
chyba;
Upozornění: Pravděpodobně bude nutné ve vašem projektu provést u některých modelů určitou rotaci, aby byl model ve správné poloze při vykreslování.
Animace
Existují dva druhy animací (pouze pro Cal3D modely): Cyklická a jednorázová. Pro oba případy existují funkce:
pModel->setAnimation( 0, 0.3f, 0.3f );
První parametr je identifikační číslo animace. ID jsou vytvářena postupně při načítání animací ze souboru a zachovává se pořadí, což znamené, že animace, která se načetla jako první má ID rovno nule, druhá rovno jedné.
Druhý parametr je čas přechodu v sekundách.
Třetí parametr je blend a je to vlastnost chování animace.
pModel->executeAnimation( 0, 0.3f, 0.3f );
První parametr je stený jako u cyklické animace. Je to ID animace.
Druhý parametr je čas přechodu v sekundách na začátku animace.
Třetí parametr je čas přechodu v sekundách na konci animace.
Pro Half-Life mdl použijte následující kód. Tím se nastaví požadovaná animace. Stejně jako pro Cal3D, tak i zde je identifikační číslem animace její pořadí v konfiguraci modelu.
Aktualizace
Aby se animace prováděly, je nutné volat funkci pro aktualizaci dat (pro ms3d modely nemá smysl). Parametrem je zde uběhnutý čas od předchozí aktualizace v sekundách.
Vykreslování
Model vykreslíme jednodušše metodou:
Uvolnění a modelu
Pokud už model dále nechceme používat, zavoláme:
modelLibrary.unloadModel( "crystal.ms3d" );
modelLibrary.unloadModel( "v_mp5.mdl" );
Tím se sníží počet referencí jádra modelu o jedna. Pak můžeme zavolat funkci, která otestuje počet uživatelů každého modelu v databázi a pokud je hodnota rovna nule, tak smaže data modelu.
Smazání modelu
Nakonec pro smazání konkrétního modelu můžeme využít této funkce, která po smazání dat nastaví ukazatel na nulu.
Ms3d modely není potřeba manuálně mazat.
Vyprázdnění knihovny
Při ukončení programu je vhodné zavolat následující funkci, která smaže všechny data v knihovně.
Literatura
Pro pochopení některých funkcí je vhodné si přečíst vlastnosti knihovny v dokumentačním textu. Pro další informace je možné se přečíst články na ostatních odkazech.
Stránky projektu Cal3D
Vytváření modelů pro Cal3D
Kniha: Evan Pipho – Focus On 3D Models (Game Development)
Tutoriály pro tvorbu her a mimojiné popis md2 a md3.
Tutoriál o milkshape modelech
Knihovna animadead
Animace postav
Základní skeletální systém
Half-Life model viewer
Milkshape 3D