Load bone names from IQM file if available
This commit is contained in:
parent
d224414eb1
commit
2adf5902f4
|
|
@ -4438,6 +4438,12 @@ static ModelAnimation *LoadModelAnimationsIQM(const char *fileName, unsigned int
|
||||||
unsigned int num_extensions, ofs_extensions;
|
unsigned int num_extensions, ofs_extensions;
|
||||||
} IQMHeader;
|
} IQMHeader;
|
||||||
|
|
||||||
|
typedef struct IQMJoint {
|
||||||
|
unsigned int name;
|
||||||
|
int parent;
|
||||||
|
float translate[3], rotate[4], scale[3];
|
||||||
|
} IQMJoint;
|
||||||
|
|
||||||
typedef struct IQMPose {
|
typedef struct IQMPose {
|
||||||
int parent;
|
int parent;
|
||||||
unsigned int mask;
|
unsigned int mask;
|
||||||
|
|
@ -4491,6 +4497,10 @@ static ModelAnimation *LoadModelAnimationsIQM(const char *fileName, unsigned int
|
||||||
//fread(framedata, iqmHeader->num_frames*iqmHeader->num_framechannels*sizeof(unsigned short), 1, iqmFile);
|
//fread(framedata, iqmHeader->num_frames*iqmHeader->num_framechannels*sizeof(unsigned short), 1, iqmFile);
|
||||||
memcpy(framedata, fileDataPtr + iqmHeader->ofs_frames, iqmHeader->num_frames*iqmHeader->num_framechannels*sizeof(unsigned short));
|
memcpy(framedata, fileDataPtr + iqmHeader->ofs_frames, iqmHeader->num_frames*iqmHeader->num_framechannels*sizeof(unsigned short));
|
||||||
|
|
||||||
|
// joints
|
||||||
|
IQMJoint* joints = RL_MALLOC(iqmHeader->num_joints * sizeof(IQMJoint));
|
||||||
|
memcpy(joints, fileDataPtr + iqmHeader->ofs_joints, iqmHeader->num_joints * sizeof(IQMJoint));
|
||||||
|
|
||||||
for (unsigned int a = 0; a < iqmHeader->num_anims; a++)
|
for (unsigned int a = 0; a < iqmHeader->num_anims; a++)
|
||||||
{
|
{
|
||||||
animations[a].frameCount = anim[a].num_frames;
|
animations[a].frameCount = anim[a].num_frames;
|
||||||
|
|
@ -4501,7 +4511,9 @@ static ModelAnimation *LoadModelAnimationsIQM(const char *fileName, unsigned int
|
||||||
|
|
||||||
for (unsigned int j = 0; j < iqmHeader->num_poses; j++)
|
for (unsigned int j = 0; j < iqmHeader->num_poses; j++)
|
||||||
{
|
{
|
||||||
strcpy(animations[a].bones[j].name, "ANIMJOINTNAME");
|
// If animations and skeleton are in the same file, copy bone names to anim
|
||||||
|
if(iqmHeader->num_joints > 0)
|
||||||
|
memcpy(animations[a].bones[j].name, fileDataPtr + iqmHeader->ofs_text + joints[j].name, BONE_NAME_LENGTH * sizeof(char));
|
||||||
animations[a].bones[j].parent = poses[j].parent;
|
animations[a].bones[j].parent = poses[j].parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -4615,6 +4627,7 @@ static ModelAnimation *LoadModelAnimationsIQM(const char *fileName, unsigned int
|
||||||
|
|
||||||
RL_FREE(fileData);
|
RL_FREE(fileData);
|
||||||
|
|
||||||
|
RL_FREE(joints);
|
||||||
RL_FREE(framedata);
|
RL_FREE(framedata);
|
||||||
RL_FREE(poses);
|
RL_FREE(poses);
|
||||||
RL_FREE(anim);
|
RL_FREE(anim);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user