Skip to content

Commit a879fef

Browse files
committed
.
1 parent e9c01a8 commit a879fef

File tree

3 files changed

+32
-5
lines changed

3 files changed

+32
-5
lines changed

src/engine/renderer/tr_animation.cpp

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1313,6 +1313,32 @@ static int IQMBuildSkeleton( refSkeleton_t *skel, skelAnimation_t *skelAnim,
13131313
return true;
13141314
}
13151315

1316+
void R_TransformSkeleton( refSkeleton_t* skel, const float scale ) {
1317+
skel->scale = scale;
1318+
1319+
switch ( skel->type ) {
1320+
case refSkeletonType_t::SK_INVALID:
1321+
case refSkeletonType_t::SK_ABSOLUTE:
1322+
return;
1323+
1324+
default:
1325+
break;
1326+
}
1327+
1328+
// calculate absolute transforms
1329+
for ( refBone_t* bone = &skel->bones[0]; bone < &skel->bones[skel->numBones]; bone++ ) {
1330+
if ( bone->parentIndex >= 0 ) {
1331+
refBone_t* parent;
1332+
1333+
parent = &skel->bones[bone->parentIndex];
1334+
1335+
TransCombine( &bone->t, &parent->t, &bone->t );
1336+
}
1337+
}
1338+
1339+
skel->type = refSkeletonType_t::SK_ABSOLUTE;
1340+
}
1341+
13161342
/*
13171343
==============
13181344
RE_BuildSkeleton

src/engine/renderer/tr_local.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3730,6 +3730,7 @@ inline bool checkGLErrors()
37303730
int RE_CheckSkeleton( refSkeleton_t *skel, qhandle_t hModel, qhandle_t hAnim );
37313731
int RE_BuildSkeleton( refSkeleton_t *skel, qhandle_t anim, int startFrame, int endFrame, float frac,
37323732
bool clearOrigin );
3733+
void R_TransformSkeleton( refSkeleton_t* skel, const float scale );
37333734
int RE_BlendSkeleton( refSkeleton_t *skel, const refSkeleton_t *blend, float frac );
37343735
int RE_AnimNumFrames( qhandle_t hAnim );
37353736
int RE_AnimFrameRate( qhandle_t hAnim );

src/engine/renderer/tr_main.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2095,8 +2095,7 @@ void R_AddEntitySurfaces()
20952095
}
20962096
else
20972097
{
2098-
switch ( tr.currentModel->type )
2099-
{
2098+
switch ( tr.currentModel->type ) {
21002099
case modtype_t::MOD_MESH:
21012100
R_AddMDVSurfaces( ent );
21022101
break;
@@ -2118,15 +2117,16 @@ void R_AddEntitySurfaces()
21182117
ent->e.lerp2, ent->e.clearOrigin2 );
21192118
RE_BlendSkeleton( &ent->e.skeleton, &skel, ent->e.blendLerp );
21202119
}
2121-
// ent->e.skeleton.type = refSkeletonType_t::SK_ABSOLUTE;
21222120
R_AddMD5Surfaces( ent );
21232121
break;
21242122

21252123
case modtype_t::MOD_IQM:
2124+
{
21262125
/* Log::Warn("%i %s: old: %i-%i %f new: %i-%i %f | %f %f", ent->e.animationHandle,
21272126
R_GetAnimationByHandle( ent->e.animationHandle )->name, ent->e.startFrame,
21282127
ent->e.endFrame, ent->e.lerp, ent->e.startFrame2, ent->e.endFrame2, ent->e.lerp2,
21292128
ent->e.blendLerp, ent->e.scale ); */
2129+
bool transform = true;
21302130
if ( ent->e.scale == 0 ) {
21312131
ent->e.scale = 1;
21322132
}
@@ -2136,16 +2136,16 @@ void R_AddEntitySurfaces()
21362136
ent->e.skeleton.scale = ent->e.scale;
21372137
RE_BuildSkeleton( &ent->e.skeleton, ent->e.animationHandle, ent->e.startFrame, ent->e.endFrame,
21382138
ent->e.lerp, ent->e.clearOrigin );
2139-
// ent->e.blendLerp = 1 - ent->e.blendLerp;
21402139
if ( ent->e.blendLerp > 0.0 || true ) {
21412140
refSkeleton_t skel;
21422141
RE_BuildSkeleton( &skel, ent->e.animationHandle2, ent->e.startFrame2, ent->e.endFrame2,
21432142
ent->e.lerp2, ent->e.clearOrigin2 );
21442143
RE_BlendSkeleton( &ent->e.skeleton, &skel, ent->e.blendLerp );
21452144
}
2146-
// ent->e.skeleton.type = refSkeletonType_t::SK_ABSOLUTE;
2145+
R_TransformSkeleton( &ent->e.skeleton, ent->e.scale );
21472146
R_AddIQMSurfaces( ent );
21482147
break;
2148+
}
21492149

21502150
case modtype_t::MOD_BSP:
21512151
R_AddBSPModelSurfaces( ent );

0 commit comments

Comments
 (0)