Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 07.01.2012, 19:15
Stitch512 вне форума Посмотреть профиль Отправить личное сообщение для Stitch512 Найти все сообщения от Stitch512
  № 1  
Ответить с цитированием
Stitch512

Регистрация: Nov 2010
Сообщений: 150
Question Глобальная трансформация спрайта

Задача. Есть DisplayObject который находится в иерархии отображения на произвольной глубине.
Для него известны позиция, угол поворота и скейл относительно произвольного родителя в его иерархии
(т.е. не обязятельно this.parent, а this.parent...parent).
Как установить объект в нужное положение, т.е. как вычислить его локальную матрицу преобразований.

Старый 07.01.2012, 19:30
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 2  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
localToGlobal() и globalToLocal()

Старый 07.01.2012, 19:31
Stitch512 вне форума Посмотреть профиль Отправить личное сообщение для Stitch512 Найти все сообщения от Stitch512
  № 3  
Ответить с цитированием
Stitch512

Регистрация: Nov 2010
Сообщений: 150
это для позиций, а требуется еще учесть поворот и масштаб

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

Старый 07.01.2012, 20:07
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 4  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Как-бы в localToGlobal() и globalToLocal() это всё учитывается. Вы попробуйте хоть.

Найти саму матрицу... Кстати да, функций преобразования в доках что-то не нашёл (но я не сильно старался, может у Вас получится), на худой конец можно сделать брутофорсом:
1. Что такое матрица трансформаций? Это набор координат единичных векторов базиса, т.е
Код AS3:
var matrix:Matrix = new Matrix(
    ex_x, ex_y,
    ey_x, ey_y,
    t_x, t_y
);
2. Берём тупо 3 точки:
Код AS3:
var t:Point = new Point(tx, ty);// Смещение
var ex:Point = new Point(tx + 1, ty);
var ey:Point = new Point(tx, ty + 1);
3. Применяем к ним localToGlobal и globalToLocal
4. составляем матрицу из получившихся точек:
Код AS3:
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
);
5. Применяем
P.S. Ничего не тестировал, мог загнаться, но принцип должен работать.


Последний раз редактировалось expl; 07.01.2012 в 20:17.
Старый 07.01.2012, 20:41
Stitch512 вне форума Посмотреть профиль Отправить личное сообщение для Stitch512 Найти все сообщения от Stitch512
  № 5  
Ответить с цитированием
Stitch512

Регистрация: Nov 2010
Сообщений: 150
Цитата:
Как-бы в localToGlobal() и globalToLocal() это всё учитывается.
Учитывается, но на основе этих данных можно установить позицию, но не поворот и масштаб.

Решение кстати уже нашел.
L=G*(P-1)
L - результирующся локальная матрица
(P-1) - инвертированная текущая глобальная матрица (this.parent.transform.concatenatedMatrix)
G - глобальная матрица составленная из исходных данных.

Старый 07.01.2012, 20:54
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 6  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Код AS1/AS2:
childMatrix.concat(parentMatrix.concat(grandParentMatrix ...));
var invertedParentMatrix:Matrix = parentMatrix;
parentMatrix.invert();
grandParentMatrix.concat(invertedParentMatrix);
. . .
?
__________________
Hell is the possibility of sanity

Старый 07.01.2012, 21:12
Stitch512 вне форума Посмотреть профиль Отправить личное сообщение для Stitch512 Найти все сообщения от Stitch512
  № 7  
Ответить с цитированием
Stitch512

Регистрация: Nov 2010
Сообщений: 150
Немного странный код... не совсем пойму что он делает. Решения уже выше написал, для случая произвольного родителя - да, текущая глобальная матрица считается примерно как в примере выше - конкатенация матриц текущего родителя и последующих до необходимого.

Старый 08.01.2012, 10:29
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 8  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Код делает: показывает как принципиально посчитать
1. трансформацию родителя относительно ребенка.
2. трансформацию ребенка относительно родителя.
Сорри, я не следил за ответами и запостил поздно.
__________________
Hell is the possibility of sanity

Создать новую тему Ответ Часовой пояс GMT +4, время: 04:35.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 04:35.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.