Ура, свершилось! Идея с добавлением вершин осталась старая. Просто я нашел таки способ их добавить. Он, конечно же, оказался прост и очевиден. Нужно было создавать
PlaneGeometry с большим количеством сегментов. На эту мысль меня натолкнул
пример здесь, там где идет описание примитива
Plane. На демке с этой страницы можно видеть как строится примитив из треугольников.
Следующей задачей было выяснить как эти точки группируются в векторе
vertexData. Группируются так (пример квадрата 50x50 с segV = 2 и segH = 2):

Для большего количества сегментов группировка точек будет аналогична.
Получается чтобы превратить квадратную плоскость в правильный многоугольник нужно сдвинуть крайние точки квадрата на красную окружность. Чем и занимается следующая функция:

Код AS3:
/**
* Функция меняет значения x, y, z в векторе v для крайних точек
* плоскости. Предусловием является то, что созданная PlaneGeometry
* должна быть вписана в круг радиуса r. Также количество сегментов
* по вертикали должно совпадать с количеством сегментов по горизонтали.
* @param v
* @param r
*/
private function convertPlaneToCircle( v:Vector.<Number>, r:Number ):void
{
// Выясняем количество сегментов.
var segCount:int = Math.sqrt(v.length / 13) - 1;
// Изобразим картинку для segCount = 3
// 12 13 14 15
// o----o----o----o
// | | | |
// 8 o----o----o----o 11
// | | | |
// 4 o----o----o----o 7
// | | | |
// o----o----o----o
// 0 1 2 3
// То есть нужно изменить положение точек с обозначенными
// индексами. Помним, что по предусловию точки 0, 3, 12 и 15
// (для данного случая) лежат на окружности радиуса r.
// Остальным точкам нужно задать координаты таким образом, чтобы
// они стали вершинами правильного многоугольника.
// Сразу можно выяснить шаг угла.
var angleStep:Number = (90.0 / segCount) / DEG_IN_RAD;
var angle:Number = 0;
var pointsCount:int = v.length / 13;
for (var n:int = 0; n < pointsCount; ++n)
{
// Нас интересуют точки нижнего ряда
if (n > 0 && n < segCount)
{
// Здесь начинается с угловой координаты -3 * pi / 4
// и идет в сторону увеличения
angle = ( -3 * Math.PI / 4) + n * angleStep;
// Ставим x
v[ n * 13 ] = Math.cos(angle) * r;
// Ставим y
v[ n * 13 + 1 ] = Math.sin(angle) * r;
}
// Еще нас интересуют точки верхнего ряда
else if (n > (segCount * (segCount + 1)) && n < pointsCount - 1)
{
// Здесь начинается с угловой координаты 3 * pi / 4
// и идет в сторону уменьшения
angle = ( 3 * Math.PI / 4) - n * angleStep;
v[ n * 13 ] = Math.cos(angle) * r;
v[ n * 13 + 1 ] = Math.sin(angle) * r;
}
// Еще нас интересует левая сторона
else if ((n % (segCount + 1)) == 0 && n > 0 && n < (segCount * (segCount + 1)))
{
// Здесь начинается с угловой координаты -3 * pi / 4
// и идет в сторону уменьшения
angle = ( -3 * Math.PI / 4) - int(n / (segCount + 1)) * angleStep;
v[ n * 13 ] = Math.cos(angle) * r;
v[ n * 13 + 1 ] = Math.sin(angle) * r;
}
// Еще нас интересует правая сторона
else if ((n % (segCount + 1)) == segCount && n > segCount && n < pointsCount - 1)
{
// Здесь начинается с угловой координаты -pi / 4
// и идет в сторону увеличения
angle = ( -Math.PI / 4) + int(n / (segCount + 1)) * angleStep;
v[ n * 13 ] = Math.cos(angle) * r;
v[ n * 13 + 1 ] = Math.sin(angle) * r;
}
}
}
Стоит отметить, что я мог что-то напутать с расположением точек и знаю, что данная функция работает для количества сегментов равных 3 и 7. Меня цифра 7 удовлетворила вполне, поэтому дальше я не стал разбираться. Полагаю, можно допилить до работы с любым количеством сегментов.
Так вот, в общем мы просто меняем координаты точек и радуемся результату:
Еще раз спасибо товарищам
Asfel и
vorodis2 