设A
为 MATLAB 的 4x4 视图矩阵,通过以下方式从视图函数获得:
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:=view 矩阵变为
1 0 0 -0.5
0 1 0 -0.5
0 0 -1 5.5
0 0 0 1
所以我注意到 -0.5 已更改为 5.5 in A(3,4)
,这在某种程度上与 5 = 10 / 2有关。
也就是说,将相机位置更改为 [0,0,a] 会使视图矩阵A(3,4)
大致更改为a / 2
.
这……很奇怪?奇特?奇怪的?
更新:另一个特点是 A(1:3,1:3) 的行列式是 -1,尽管对于旋转矩阵它应该是 1。当它是 -1 时,这意味着它不仅是旋转,而且是反射。为什么我们需要反思?