Я пытаюсь установить матрицу lookAt, чтобы смотреть на точку {0,0,0} из глаза в {5,5,10}. Я успешно реализовал матрицу LookAt для глаза в {5,0,10}, но второй угол (направление y) отбрасывает мой вектор «вверх», поэтому он больше не равен {0,1,0}. Может ли кто-нибудь помочь мне определить, каким должен быть вектор «вверх» с точки зрения матрицы глаз? Я бы хотел, чтобы ось х была параллельна горизонту.
Я использую Mathematica, но собираюсь реализовать на Python ...
Ниже приведен код для использования глаза в {5,0,10}, но я бы хотел изменить глаз на {5,5,10} и найти правильный вектор «вверх»
`eye = {5, 5, 10};
l = {0, 0, 0};
Mt = IdentityMatrix[4];
F = l - eye;
Mt[[1 ;; 3, 4]] = -eye;
>>>Mt={{1, 0, 0, -5}, {0, 1, 0, 0}, {0, 0, 1, -10}, {0, 0, 0, 1}}
forward = Normalize[F];
up = Normalize[{0, 1, 0}];
left = Cross[up, forward];
Mr = IdentityMatrix[4];
Mr[[1, 1 ;; 3]] = left;
Mr[[2, 1 ;; 3]] = up;
Mr[[3, 1 ;; 3]] = forward;
>>> Mr={{-0.894427, 0., 0.447214, 0.}, {0., 1., 0., 0.}, {-0.447214,
0., -0.894427, 0.}, {0., 0., 0., 1.}}
>>>Mr.Mt={{-0.894427, 0., 0.447214, 0.}, {0., 1., 0., 0.}, {-0.447214,
0., -0.894427, 11.1803}, {0., 0., 0., 1.}}`