Как использовать точку разворота в трансформациях - PullRequest
3 голосов
/ 28 июня 2019

Как перевести объект, используя центральную точку

У меня есть прямоугольник, у которого есть центральная точка от положения прямоугольника.

, когда я поворачиваю прямоугольник, он вращается вокруг своей центральной оси.

если я умножил позицию перед вращением в матрице modelView

ModelViewMatrix = Rotation * Scaling * Position

Предположим, если я хочу выполнить эти переводы.

1) Переведите позицию прямоугольника на x = 10 единиц.

1) Поверните прямоугольник на 35 градусов с центральной точкой в ​​центре прямоугольника.

2) Переведите положение прямоугольника на x = 10 единиц.

3) изменить положение x центральной точки на 10 единиц (изменение положения центральной точки не должно влиять на прямоугольник)

enter image description here 4) Теперь поверните прямоугольник, используяновая центральная точка.

Если кто-то может подсказать мне, как мы используем центральную точку в преобразованиях.Как построить с помощью ModelView Matrix, если я использую центральную точку.

1 Ответ

2 голосов
/ 28 июня 2019

Если вам нужен следующий прямоугольник, где красный крест - это центр мира, и вы хотите повернуть его вокруг зеленой оси

, тогда вы должны сделать следующие шаги:

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

  • Поворот прямоугольника

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

Далее transPivot - это матрица перевода, которая определяется вектором от начала координат (0, 0) до точки поворота (pivotPos). Опора отмечена зеленым крестом.
rotation - матрица вращения вокруг оси z:

ModelViewMatrix = transPivot * rotation * -transPivot

-transPivot - матрица inverse(transPivot), которая в данном случае равна матрице перевода на -pivotPos.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...