Проще говоря, я изучаю OpenGL и начинаю изучать матрицы преобразования. Ниже мой текущий код:
glm::vec4 myPosition(1.0f, 1.0f, 1.0f, 1.0f);
glm::vec3 rotationAxis(0.0f, 1.0f, 0.0f);
glm::mat4 scalar = glm::scale(glm::vec3(1.0f, 1.0f, 1.0f));
glm::mat4 rotator = glm::rotate(360.0f, rotationAxis);
glm::mat4 translator = glm::translate(glm::vec3(1.0f, 1.0f, 1.0f));
glm::mat4 transform = translator * rotator * scalar;
myPosition = transform * myPosition;
Насколько я могу судить, я делаю это в правильном порядке: Масштабирование -> Поворот -> Перемещение. Итак, у меня есть шкала, ничего не делающая, потому что я на самом деле не хочу, чтобы она где-либо масштабировалась (для простоты).
Затем я установил поворот на 360.0f (поправьте меня, если я ошибаюсь) по оси Y. Это должно вернуться в исходную точку, по крайней мере, я бы так подумал, вращаясь на 360 градусов вокруг единственной оси.
Затем я настроил его на перемещение на 1 единицу в каждом направлении, чтобы убедиться, что он движется.
Закончив со всем этим, я закомментировал линию ротатора, и он отлично работает, даже если я изменю масштаб. Однако всякий раз, когда я добавляю строку поворота, конечная позиция не является нормальным поворотом на 360 градусов?
Я настроил свою программу на вывод вектора положения как до преобразования, так и после него.
Предыдущая позиция (1, 1, 1)
Позиция после (1,67522, 2, -0,242607).
Я изо всех сил пытался найти свою ошибку буквально весь день, поэтому, если кто-нибудь может помочь мне найти, что я делаю неправильно, я был бы очень признателен!