簡體   English   中英

Matlab 3D視圖矩陣

[英]Matlab 3D view matrix

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

所以我注意到-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時它意味着它不僅是旋轉而且是反射。 我們為什么需要反思?

在Matlab 2013a中嘗試相同的...你會發現匹配期望的結果...我不知道你正在使用哪個版本的Matlab ..但它在版本8.1中肯定是固定的

我有根據的猜測是,matlab允許你設置它就好像像素坐標在(-0.5 *視口大小,0.5 *視口大小)的范圍內,但內部使用更常見的像素坐標系統,其中每個像素的坐標在(0,視口大小)的范圍內。

不熟悉matlab,但是:在3d圖形中,你總是區分投影和相機矩陣。

投影從相機處於零的“相機空間”到投影空間。 在應用投影矩陣之后,將屏幕坐標計算為x'= x / w等。因此,在透視下,所有投影矩陣都將z移動到w。 在正交中,可能會將z添加到x中。

但它也經常包括窗口轉換。 在相機空間中,相機處於0並向下看z,因此坐標更多為-1..1。 但窗口坐標為0..1,因此通常為* .5,+ 5或否定等。

你看到的奇怪之處在於混合相機和投影。 我相信matlab都有。 使用相機矩陣移動和旋轉相機。 僅將投影用於窗口坐標和透視效果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM