for ( unsigned int i = 0; i < m_vertices.size(); i++ ) { Vector3<float> position = m_vertices[ i ]; float x2 = position.GetX() * position.GetX(); float y2 = position.GetY() * position.GetY(); float z2 = position.GetZ() * position.GetZ(); float dx = position.GetX() * sqrtf( 1.0f - ( y2 * 0.5f ) - ( z2 * 0.5f ) + ( ( y2 * z2 ) / 3.0f ) ); float dy = position.GetY() * sqrtf( 1.0f - ( z2 * 0.5f ) - ( x2 * 0.5f ) + ( ( z2 * x2 ) / 3.0f ) ); float dz = position.GetZ() * sqrtf( 1.0f - ( x2 * 0.5f ) - ( y2 * 0.5f ) + ( ( x2 * y2 ) / 3.0f ) ); m_normals[ i ] = Vector3<float>( dx, dy, dz ).Normalized(); m_vertices[ i ] = m_normals[ i ] * pRadius; }