glTranslatef испортился после glRotatef - PullRequest
2 голосов
/ 24 февраля 2020

Я новичок ie в PyOpenGL. Я сделал простой код, используя его, который отображает куб, и вы можете перемещаться по нему с помощью клавиатуры. Однако я заметил, что после вызова команды glRotatef она меняет вашу перспективу, а не расположение объектов. Однако glTranslatef работает не с перспективой, а с буквальной системой координат. Другими словами, после вызова команды glRotatef на 90 * команда glTranslatef, которая могла бы переместить вас вперед, теперь перемещает вас влево. Есть ли такая функция, как glTranslatef, только она изменяется с вращением, поэтому вы не получаете странных движений или какого-то другого обходного пути, который вы можете сделать, чтобы изменить значения, которые вы передаете glTranslatef на основе вращения?

1 Ответ

2 голосов
/ 24 февраля 2020

Такие операции, как glTranslate и glRotate определяют матрицу (смещение-вращение) и умножают текущую матрицу на новую матрицу.
Матрица умножение не является коммутативным . Если вы хотите повернуть модель и перевести модель независимо от поворота, то вам нужно выполнить вращение перед преобразованием, соответственно умножить матрицу перевода на матрицу вращения: (Умножения матрицы OpenGL должны читаться справа налево. ):

modelmatrix = translation * rotation

Соответственно glTranslate до glRotate:

glTranslate(x, y, z)
glRotate(angle, ax, ay, az)
...