2012-05-30 198 views
12

A是MATLAB的4×4视图矩阵,通过从视图功能得到:Matlab的3D视图矩阵

A = view; 

A(1:3,1:3)应该对应于旋转度与尺度,
A(1:3,4)应该对应翻译,并
A(4,:)应简单地说就是[0 0 0 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]的条件:在A

set(gca, 'CameraPosition', [0,0,10]) 

结果:=视图矩阵成为

1 0 0 -0.5 
0 1 0 -0.5 
0 0 -1 5.5 
0 0 0 1 

所以我注意到的-0.5在A(3,4)中已更改为5.5,并且这与某种情况有关5 = 10/2。
也就是说,将摄像机位置更改为[0,0,a]将A(3,4)的视图矩阵更改为大约a/2

这是......怪异的?奇特?奇?

更新: 另一个特性是A(1:3,1:3)的行列式为-1,尽管对于旋转矩阵它应该是1.当它是-1时,这意味着它不仅是旋转,也反映。为什么我们需要反思?

+0

我也得到了相同的结果,确实很奇怪......对于它的价值,看看这个[线程] (http://www.mathworks.com/matlabcentral/answers/15887-how-to-render-an-accurate-image-of-a-3d-model),其中提到了一些与3D视图和2D相关的未公开的轴属性投影 – Amro

回答

0

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

0

对matlab并不熟悉,但是:在3D图形中,您总是会区分投影和相机矩阵。

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

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

您看到的奇怪现象是通过混合摄像头和投影。我相信matlab有两个。使用相机矩阵移动并旋转相机。仅将投影用于窗口坐标和透视效果。

1

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