2010-02-09 3 views
1

С учетом 2 java AffineTransform элементов, как я могу интерполировать между ними. Мне нужно изображение на экране, чтобы медленно перемещаться из положения/вращения/масштаба с применением одной матрицы, другой.Линейная интерполяция AffineTransform

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

Мои тока (действительно Hacky) решением является getTranslate() с обеих матриц, Lerp между ними, а затем создать новую матрицу (Это не работает в полной мере, так как нет никакого эквивалента для вращения)

ответ

1

Получите аффинные матрицы каждого преобразования через getMatrix(). Пройдите через интерполяцию одной матрицы в другую, создав новое преобразование через AffineTransform (float [] matrix) на каждом шаге.

+0

Эй, я принял это, но после его внедрения заметил что-то странное. Когда камера отрывается от одной матрицы к другой, она масштабирует все, чтобы быть меньше. Это на самом деле выглядит круто, так что это не проблема, но любые идеи, почему это так? – Martin

+0

Получаете ли вы 4 или 6 значений в методе getMatrix()? Если 6, - последние 3 элемента обеих матриц {0, 0, 1}? Сколько значений вы даете конструктору AffineTransform? –

+0

Вы также можете разложить эти два преобразования на одну и ту же последовательность сдвига/поворота/масштабирования/сдвига и разделить каждую субтрансформацию отдельно. Субтрансформации будут объединены на каждом шаге для формирования текущей Аффинной трансформации, что приведет к менее загадочной визуальной трансформации. –

Смежные вопросы