Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Multianimacion [DirectX]

Iniciado por kbks, 12 de Febrero de 2010, 02:29:59 PM

« anterior - próximo »

kbks

Hola, estoy desarrollando un pequeño motor gráfico como PFC y en estos momentos estoy enfrascado con la maldita animación por bones de los archivos .x. La cosa es que no quiero hacerlo en la GPU, y según tengo entendido lo único que necesito hacer es crear una copia de la jerarquía, clonar el AnimationController y enlazarle al clon de este último la copia de la jerarquía. El caso es que todo esto lo hago sin problemas y, en principio, todo esta bien, pero al crear varias instancias resulta que todas ellas reproducen la misma animación.

Ya he revisado los puntos donde yo creo que podría estar el fallo y me he asegurado de estar dibujando la copia local de la jerarquía de cada instancia y de utilizar siempre el controlador de animación clonado para cada instancia. ¿Me estoy saltando algo? ¿A alguien se le ocurre que es lo que podría estar haciendo mal?

kbks

Solucionado. El método de clonación de la jerarquía tenía un error muy gordo.

[EX3]

Detalla el como lo has solucionado (o enlaza a la web que lo muestre) para que si alguien le ocurre lo mismo pueda solucionarlo en su proyecto :)

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

kbks

La verdad es que tienes razón, aunque el problema al final fue un problema de punteros por utilizar código de terceros sin mirar en profundidad lo que hacía.

Basé el sistema de animación en este artículo de Gamedev:  http://www.gamedev.net/reference/articles/article2079.asp que utiliza la siguiente estructura para el Mesh Container:


typedef struct _D3DXMESHCONTAINER_DERIVED: public D3DXMESHCONTAINER
{
//Mesh variables
    LPDIRECT3DTEXTURE9*  ppTextures; // Textures of the mesh
D3DMATERIAL9* pMaterials9; // Use the DirectX 9 Material type

//Skinned mesh variables
LPD3DXMESH           pSkinMesh; // The skin mesh
LPD3DXMATRIX pBoneOffsets; // The bone matrix Offsets
LPD3DXMATRIX* ppFrameMatrices; // Pointer to the Frame Matrix

// Attribute table stuff
LPD3DXATTRIBUTERANGE pAttributeTable; // The attribute table
    DWORD                NumAttributeGroups;// The number of attribute groups

}MESHCONTAINER, *LPMESHCONTAINER;


Tonto de mí que no me percaté del LPD3DXMATRIX* ppFrameMatrices al utilizar un método genérico encontrado en internet para clonar la jerarquía, así que simplemente clonaba el puntero al array de matrices. Es decir, que simplemente creando un nuevo array de matrices de la misma longitud que el número de bones en el método de clonación ya esta arreglado.

fiknius

Ese documento es cojonudo, en mi caso me toco pasarlo a C# pero funciona bastante bien y encima apenas baja el framerate, si te interesa hacerlo con Shaders creo que tengo por ahi algun articulo que lo explica, yo todavia no lo he probado (falta de tiempo) pero tiene muy buena pinta.

Saludos.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.