Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Juraj
Založen: 06. 12. 2007 Příspěvky: 189
|
Zaslal: 24. únor 2008, 19:49:35 Předmět: Animace 3D modelu |
|
|
Tak jak začít. Pracuji v DirectX, už zdatně načítám 3D modely ze souboru *.x a pohybuji s nimy. Ale nějak nemůžu přijít na kloub animacím. Problém je že já ani nevím co hledat, vůbec totiž netuším jak se animace provede. Jde mi např o chodícího člověka, nějaký takový model jsem našel v DiectX SDK, když ho však otevřu v DirectX, model simuluje pohyb chůze. Ale když ho otevřu já, jen stojí s rozpoaženýma rukama. Z toho vyplívá moje hlavní otázka, informaci o animaci nese už přímo model (u mě soubor *.x), nebo se animování modelů dělá za pomocí nějakých funkcí?? Popř jak se animuje něco v praxi, zda je lepší pouze vykreslovat již vytvořený model s animací, nebo pouze modela a animovat si ho pomocí nějakých funkcí.. |
|
Návrat nahoru |
|
|
nou
Založen: 28. 07. 2007 Příspěvky: 1047
|
Zaslal: 24. únor 2008, 19:58:37 Předmět: |
|
|
mekni na moj tutorial http://www.ceske-hry.cz/forum/viewtopic.php?t=236 je sice na iny format ale to je celkom jedno. len neviem ci X nepouziva vertex animation namiseto kostrovej. _________________ Najjednoduchšie chyby sa najtažšie hľadajú. |
|
Návrat nahoru |
|
|
Juraj
Založen: 06. 12. 2007 Příspěvky: 189
|
Zaslal: 24. únor 2008, 20:16:23 Předmět: |
|
|
Tak zřejmě soubor *.x obsahuje informace přímo informace o animaci. Jen nějak nevím jak ji zobrazit, nebo jaké funkce k ní přistupují..
ps: už pročítám tvůj tutoriál |
|
Návrat nahoru |
|
|
Augi
Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 24. únor 2008, 20:27:08 Předmět: |
|
|
Ty informace jsou uloženy v .X souboru. Aby jsi načetl soubor i s animacema (skeletálníma), musíš použít místo klasického D3DXLoadMeshFromX funkci D3DXLoadMeshHierarchyFromX. Už jsem to implementoval před nějakým časem, ale nebyl to úplně triviální úkol a musel jsem si implementovat nějaký další podpůrný třídy, které implementovali nějaký specifický rozhraní (obsahuje metody pro vytváření framů apod.). Určitě se podívej na zdrojáky příkladu "Skinned Mesh" z DX SDK - já jsem z toho vycházel a tak po týdnu jsem měl funkční verzi. Kromě přístupu k animacím Ti načítání pomocí D3DXLoadMeshHierarchyFromX umožní také přístup k kompletní struktuře meshe, jak to vytvořil grafik v nějakém tom jeho 3D studiu apod. Funkce D3DXLoadMeshFromX to totiž všechno mergne dohromady podle materiálu. |
|
Návrat nahoru |
|
|
Juraj
Založen: 06. 12. 2007 Příspěvky: 189
|
Zaslal: 24. únor 2008, 20:33:44 Předmět: |
|
|
Augi napsal: |
Ty informace jsou uloženy v .X souboru. Aby jsi načetl soubor i s animacema (skeletálníma), musíš použít místo klasického D3DXLoadMeshFromX funkci D3DXLoadMeshHierarchyFromX. Už jsem to implementoval před nějakým časem, ale nebyl to úplně triviální úkol a musel jsem si implementovat nějaký další podpůrný třídy, které implementovali nějaký specifický rozhraní (obsahuje metody pro vytváření framů apod.). Určitě se podívej na zdrojáky příkladu "Skinned Mesh" z DX SDK - já jsem z toho vycházel a tak po týdnu jsem měl funkční verzi. Kromě přístupu k animacím Ti načítání pomocí D3DXLoadMeshHierarchyFromX umožní také přístup k kompletní struktuře meshe, jak to vytvořil grafik v nějakém tom jeho 3D studiu apod. Funkce D3DXLoadMeshFromX to totiž všechno mergne dohromady podle materiálu. |
Díky podívám se na to a začnu si s tím hrát . A když se vytváří nějaký engine, používá se to přesně tak, že se vetšinou používají již animované modely, nebo se spíše pomocí té kostry animuje model přímo enginem? |
|
Návrat nahoru |
|
|
nou
Založen: 28. 07. 2007 Příspěvky: 1047
|
Zaslal: 24. únor 2008, 21:38:39 Předmět: |
|
|
dnes sa uz animuje pomocou kostry priamo v engine. volakedy sa pouzivala vertexova animacia kde boli ulozene pozicie vsetkych vertexov pre kazde policko animacie. a medzi nimi sa interpolovalo. dnes sa pouziva takmer vyhradne kostrova animacia. _________________ Najjednoduchšie chyby sa najtažšie hľadajú. |
|
Návrat nahoru |
|
|
Augi
Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 24. únor 2008, 21:48:39 Předmět: |
|
|
Juraj napsal: |
A když se vytváří nějaký engine, používá se to přesně tak, že se vetšinou používají již animované modely, nebo se spíše pomocí té kostry animuje model přímo enginem? |
Nedokážu říct, jak se to běžně dělá, ale já bych se pravděpodobně (záleží na druhu hry) vydal cestou, kdy grafik připraví animace a engine se postará o vhodné spouštění, převíjení apod. animací. |
|
Návrat nahoru |
|
|
Juraj
Založen: 06. 12. 2007 Příspěvky: 189
|
Zaslal: 24. únor 2008, 21:52:56 Předmět: |
|
|
Augi napsal: |
Juraj napsal: |
A když se vytváří nějaký engine, používá se to přesně tak, že se vetšinou používají již animované modely, nebo se spíše pomocí té kostry animuje model přímo enginem? |
Nedokážu říct, jak se to běžně dělá, ale já bych se pravděpodobně (záleží na druhu hry) vydal cestou, kdy grafik připraví animace a engine se postará o vhodné spouštění, převíjení apod. animací. |
A co se týká kostrové animace, je na to soubor *.x také připraven, myslím zda v sobě také má ty potřebné údaje? |
|
Návrat nahoru |
|
|
Augi
Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 24. únor 2008, 21:57:19 Předmět: |
|
|
Imho má. |
|
Návrat nahoru |
|
|
franz
Založen: 30. 07. 2007 Příspěvky: 1325
|
Zaslal: 24. únor 2008, 22:30:11 Předmět: |
|
|
Juraj napsal: |
...že se vetšinou používají již animované modely, nebo se spíše pomocí té kostry animuje model přímo enginem? |
Kombinovaně, máš uloženou například animaci běhu (nohou) a těla a do toho enginem otáčíš hlavu a zbraň podle toho, kam se model dívá nebo kterým směrem střílí. Dobře se to dá nastudovat třeba v Quake3
Ale mnohdy stačí mít rovnou animované celé modely a enginem jen střídat animace. |
|
Návrat nahoru |
|
|
am!go
Založen: 19. 08. 2007 Příspěvky: 61 Bydliště: Praha
|
Zaslal: 25. únor 2008, 08:47:32 Předmět: |
|
|
Nejsem si jistej, jestli jsou samply v dx sdk to nejlepsi pro zacinajici lidi. Zkus tutorial na tyhle strance, je k tomu i nejaka dokumentace http://www.moon-labs.com/ml_resources.htm . Jeste bych chtel podotkonout, ze dneska nema cenu nic jinyho, nez resit skinning pres vertex shader. |
|
Návrat nahoru |
|
|
Juraj
Založen: 06. 12. 2007 Příspěvky: 189
|
Zaslal: 27. únor 2008, 17:19:08 Předmět: |
|
|
am!go napsal: |
Nejsem si jistej, jestli jsou samply v dx sdk to nejlepsi pro zacinajici lidi. Zkus tutorial na tyhle strance, je k tomu i nejaka dokumentace http://www.moon-labs.com/ml_resources.htm . Jeste bych chtel podotkonout, ze dneska nema cenu nic jinyho, nez resit skinning pres vertex shader. |
Za ten tutorial díky, zatím vypadá jako dobře.
ps: Můžeš mi osvětlit co znamená že se vše řeší přez vertex shader? Nejsme si jist zda si to dobře vykládám... |
|
Návrat nahoru |
|
|
am!go
Založen: 19. 08. 2007 Příspěvky: 61 Bydliště: Praha
|
Zaslal: 27. únor 2008, 18:23:21 Předmět: |
|
|
No tak budu vychazet z toho, ze vis, co to vertex shader je. Ty mas u animovanyho modely nejaky kosti a informace o tom, kterej vertex modelu se ke ktery kosti vztahuje. Z kosti mas slozenou nejakou kostru, ktera se samozrejme neustale meni a ty podle toho musis prepocitavat pozice jednotlivejch vertexu modelu. To muzes udelat budto tak, ze pokazdy zamknes vertex buffer, prepises vsechny vertexy, odemknes vertex buffer (je to pomaly, protoze vypocty bezi na CPU a brzdi to GPU) a nebo pozice tech vertexu menis ve vertex shaderu. |
|
Návrat nahoru |
|
|
Juraj
Založen: 06. 12. 2007 Příspěvky: 189
|
Zaslal: 27. únor 2008, 21:27:59 Předmět: |
|
|
Tak abych nezakládal další topick, píšu to sem..
Snažím se načítat model pomocí metody LoadHierarchyFromFile, na netu jsem zjistil že napřed si musím nadefinovat a naplnit proměnou typu AllocateHierarchy. Ale ani za nic se mi ji nedaří naplnit..
Dim alloHie As AllocateHierarchy
alloHie.CreateFrame("frame")
dám sen jen tuto část, i takto mi to spadne na chybu, nevíte co s tím?? Myslím si že bych ji napřed měl nějak předdefinovat, ale new na ni použít nejde tak už opravdu nevím.. |
|
Návrat nahoru |
|
|
Augi
Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 27. únor 2008, 22:01:49 Předmět: |
|
|
Na ten sample v DirectX jsi se díval? Jakou chybu ti to hází? Není to náhodou NullReferenceException? A četl jsi vůbec dokumentaci? Ta mluví jasně ohledně toho parametru: Pointer to an ID3DXAllocateHierarchy interface. Tzn., že vytvoříš instanci třídy, která implementuje rozhraní ID3DXAllocateHierarchy a předáš ji jako parametr. Na té instanci nic nevoláš. |
|
Návrat nahoru |
|
|
|