Dokumentace knihovny modelů

Čas poslední aktualizace 25. Sep 2016 01:29:AM

Ú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ů

Text

Závislosti

Obsah

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.

#include "modelslib.h"

Modul je uložen ve jmenném prostoru, takže pro usnadnění práce můžeme použít:

using namespace modelLib;

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é:

ModelElement *pModel = modelLibrary.applyCal3DModel( "hgun.conf" );
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.

ModelElement *pModel = modelLibrary.applyStaticMS3DModel( "crystal.ms3d" );
if( !pModel )
chyba;

Poslední možností je model typu Half-life mdl. Pro použití tohoto modelu použijte následující kód:

ModelElement *pModel = modelLibrary.applyHalfLifeMDL( "v_mp5.mdl" );
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:

//Cyklická animace
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.

//Jednorázová 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.

pModel->setSequence( 0 );

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.

pModel->update( 0.03f );

Vykreslování

Model vykreslíme jednodušše metodou:

pModel->draw();

Uvolnění a modelu

Pokud už model dále nechceme používat, zavoláme:

modelLibrary.unloadModel( "hgun.cfg" );
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.

modelLibrary.checkModelsUsage();

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.

modelLibrary.freeModelElement( pModel );

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ě.

modelLibrary.destroy();

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.

Dokumentační text knihovny modelů
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