mirror of
https://github.com/UberGames/lilium-voyager.git
synced 2024-11-10 14:41:42 +00:00
* Fixes to MDR implementation from Thilo Schulz
This commit is contained in:
parent
2b75754cdb
commit
a235245e35
1 changed files with 13 additions and 19 deletions
|
@ -660,19 +660,20 @@ static qboolean R_LoadMDR( model_t *mod, void *buffer, int filesize, const char
|
||||||
curtri++;
|
curtri++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// tri and curtri now point to the end of their surfaces.
|
// tri now points to the end of the surface.
|
||||||
surf->ofsEnd = (byte *) tri - (byte *) surf;
|
surf->ofsEnd = (byte *) tri - (byte *) surf;
|
||||||
|
|
||||||
// find the next surface
|
|
||||||
surf = (mdrSurface_t *) tri;
|
surf = (mdrSurface_t *) tri;
|
||||||
cursurf = (mdrSurface_t *) curtri;
|
|
||||||
|
// find the next surface.
|
||||||
|
cursurf = (mdrSurface_t *) ((byte *) cursurf + LittleLong(cursurf->ofsEnd));
|
||||||
}
|
}
|
||||||
|
|
||||||
// surf points to the next lod now.
|
// surf points to the next lod now.
|
||||||
lod->ofsEnd = (int)((byte *) surf - (byte *) lod);
|
lod->ofsEnd = (int)((byte *) surf - (byte *) lod);
|
||||||
|
|
||||||
lod = (mdrLOD_t *) surf;
|
lod = (mdrLOD_t *) surf;
|
||||||
curlod = (mdrLOD_t *) cursurf;
|
|
||||||
|
// find the next LOD.
|
||||||
|
curlod = (mdrLOD_t *)((byte *) curlod + LittleLong(curlod->ofsEnd));
|
||||||
}
|
}
|
||||||
|
|
||||||
// lod points to the first tag now, so update the offset too.
|
// lod points to the first tag now, so update the offset too.
|
||||||
|
@ -958,7 +959,7 @@ static md3Tag_t *R_GetTag( md3Header_t *mod, int frame, const char *tagName ) {
|
||||||
#ifdef RAVENMD4
|
#ifdef RAVENMD4
|
||||||
void R_GetAnimTag( mdrHeader_t *mod, int framenum, const char *tagName, md3Tag_t * dest)
|
void R_GetAnimTag( mdrHeader_t *mod, int framenum, const char *tagName, md3Tag_t * dest)
|
||||||
{
|
{
|
||||||
int i;
|
int i, j, k;
|
||||||
int frameSize;
|
int frameSize;
|
||||||
mdrFrame_t *frame;
|
mdrFrame_t *frame;
|
||||||
mdrTag_t *tag;
|
mdrTag_t *tag;
|
||||||
|
@ -980,20 +981,13 @@ void R_GetAnimTag( mdrHeader_t *mod, int framenum, const char *tagName, md3Tag_t
|
||||||
//
|
//
|
||||||
frameSize = (long)( &((mdrFrame_t *)0)->bones[ mod->numBones ] );
|
frameSize = (long)( &((mdrFrame_t *)0)->bones[ mod->numBones ] );
|
||||||
frame = (mdrFrame_t *)((byte *)mod + mod->ofsFrames + framenum * frameSize );
|
frame = (mdrFrame_t *)((byte *)mod + mod->ofsFrames + framenum * frameSize );
|
||||||
#if 1
|
|
||||||
VectorCopy(&frame->bones[tag->boneIndex].matrix[0][0], dest->axis[0] );
|
for (j = 0; j < 3; j++)
|
||||||
VectorCopy(&frame->bones[tag->boneIndex].matrix[1][0], dest->axis[1] );
|
|
||||||
VectorCopy(&frame->bones[tag->boneIndex].matrix[2][0], dest->axis[2] );
|
|
||||||
#else
|
|
||||||
{
|
{
|
||||||
int j,k;
|
for (k = 0; k < 3; k++)
|
||||||
for (j=0;j<3;j++)
|
dest->axis[j][k]=frame->bones[tag->boneIndex].matrix[k][j];
|
||||||
{
|
|
||||||
for (k=0;k<3;k++)
|
|
||||||
dest->axis[j][k]=frame->bones[tag->boneIndex].matrix[k][j];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
dest->origin[0]=frame->bones[tag->boneIndex].matrix[0][3];
|
dest->origin[0]=frame->bones[tag->boneIndex].matrix[0][3];
|
||||||
dest->origin[1]=frame->bones[tag->boneIndex].matrix[1][3];
|
dest->origin[1]=frame->bones[tag->boneIndex].matrix[1][3];
|
||||||
dest->origin[2]=frame->bones[tag->boneIndex].matrix[2][3];
|
dest->origin[2]=frame->bones[tag->boneIndex].matrix[2][3];
|
||||||
|
|
Loading…
Reference in a new issue