[gpg1권 조진현] 4.16~4.20 실시간 사실적 지형 + 프랙탈
TRANSCRIPT
Void FilterHeightBand( float* fpBand, int iStride, int iCount, float fFilter )
{
float v= fpBand[0];
int j = iStride;
int i;
//go through the height band and apply the erosion filter
for( i=0; i<iCount-1; i++ )
{
fpBand[j]= fFilter*v + ( 1-fFilter )*fpBand[j];
v = fpBand[j];
j+= iStride;
}
}
Void FilterHeightField( float* fpHeightData, float fFilter )
{
int i;
//erode left to right
for( i=0; i<m_iSize; i++ )
FilterHeightBand( &fpHeightData[m_iSize*i], 1, m_iSize, fFilter );
//erode right to left
for( i=0; i<m_iSize; i++ )
FilterHeightBand( &fpHeightData[m_iSize*i+m_iSize-1], -1, m_iSize, fFilter );
//erode top to bottom
for( i=0; i<m_iSize; i++ )
FilterHeightBand( &fpHeightData[i], m_iSize, m_iSize, fFilter);
//erode from bottom to top
for( i=0; i<m_iSize; i++ )
FilterHeightBand( &fpHeightData[m_iSize*(m_iSize-1)+i],
-m_iSize, m_iSize, fFilter );
}