假设A
是MATLAB的4x4视角矩阵,通过view函数获得:
A = view;
A(1:3,1:3)
应对应于旋转和缩放,
A(1:3,4)
应对应于平移,
A(4,:)
应该只是[0 0 0 1]
。
当将相机参数设置为以下简单情景时:
camproj('orthographic')
set(gca, 'CameraPosition', [0,0,0])
set(gca, 'CameraTarget', [0,0,1])
set(gca, 'CameraUpVector', [0,1,1])
我知道 A = view
表示:
-1 0 0 0.5
0 1 0 -0.5
0 0 1 -0.5
0 0 0 1
我现在无法理解0.5来自何处。请注意,我将相机位置设置为[0, 0, 0],因此不应有平移。
另一个奇特之处,在将相机位置设置为[0,0,10]时:
set(gca, 'CameraPosition', [0,0,10])
结果导致A:=视图矩阵的值变为
1 0 0 -0.5
0 1 0 -0.5
0 0 -1 5.5
0 0 0 1
我注意到A(3,4)
中的-0.5已经变成了5.5,并且这与5 = 10 / 2有关。
也就是说,将相机位置更改为[0,0,a]会将A(3,4)
处的视图矩阵大约改变a/2
。
这很奇怪?异常?古怪?
更新:
另一个奇特之处在于A(1:3,1:3)
的行列式为-1,尽管对于旋转矩阵应该为1。当它为-1时,这意味着不仅进行了旋转还进行了反射。我们为什么需要反射呢?