//-------------------------------------------------------------- // Name: CTERRAIN::FilterHeightfTempBuffer - private // Description: Apply the erosion filter to an entire buffer // of height values // Arguments: -fpHeightData: the height values to be filtered // -fFilter: the filter strength // Return Value: None //-------------------------------------------------------------- void CTERRAIN::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 ); }
/* Erosion filter - Erodes a terrain in all 4 directions */ void FilterHeightField(float* field,int size,float filter) { int i; /* Erode rows left to right */ for (i=0;i<size;i++) { FilterHeightBand(&field[size*i],1,size,filter); } /* Erode rows right to left */ for (i=0;i<size;i++) { FilterHeightBand(&field[size*i+size-1],-1,size,filter); } /* Erode columns top to bottom */ for (i=0;i<size;i++) { FilterHeightBand(&field[i],size,size,filter); } /* Erode columns bottom to top */ for (i=0;i<size;i++) { FilterHeightBand(&field[size*(size-1)+i],-size,size,filter); } }