Эффект трехмерности
Функция Math.atan() преобразует линию в угол в радианах. Необходимо указать значение разницы между начальной и конечной точками линии по вертикали, разделенное на значение этой же разницы по горизонтали. Например, если значения координат начальной и конечной точек линии соответственно равны (200, 200) и (275, 250), то,. чтобы получить угол, необходимо записать Math, atan (75/50). Результатом будет значение.9828 радиан, что составляет примерно 56 градусов. В действительности функция Math.atan () немного сложнее, однако данный пример позволит вам создать общее представление о ней.
Опишем каждый шаг вышеприведенного кода:
- Задаются координаты х, у и z объекта.
- Вычисляется расстояние на плоскости ху от центра координат до проекции объекта на плоскость.
- Определяется угол на плоскости ху.
- Значение угла увеличивается на величину поворота объекта.
- Задаются новые координаты х, у и z с учетом изменения угла.
- Задается расстояние от центра координат до объекта на плоскости yz.
- Определяется угол на плоскости yz.
- Задается наклон плоскости.
- Задаются новые координаты х, у и z с учетом наклона.
- Центр новых координат имеет значение 0. Для корректировки к ним прибавляется действительное значение центра экрана (в данном случае (275, 200)).
- Теперь координаты х и у могут использоваться для отображает объекта на экране. С помощью координаты z можно также снизить яркость объектов, которые должны казаться расположенными дальше от пользователя.
Функция plotPoint преобразует точки с трехмерными координатами в точки с двумерными координатами при помощи ортогональной проекции. Это означает, что перспектива здесь не используется, и объекты находящиеся на дальнем плане, не уменьшаются. Это подходит для моделирования небольших объектов и специальных эффектов, но не годится для создания больших трехмерных сцен.
Углы куба
Теперь приступим к созданию восьми вершин куба. Данные о каждой вершине будем хранить в объекте со свойствами х, у и z. Весь список объектов хранится в массиве.
// Создаем массив из 8 точек для вершин куба,
function
makePoints() {
points
=
new
Array();
points[
0
]
=
{
x:
30
,
y:
30
,
z:
30
};
points[
1
]
=
{
x:
-
30
,
y:
30
,
z:
30
};
points[
2
]
=
{
x:
-
30
,
y:
-
30
,
z:
30
};
points[
3
]
=
{
x:
30
,
y:
-
30
,
z:
30
};
points[
4
]
=
{
x:
30
,
y:
-
30
,
z:
-
30
};
points[
5
]
=
{
x:
30
,
y:
30
,
z:
-
30
};
points[
6
]
=
{
x:
-
30
,
y:
30
,
z:
-
30
};
points[
7
]
=
{
x:
-
30
,
y:
-
30
,
z:
-
30
};
// Создаем восемь клипов для вершин куба,
for
(i
=
0
; i)
attachMovie(
"point"
,
"point"
+
i, i)
}
Данная функция создает восемь клипов из эталона, хранящегося в библиотеке. Имя каждого клипа состоит из слова "point" и числа от 0 до 7. Число соответствует точке массива, которую представляет клип.
Команда attachMovie создает новый клип из эталона, хранящегося в библиотеке. Однако для того, чтобы его можно было воспроизвести во Flash player или на Web-странице, необходимо назначить ему свойство Export for ActionScript. Это можно сделать, выбрав команду Options › Linkage в окне Library. Вы также должны назначить клипу идентификатор. В данном случае назовем его "point".
Кроме точек и функции, преобразующей их координаты в экранное представление, необходимо ввести небольшую функцию, которая бы соединяла линиями полученные точки. Помимо параметров_х и_у каждой точки клипа, задается также параметр _alpha, описывающий уменьшение яркости точек по мере их удаления вглубь экрана.
// Устанавливаем координаты точек и их яркость на экране,
function
drawPoints() {
for
(i
=
0
; i)
loc
=
plotPoint(points[i]);
this
[
"point"
+
i]._x
=
loc.x;
this
[
"point"
+
i]._y
=
loc.y;
this
[
"point"
+
i]._alpha
=
loc.z
+
100
;
}
Все вышеупомянутые функции должны помешаться в главную временную шкалу. Следующие строки вводят модель и подготавливают переменную rotation.
// Вызываем функцию инициализации и останавливаем
// воспроизведение ролика в этом кадре,
rotation
=
0
;
makePoints();
stop();