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:
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.
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:
Código [Seleccionar]
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.