fix model animation/looping glitches

turn backface culling on by default for models
This commit is contained in:
Chris Danford
2004-03-01 10:11:45 +00:00
parent 3b14d5b8a5
commit ed5e7b3e75
+11 -6
View File
@@ -29,6 +29,7 @@ Model::Model ()
{ {
m_bTextureWrapping = true; m_bTextureWrapping = true;
SetUseZBuffer( true ); SetUseZBuffer( true );
SetUseZBuffer( true );
m_pGeometry = NULL; m_pGeometry = NULL;
m_pCurAnimation = NULL; m_pCurAnimation = NULL;
m_bRevertToDefaultAnimation = false; m_bRevertToDefaultAnimation = false;
@@ -397,10 +398,13 @@ void Model::LoadMilkshapeAsciiBones( CString sAniName, CString sPath )
for ( i = 0; i < (int)Animation.Bones.size(); i++) for ( i = 0; i < (int)Animation.Bones.size(); i++)
{ {
msBone& Bone = Animation.Bones[i]; msBone& Bone = Animation.Bones[i];
for( int j=0; j<(int)Bone.PositionKeys.size(); j++ )
{ {
Animation.nTotalFrames = max( Animation.nTotalFrames, (int)Bone.PositionKeys[j].fTime+1 ); for( int j=0; j<(int)Bone.PositionKeys.size(); j++ )
Animation.nTotalFrames = max( Animation.nTotalFrames, (int)Bone.RotationKeys[j].fTime+1 ); Animation.nTotalFrames = max( Animation.nTotalFrames, (int)Bone.PositionKeys[j].fTime );
}
{
for( int j=0; j<(int)Bone.RotationKeys.size(); j++ )
Animation.nTotalFrames = max( Animation.nTotalFrames, (int)Bone.RotationKeys[j].fTime );
} }
} }
@@ -676,8 +680,10 @@ Model::AdvanceFrame (float dt)
return; // bail early return; // bail early
} }
LOG->Trace( "m_fCurrFrame = %f", m_fCurrFrame );
m_fCurrFrame += FRAMES_PER_SECOND * dt * m_fCurAnimationRate; m_fCurrFrame += FRAMES_PER_SECOND * dt * m_fCurAnimationRate;
if (m_fCurrFrame >= (float)m_pCurAnimation->nTotalFrames) if (m_fCurrFrame >= m_pCurAnimation->nTotalFrames)
{ {
if( m_bRevertToDefaultAnimation && m_sDefaultAnimation != "" ) if( m_bRevertToDefaultAnimation && m_sDefaultAnimation != "" )
{ {
@@ -687,11 +693,10 @@ Model::AdvanceFrame (float dt)
} }
else else
{ {
m_fCurrFrame = 0.0f; m_fCurrFrame -= m_pCurAnimation->nTotalFrames;
} }
} }
int nBoneCount = (int)m_pCurAnimation->Bones.size(); int nBoneCount = (int)m_pCurAnimation->Bones.size();
int i, j; int i, j;
for (i = 0; i < nBoneCount; i++) for (i = 0; i < nBoneCount; i++)