Пример #1
0
//--------------------------------------------------------------
// 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 );
}
Пример #2
0
/*
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);
	}
}