lerp in FastSin to fix shimmer in MusicWheel
This commit is contained in:
+25
-13
@@ -544,25 +544,37 @@ float RageFastSin( float x )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int i = (int)SCALE( x, 0.0f, PI*2, 0, ARRAYSIZE(table)*2 );
|
float fIndex = SCALE( x, 0.0f, PI*2, 0, ARRAYSIZE(table)*2 );
|
||||||
i %= ARRAYSIZE(table) * 2;
|
|
||||||
|
// lerp using samples from the table
|
||||||
|
int iSampleIndex[2] = { (int)floorf(fIndex), iSampleIndex[0]+1 };
|
||||||
|
float fRemainder = fIndex - iSampleIndex[0];
|
||||||
|
for( int i=0; i<ARRAYSIZE(iSampleIndex); i++ )
|
||||||
|
iSampleIndex[i] %= ARRAYSIZE(table) * 2;
|
||||||
|
|
||||||
DEBUG_ASSERT( i>=0 && i<ARRAYSIZE(table)*2 );
|
DEBUG_ASSERT( i>=0 && i<ARRAYSIZE(table)*2 );
|
||||||
|
DEBUG_ASSERT( fRemainder>=0 && fRemainder<=1 );
|
||||||
|
|
||||||
float fRet;
|
float fValue[ARRAYSIZE(iSampleIndex)];
|
||||||
if( i >= int(ARRAYSIZE(table)) ) // PI <= i < 2*PI
|
for( int i=0; i<ARRAYSIZE(iSampleIndex); i++ )
|
||||||
{
|
{
|
||||||
// sin(x) == -sin(2*PI-x)
|
int &iSample = iSampleIndex[i];
|
||||||
i = ARRAYSIZE(table)*2 - 1 - i; // mirror about ARRAYSIZE(table)
|
float &fVal = fValue[i];
|
||||||
DEBUG_ASSERT( i>=0 && i<ARRAYSIZE(table) );
|
|
||||||
fRet = -table[i];
|
if( iSample >= int(ARRAYSIZE(table)) ) // PI <= iSample < 2*PI
|
||||||
}
|
{
|
||||||
else
|
// sin(x) == -sin(2*PI-x)
|
||||||
{
|
iSample = ARRAYSIZE(table)*2 - 1 - iSample; // mirror about ARRAYSIZE(table)
|
||||||
fRet = table[i];
|
DEBUG_ASSERT( iSample>=0 && iSample<ARRAYSIZE(table) );
|
||||||
|
fVal = -table[iSample];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fVal = table[iSample];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return fRet;
|
return SCALE( fRemainder, 0.0f, 1.0f, fValue[0], fValue[1] );
|
||||||
}
|
}
|
||||||
|
|
||||||
float RageFastCos( float x )
|
float RageFastCos( float x )
|
||||||
|
|||||||
Reference in New Issue
Block a user