как повернуть все объекты по их собственным центрам, а затем перевести их в реальное положение (это не работает)

Как можно заставить все объекты, которые не выровнены относительно исходного центра (вектор 3 (0,0f, 0,0f, 0,0f)), вращаться вокруг своей центральной оси?

проблема в псевдокоде:

vector3 vector3 objectCenter = (10,5,0); // current object center
vector3 vector3 objectPosition = (40,5,0); // Place to translate the object
vector3 objectRotation; = 45.0f;

matrix.loadIdentity ();
matrix.translate (objectCenter);

//apply transformations
matrix.rotateX (objectRotation);

matrix.translate (-objectCenter);

//itś work correctly until here
//when i try to translate the object to the real position, the rotation is incorrect.

matrix.translate (objectPosition);

Я использую C ++, glm (для управления матрицами) и OpenGL.

1

Решение

если вы хотите повернуть объект локально в его собственную систему координат, сделайте это:

M=inverse(inverse(M)*rotation_matrix);

[edit1] подробнее о связи между M и объектом, систему координат которого он представляет

  • Смотри сюда: матрица анатомии преобразования
  • Начало координат M обычно является серединой объекта (или точкой, которая является центром движений вращения)
  • оси М обычно выровнены с объектом
  • например, в самолетах ось X обычно является направлением полета
  • Я больше привык к оси Z как движение вперед
  • +х справа, х слева
  • +у как вверх и -ы как вниз
  • pith, yaw, roll — это локальные повороты объектов вокруг x, y, z
0

Другие решения