我正在尝试建立一个 lookAt 矩阵,从 {5,5,10} 的眼睛看点 {0,0,0}。我已经成功地实现了 {5,0,10} 处眼睛的 LookAt 矩阵,但第二个角度(y 方向(抛出了我的"向上"向量,所以它不再是 {0,1,0}。有人可以帮助我确定我的眼部矩阵中的"向上"矢量应该是多少吗?我想保持x轴与地平线平行。
我正在使用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.}}`
您需要重新正交上向量:
up = Cross[forward, left];