Перспектива: представление параллельных линий сходящимися в точке схода, чтобы создать иллюзию глубины и расстояния.
flash.geom.PerspectiveProjection - управляет параметрами для преобразования трехмерной геометрии в двухмерный вид.
Класс PerspectiveProjection в пакете flash.geom обеспечивает простой способ применения элементарной перспективы при перемещении экранных объектов в трехмерном пространстве.
Способ отображения трехмерного пространства объектом PerspectiveProjection определяется тремя свойствами:
• fieldOfView;
• projectionCenter;
• focalLength.
При изменении значения свойства fieldOfView автоматически изменяется значение свойства focalLength и наоборот, так как они являются взаимозависимыми.
Для вычисления значения focalLength при известном значении fieldOfView используется следующая формула:
Свойство fieldOfView указывает угол от 0 до 180 градусов, который определяет степень перспективной проекции. Чем больше значение, тем больше искажение, применяемое к экранному объекту, перемещающемуся по оси Z.
Свойство projectionCenter представляет точку схода в перспективной проекции. Оно применяется как сдвиг относительно точки регистрации по умолчанию (0,0), которая находится в верхнем левом углу рабочей области.
По мере отдаления объекта от пользователя, он наклоняется к точке схода и в конце концов исчезает.
По умолчанию свойство projectionCenter указывает центральную точку рабочей области
• Свойство focalLength представляет расстояние между исходной точкой поля зрения (0,0,0) и местоположением экранного объекта на его оси Z.
• Большое фокусное расстояние создает эффект применения телеобъектива с узким видом и сжатым расстоянием между объектами.
• Маленькое фокусное расстояние создает эффект применения угловой линзы с широким видом и большим искажением.
• Среднее фокусное расстояние приблизительно соответствует тому, что видит человеческий глаз.
Создание и примеры использования объектов Matrix3D
Класс Matrix3D позволяет преобразовывать трехмерные точки в рамках координатной плоскости или переносить трехмерные точки из одной координатной плоскости в другую.
Задав свойству z экранного объекта числовое значение, можно получить матрицу преобразования этого объекта, используя свойство Matrix3D его объекта Transform.
Например:
var leafMatrix:Matrix3D = this.transform.matrix3D;
С помощью методов объекта Matrix3D можно выполнять: перемещение, поворот, масштабирование и перспективную проекцию.
Три основных способа создания или извлечения объектов Matrix3D:
1) Использовать метод Matrix3D() - принимает объект Vector, содержащий 16 числовых значений, и помещает каждое из них в ячейку матрицы. Например:
var rotateMatrix:Matrix3D = new Matrix3D(1,0,0,1, 0,1,0,1, 0,0,1,1, 0,0,0,1);
2) Задать числовое значение для свойства z экранного объекта, а затем извлечь матрицу преобразования из свойства transform.matrix3D этого объекта.
3) Извлечь объект Matrix3D, управляющий отображением трехмерных объектов в рабочей области, получив значение свойства perspective Projection.matrix3D корневого экранного объекта.
Создание и примеры использования объектов Point, Rectangle, Matrix пакета flash.geom
flash.geom содержит классы, определяющие геометрические объекты, такие как точки, прямоугольники и матрицы преобразований. Эти классы используются для определения свойств объектов, которые применяются в других классах.
Все геометрические классы базируются на том, что положение объекта на экране представляется в двумерной плоскости. Каждый экранный объект, включая рабочую область, имеет свое собственное координатное пространство для размещения дочерних экранных объектов, рисунков и т. д
Для представления отдельных точек в координатном пространстве можно воспользоваться экземплярами класса Point.
Для представления прямоугольной области в координатном пространстве можно создать экземпляр класса Rectangle.
Для применения комплексных преобразований к экранному объекту можно использовать экземпляр класса Matrix. Такие преобразования как поворот, изменения положения и масштаба, могут применяться к экранному объекту непосредственно с использованием свойств этого объекта.
В классе Point для нахождения расстояния между двумя точками в координатном пространстве используется метод distance().Например, следующий код позволяет найти расстояние между точками регистрации двух экранных объектов circle1 и circle2, расположенных в одном контейнере:
import flash.geom.*;
var pt1:Point = new Point(circle1.x, circle1.y);
var pt2:Point = new Point(circle2.x, circle2.y);
var distance:Number = Point.distance(pt1, pt2);
Изменить положение объекта Rectangle, задав свойства x и y:
import flash.geom.Rectangle;
var x1:Number = 0;
var y1:Number = 0;
var width1:Number = 100;
var height1:Number = 50;
var rect1:Rectangle = new Rectangle(x1, y1, width1, height1);
Изменить свойства левой стороны left и верхнего края top:
rect1.right = 60;
rect1.bottom = 20;
Изменить положение с помощью метода offset():
rect1.offset(20, 30);
Изменить положение с помощью метода offset():
rect1.offset(20, 30);
Изменить положение с помощью метода inflate(), в котором используются два параметра, dx и dy - число пикселов, на которое отстоят соответствующие стороны прямоугольника от центра:
rect1.inflate(6,4);
Методы offsetPt() и inflatePt() работают аналогичным образом, за исключением того, что в нем в качестве параметра используется объект Point вместо значений смещения dx и dy.
Метод createBox() включает параметры, позволяющие задавать эффекты масштабирования, поворота и перемещения для матрицы. Например: