Matlab 3D视图矩阵

时间:2012-05-30 20:50:19

标签: matlab view 3d

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:=视图矩阵变为

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时它意味着它不仅是旋转而且是反射。我们为什么需要反思?

3 个答案:

答案 0 :(得分:1)

在Matlab 2013a中尝试相同的...你会发现匹配期望的结果......我不知道你正在使用哪个版本的Matlab ..但它在版本8.1中肯定是固定的

答案 1 :(得分:0)

我受过教育的猜测是,matlab允许你设置它,好像像素坐标在(-0.5 *视口大小,0.5 *视口大小)的范围内,但内部使用更常见的像素坐标系统,其中坐标每个像素的范围是(0,视口大小)。

答案 2 :(得分:0)

不熟悉matlab,但是:在3d图形中,您始终可以区分投影和相机矩阵。

投影从相机处于零的“相机空间”到投影空间。在应用投影矩阵之后,将屏幕坐标计算为x'= x / w等。因此,在透视下,所有投影矩阵都将z移动到w。在正交中,可能会将z添加到x中。

但它也经常包括窗口转换。在相机空间中,相机处于0并向下看z,因此坐标更多为-1..1。但窗口坐标为0..1,因此通常为* .5,+ 5或否定等。

你看到的奇怪之处在于混合相机和投影。我相信matlab都有。使用相机矩阵移动和旋转相机。仅将投影用于窗口坐标和透视效果。