|
|
|||||
Регистрация: Nov 2010
Сообщений: 150
|
Глобальная трансформация спрайта
Задача. Есть DisplayObject который находится в иерархии отображения на произвольной глубине.
Для него известны позиция, угол поворота и скейл относительно произвольного родителя в его иерархии (т.е. не обязятельно this.parent, а this.parent...parent). Как установить объект в нужное положение, т.е. как вычислить его локальную матрицу преобразований. |
|
|||||
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
localToGlobal() и globalToLocal()
|
|
|||||
Регистрация: Nov 2010
Сообщений: 150
|
это для позиций, а требуется еще учесть поворот и масштаб
Добавлено через 2 минуты родители также имеют прозвольный поворот и масштаб, необходимо на основе их матриц преобразований и заданных позиций и поворота объекта осносительно одного из родителей, вычислить его локальную матрицу, либо локальные значения позиции, поворота и скейла. |
|
|||||
Как-бы в localToGlobal() и globalToLocal() это всё учитывается. Вы попробуйте хоть.
Найти саму матрицу... Кстати да, функций преобразования в доках что-то не нашёл (но я не сильно старался, может у Вас получится), на худой конец можно сделать брутофорсом: 1. Что такое матрица трансформаций? Это набор координат единичных векторов базиса, т.е 2. Берём тупо 3 точки: var t:Point = new Point(tx, ty);// Смещение var ex:Point = new Point(tx + 1, ty); var ey:Point = new Point(tx, ty + 1); 4. составляем матрицу из получившихся точек: var matrix:Matrix = new Matrix( ex.x - t.x, ex.y - t.y, ey.x - t.x, ey.y - t.y, t.x, t.y ); P.S. Ничего не тестировал, мог загнаться, но принцип должен работать. Последний раз редактировалось expl; 07.01.2012 в 20:17. |
|
|||||
Регистрация: Nov 2010
Сообщений: 150
|
Цитата:
Решение кстати уже нашел. L=G*(P-1) L - результирующся локальная матрица (P-1) - инвертированная текущая глобальная матрица (this.parent.transform.concatenatedMatrix) G - глобальная матрица составленная из исходных данных. |
|
|||||
Modus ponens
|
?
__________________
Hell is the possibility of sanity |
|
|||||
Регистрация: Nov 2010
Сообщений: 150
|
Немного странный код... не совсем пойму что он делает. Решения уже выше написал, для случая произвольного родителя - да, текущая глобальная матрица считается примерно как в примере выше - конкатенация матриц текущего родителя и последующих до необходимого.
|
|
|||||
Modus ponens
|
Код делает: показывает как принципиально посчитать
1. трансформацию родителя относительно ребенка. 2. трансформацию ребенка относительно родителя. Сорри, я не следил за ответами и запостил поздно.
__________________
Hell is the possibility of sanity |
Часовой пояс GMT +4, время: 04:35. |
|
« Предыдущая тема | Следующая тема » |
|
|