Проецирование трехмерных объектов в двухмерное пространство

Flash Player 10 и более поздних версий, Adobe AIR 1.5 и более поздних версий

Класс PerspectiveProjection в пакете flash.geom обеспечивает простой способ применения элементарной перспективы при перемещении объектов отображения в трехмерном пространстве.

Если для трехмерного пространства не создана явно перспективная проекция, трехмерный модуль использует объект PerspectiveProjection по умолчанию, находящийся в корневом объекте и передающийся всем его нижестоящим элементам.

Три свойства, определяющие способ отображения трехмерного пространства объектом PerspectiveProjection:

  • fieldOfView ;

  • projectionCenter ;

  • focalLength .

При изменении значения свойства fieldOfView автоматически изменяется значение свойства focalLength и наоборот, так как они являются взаимозависимыми.

Для вычисления значения focalLength при указанном значении fieldOfView используется следующая формула:

focalLength = stageWidth/2 * (cos(fieldOfView/2) / sin(fieldOfView/2)

Как правило, значение свойства fieldOfView изменяется явно.

Поле обзора

Посредством управления свойством fieldOfView класса PerspectiveProjection можно сделать приближающийся к пользователю трехмерный экранный объект зрительно больше, а удаляющийся — меньше.

Свойство fieldOfView указывает угол от 0 до 180 градусов, определяющий степень перспективной проекции. Чем больше значение, тем больше искажение, применяемое к экранному объекту, который перемещается по оси z. Использование низкого значения fieldOfView приводит к низкой степени масштабирования, и создается впечатление, что объекты лишь немного передвинулись назад. При использовании высокого значения fieldOfView искажение увеличивается, и создается впечатление, что объект передвинулся на большое расстояние. Использование максимального значения (179.9999 градусов) приводит к эффекту камеры с линзой типа «рыбий глаз». Максимальным значением fieldOfView является 179.9999..., а минимальным 0.00001... Только 0 и 180 являются допустимыми значениями.

Центр проекций

Свойство projectionCenter представляет точку схода в перспективной проекции. Оно применяется как сдвиг относительно точки регистрации по умолчанию (0,0), которая находится в верхнем левом углу рабочей области.

По мере отдаления объекта от пользователя, он смещается к точке схода и в конце концов исчезает. Представьте себе бесконечно длинный зал. Когда смотришь вглубь зала, вдалеке края стен сходятся в точке схода.

Если точка схода находится в центре рабочей области, зал исчезает в направлении точки в центре. По умолчанию свойство projectionCenter указывает центральную точку рабочей области. Например, если требуется, чтобы элементы отображались в левой части рабочей области, а трехмерная область – в правой части, требуется установить для свойства projectionCenter точку в правой части рабочей области, чтобы сделать ее точкой схода трехмерной области просмотра.

Фокусное расстояние

Свойство focalLength представляет расстояние между исходной точкой поля зрения (0,0,0) и местоположением экранного объекта на его оси z.

Большое фокусное расстояние создает эффект применения телеобъектива с узким видом и сжатым расстоянием между объектами. Маленькое фокусное расстояние создает эффект применения угловой линзы с широким видом и большим искажением. Среднее фокусное расстояние приблизительно соответствует тому, что видит человеческий глаз.

Как правило, значение focalLength вычисляется динамически несколько раз в течение преобразования перспективы при удалении объекта, но его также можно задать явно.

Значения по умолчанию для перспективной проекции

Объект PerspectiveProjection по умолчанию, созданный в корневом объекте, имеет следующие значения:

  • fieldOfView: 55

  • perspectiveCenter: stagewidth/2, stageHeight/2

  • focalLength: stageWidth/ 2 * ( cos(fieldOfView/2) / sin(fieldOfView/2) )

Эти значение используются, если не создается собственный объект PerspectiveProjection.

Для самостоятельного изменения свойств projectionCenter и fieldOfView можно создать экземпляр PerspectiveProjection. В данном случае вновь созданный объект имеет следующие значения по умолчанию, исходя из размера рабочей области по умолчанию 500х500:

  • fieldOfView: 55

  • perspectiveCenter: 250,250

  • focalLength: 480.24554443359375