2016-04-19 5 views
0

Я только начал изучать трансформации в OpenGL, и меня смутили шаги по изменению формы на разные позиции, углы или размеры.Приказы об изменении формы

К примеру, у нас есть дом в 2D сцене следующим образом: enter image description here

Допустим, я хочу трансформирует сцену (а) в сцену в части (б) из дома, как я должен решить, следует ли его масштабировать, переводить или сначала поворачивать? Будет ли результат другим?

спасибо.

ответ

2

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

Вот некоторые псевдокод, который отвечает на ваш вопрос непосредственно (при условии, каждая функция принимает в качестве параметров x,y,z):

translate(-6, 0, 0) 
rotate(0, 0, 135) 
scale(2, 1, 1) 

Теперь давайте посмотрим, почему это имеет значение порядка!

Во-первых, это то, что мы бы без каких-либо преобразований: no transforms

Далее, давайте посмотрим, что происходит, когда мы вращаем против часовой стрелки на 45 °, а затем перевести вдоль положительной оси X:

rotate then translate

Обратите внимание, как перевод заставил квадрат двигаться в верхний правый угол? Это связано с тем, что преобразование вращения также изменяет локальные оси. Теперь положительный X указывает на верхний правый. Если мы повернем на 180 °, то + X будет указывать влево, а не вправо.

Теперь давайте посмотрим, что происходит, когда мы выполняем те же преобразования в обратном порядке:

translate then rotate

На этот раз перевод переехал квадрат вправо, как и ожидалось. После этого квадрат повернулся.

Для получения более подробной информации обратитесь к open.gl page on Transformations, особенно по математике за всем этим.

+0

Это очень полезно, спасибо! – Phantom

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