практическая база по применению Macromedia Flash flash.plux.ru
главная | исходники | обучение | actionscript.txt | форум | об авторе | каталог
:: обучение : 3d обучение: основы 3d преобразовавний в flash
автор: Grigory A. Ryabov
- загрузить файл

Это - первая часть из курса статей "3d обучение". Здесь будут рассмотрены основные 3d преобразования и как их эффективней реализовать в flash mx.

Содержание.

Введение.
1. Основы.
1.1 - координаты точки
1.2 - система координат
2. Преобразование поворота.
2.1 - поворот вокруг координатных осей относительно центра координат
2.2 - поворот вокруг координатных осей относительно произвольной точки
2.3 - поворот вокруг произвольной оси относительно центра координат
2.4 - поворот вокруг произвольной оси относительно произвольной точки
3. Преобразование масштабирования.
3.1 - масштабирование относительно центра координат
3.2 - масштабирование относительно произвольной точки
4. Преобразование сдвига.
4.1 - сдвиг начала координат
5. Проецирование.
5.1 - перспективное проецирование
6. Комбинирование преобразований.
6.1 - последовательное выполнение сдвигов
6.2 - последовательное выполнение поворотов
6.3 - последовательное выполнение масштабирований
Заключение.



1. Основы.

Предполагаемые обозначения в тексте

x, y, z - координаты точки
x', y', z' - новые координаты точки
xp, yp - проецированные координаты точки
dist - дистанция от точки наблюдения (позиции камеры) до центра координат
cnx, cny - координаты центра клипа
sin(A), cos(A), tan(A) - синус, косинус и тангенс угла A
rad = Math.PI/180 - коэффициет перевода градусов в радианы и обратно

1.1 Координаты точки.

Точка в 3d пространстве имеет три координаты (x,y,z) - это расстояние от каждой из осей до самой точки. К примеру координаты (1, 2, 3) означают, что точка расположена на расстоянии 1 от оси X, на расстоянии 2 от оси Y и на расстоянии 3 от оси Z.

1.2 Система координат.

В нашем случае мы будем применять правую систему координат. Правая система координат наиболее часто применяется в машинной графике.

определение: Система координат называется правой, если для совмещения с положительной полуосью Y положительную полуось X требуется повернуть на +90° при этом направление движения расположенного вдоль оси Z и поворачивающегося против часовой стрелки правого винта и положительной полуоси Z совпадают.

2. Преобразование поворота.

Преобразование поворота играет важнейшую роль в 3d движениях. Без него невозможны плавные движения облёта, вращения и др. основополагающие движения камеры.

2.1 Поворот вокруг координатных осей относительно центра координат.

Самым лёгким поворотом является поворот вокруг координатной оси.

Формулы поворота вокруг координатных осей на угол A

- вокруг оси X
x' = x;
y' = y*cos(A)-z*sin(A);
z' = y*sin(A)+z*cos(A);


- вокруг оси Y
x' = x*cos(A)+z*sin(A);
y' = y;
z' = -x*sin(A)+z*cos(A);


- вокруг оси Z
x' = x*cos(A)-y*sin(A);
y' = x*sin(A)+y*cos(A);
z' = z;


2.2 Поворот вокруг координатных осей относительно произвольной точки.

Смысл поворота вокруг произвольной точки:
- делаем сдвиг начала координат в нужную точку
- производим поворот
- возвращаем центр координат обратно на место

Формулы поворота относительно точки M(x0,y0,z0) на угол A

- вокруг оси X
x' = x;
y' = y0+(y-y0)*cos(A)+(z0-z)*sin(A);
z' = z0+(y-y0)*sin(A)+(z-z0)*cos(A);


- вокруг оси Y
x' = x0+(x-x0)*cos(A)+(z-z0)*sin(A);
y' = y;
z' = z0+(x0-x)*sin(A)+(z-z0)*cos(A);


- вокруг оси Z
x' = x0+(x-x0)*cos(A)+(y0-y)*sin(A);
y' = y0+(x-x0)*sin(A)+(y-y0)*cos(A);
z' = z;


2.3 Поворот вокруг произвольной оси относительно центра координат.

Вращение вокруг произвольной оси немного сложнее. Его нужно непременно знать и понимать.

Формулы поворота на угол A вокруг произвольной оси (alpha, beta, gamma)

temp = 1.0-cos(A);

x' = x*(alpha*temp*alpha + cos(A)) + y*(beta*temp*alpha - sin(A)*gamma) + z*(gamma*temp*alpha + sin(A)*beta);

y' = x*(alpha*temp*beta + sin(A)*gamma) + y*(beta*temp*beta + cos(A)) + z*(gamma*temp*beta - sin(A)*alpha);

z' = x*(alpha*temp*gamma - sin(A)*beta) + y*(beta*temp*gamma + sin(A)*alpha) + z*(gamma*temp*gamma + cos(A));


2.4 Поворот вокруг произвольной оси относительно произвольной точки.

Смысл поворота относительно произвольной точки вокруг произвольной оси:
- делаем сдвиг начала координат в нужную точку
- производим поворот вокруг произвольной оси
- возвращаем центр координат обратно на место

Формулы поворота на угол A вокруг произвольной оси (alpha, beta, gamma) относительно точки M(x0, y0, z0)

temp = 1.0-cos(A);

x' = x0 + (x-x0)*(alpha*temp*alpha + cos(A)) + (y-y0)*(beta*temp*alpha - sin(A)*gamma) + (z-z0)*(gamma*temp*alpha + sin(A)*beta);

y' = y0 + (x-x0)*(alpha*temp*beta + sin(A)*gamma) + (y-y0)*(beta*temp*beta + cos(A)) + (z-z0)*(gamma*temp*beta - sin(A)*alpha);

z' = z0 + (x-x0)*(alpha*temp*gamma - sin(A)*beta) + (y-y0)*(beta*temp*gamma + sin(A)*alpha) + (z-z0)*(gamma*temp*gamma + cos(A));

3. Преобразование масштабирования.

Преобразование масштабирования это - изменение размера, изменение масштаба.

3.1 Масштабирование относительно центра координат.

Наипростейшим масштабированием является масштабирование относительно центра координат. Это достаточно часто используемое преобразование.

Sx, Sy, Sz - коэффициенты масштабирования по осям X, Y и Z

Формула масштабирования:

x' = x*Sx;
y' = y*Sy;
z' = z*Sz;

3.2 Масштабирование относительно произвольной точки.

Данное преобразование нужно в основном для увеличения отдельных деталей фигуры. Допустим вам нужно промасштабировать один кубик. Делаем сдвиг центра координат в центр кубика, масштабируем все точки куба, и возвращаем центр координат на место. Вуаля - кубик увеличился в размерах не сдвигаясь со своего места.

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

Формула масштабирования относительно произвольной точки M(x0,y0,z0):

x' = x0+(x-x0)*Sx;
y' = y0+(y-y0)*Sy;
z' = z0+(z-z0)*Sz;


4. Преобразование сдвига.

Название говорит само за себя - изменение позиции точки.

4.1 Сдвиг начала координат.

incX, incY, incZ - величина сдвига по осям X, Y и Z;

Формула преобразования сдвига:

x' = x+incX;
y' = y+incY;
z' = z+incZ;


5. Проецирование.

Прошу не путать. Все вычисления производятся исключительно с нормальными координатами. Проецирование производится в самом конце, и оно не запоминается и не заменяет координат точки. Оно лишь нужно для визуально более реального изображения (получения перспективы) и перехода от 3d координат к 2d (монитор-то 2d, а не 3d)!

5.1 Перспективное проецирование.

Формула перспективного проецирования:

rx = cnx + x*dist/(dist+z);
ry = cny - y*dist/(dist+z);


6. Комбинирование преобразований.

Последовательное выполнение нескольких преобразований можно представить в виде единого преобразования. Это затрачивает меньше ресурсов машины.

6.1 Последовательное выполнение сдвигов.

Сдвиг аддитивен, т.е. последовательное выполнение сдвигов на расстояние (T1.x, T1.y, T1.z) и (T2.x, T2.y, T2.z) эквивалентно одному сдвигу на расстояние (T1.x + T2.x, T1.y + T2.y, T1.z + T2.z).

6.2 Последовательное выполнение поворотов.

Можно показать, что два последовательных поворота аддитивны. Например повернём точку на угол 45° и после этого повернём на угол -67°. Это эквивалентно повороту на угол (45° + (-67°)) = -22°.

6.3 Последовательное выполнение масштабирований.

Первое масштабирование с коэффициентами (Sx1, Sy1, Sz1) второе с коэффициентами (Sx2, Sy2, Sz2). Следует ожидать, что суммарное масштабирование будет мультипликативным. А именно последовательное выполнение этих масштабирований даст результат, эквивалентный масштабированию (Sx1*Sx2, Sy1*Sy2, Sz1*Sz2).


Заключение.
С помошью этих формул можно производить любые 3d преобразования. Конечно, в матричных вычислениях это намного удобнее, и выглядело бы это всё лучше, но и ресурсов оно бы занимало намного больше.
В следующих статьях будет также: 3d движок на матрицах 4x4 с движениями произвольной камеры, 3d освещение, 3d сортировка, 3d удаление невидимых граней, 3d тень и так далее.

Удачи!

Всегда Ваш Григорий Рябов / Nuran.
Сделано специально для flasher.ru.

Продолжение следует...
Перепечатка данного материала строго запрещена!
flash.plux.ru 2003
:: обучение : 3d обучение: основы 3d преобразовавний в flash
главная | исходники | обучение | actionscript.txt | форум | об авторе | каталог