mirror of
https://github.com/openmoh/openmohaa.git
synced 2025-04-28 21:57:57 +03:00
Added GetAngularDeltaOverTime() to return the animation's angular delta over time
This commit is contained in:
parent
41f7003747
commit
059dacf2a7
2 changed files with 45 additions and 4 deletions
|
@ -106,9 +106,9 @@ SkelVec3 skelAnimDataGameHeader_s::GetDeltaOverTime( float time1, float time2 )
|
|||
deltaWeight2 = time2 / frameTime;
|
||||
frameNum1 = ( int )( deltaWeight1 + 1.0 );
|
||||
frameNum2 = ( int )( deltaWeight2 + 1.0 );
|
||||
|
||||
d = frameNum1 - ( time1 / frameTime );
|
||||
s = 1.0 - ( frameNum2 - ( time2 / frameTime ) );
|
||||
|
||||
d = frameNum1 - deltaWeight1;
|
||||
s = 1.0 - (frameNum2 - deltaWeight2);
|
||||
|
||||
if( frameNum1 < frameNum2 )
|
||||
{
|
||||
|
@ -141,6 +141,46 @@ SkelVec3 skelAnimDataGameHeader_s::GetDeltaOverTime( float time1, float time2 )
|
|||
return delta;
|
||||
}
|
||||
|
||||
float skelAnimDataGameHeader_s::GetAngularDeltaOverTime(float time1, float time2)
|
||||
{
|
||||
float deltaWeight1;
|
||||
int frameNum1;
|
||||
float deltaWeight2;
|
||||
int frameNum2;
|
||||
float delta;
|
||||
int currFrame;
|
||||
float s, d;
|
||||
|
||||
deltaWeight1 = time1 / frameTime;
|
||||
deltaWeight2 = time2 / frameTime;
|
||||
frameNum1 = (int)(deltaWeight1 + 1.0);
|
||||
frameNum2 = (int)(deltaWeight2 + 1.0);
|
||||
|
||||
d = frameNum1 - deltaWeight1;
|
||||
s = 1.0 - (frameNum2 - deltaWeight2);
|
||||
|
||||
if (frameNum2 > frameNum1) {
|
||||
delta = m_frame[frameNum1 % numFrames].angleDelta;
|
||||
|
||||
for (currFrame = frameNum1 + 1; currFrame < frameNum2; currFrame++)
|
||||
{
|
||||
delta += m_frame[currFrame % numFrames].angleDelta;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
s = s - (1.0 - d);
|
||||
}
|
||||
|
||||
delta += m_frame[frameNum2 % numFrames].angleDelta * s;
|
||||
|
||||
if (delta > -0.001f && delta < 0.001f) {
|
||||
delta = 0;
|
||||
}
|
||||
|
||||
return delta;
|
||||
}
|
||||
|
||||
skelAnimDataGameHeader_t *skelAnimDataGameHeader_s::AllocAnimData( size_t numFrames, size_t numChannels )
|
||||
{
|
||||
skelAnimDataGameHeader_t *data;
|
||||
|
|
|
@ -99,7 +99,8 @@ typedef struct skelAnimDataGameHeader_s {
|
|||
|
||||
static skelAnimDataGameHeader_t *AllocRLEChannelData(size_t numChannels);
|
||||
int GetFrameNums( float timeSeconds, float timeTolerance, int *beforeFrame, int *afterFrame, float *beforeWeight, float *afterWeight );
|
||||
SkelVec3 GetDeltaOverTime( float, float );
|
||||
SkelVec3 GetDeltaOverTime( float time1, float time2 );
|
||||
float GetAngularDeltaOverTime( float time1, float time2 );
|
||||
static skelAnimDataGameHeader_t *AllocAnimData(size_t numFrames, size_t numChannels );
|
||||
static void DeallocAnimData( skelAnimDataGameHeader_t *data );
|
||||
} skelAnimDataGameHeader_t;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue