2012-05-30 19 views
12

Aは、ビュー機能から取得した、MATLABの4×4ビュー行列とする:、回転とスケーリングに対応している必要があり
A(1:3,4)が翻訳に対応している必要があり、かつ
A(4,:)Matlabの3Dビュー行列

A = view; 

A(1:3,1:3)べき単純に[0 0 0 1]になります。

次のような単純なシナリオにカメラパラメータを設定する場合:0.5のから来ている私たちのところ

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

今、私は理解することはできません。

私はA = viewであることを取得。カメラの位置を[0,0,0]に設定して翻訳がないようにすることに注意してください。

で[0,0,10]にカメラの位置を設定する

別の特殊性、:だから私は気づいた

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

になって=ビュー行列:Aで

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

結果-0.5がA(3,4)で5.5に変更されましたが、これは何とか5 = 10/2と関係します。
つまり、カメラの位置を[0,0、a]に変更すると、ビューマトリックスはA(3,4)で約a/2に変わります。

これは...変ですか?独特な?奇妙な?

更新: また、回転行列では1でなければならないが、A(1:3,1:3)の行列式は-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に移動することです。正書法では、代わりにxをzに加えるかもしれません。

しかし、しばしばウィンドウトランスフォームも含まれます。カメラ空間では、カメラは0にあり、zを見下ろしているので、座標は-1.1です。しかしウィンドウの座標は0..1であり、しばしばa * .5、+ 5または否定などです。

あなたが見る奇妙なことは、カメラと投影を混在させることです。私はmatlabに両方があると確信しています。カメラの行列を使用して、カメラを移動して回転させます。投影は、ウィンドウ座標とパースペクティブエフェクトにのみ使用してください。

1

Matlab 2013aで同じものを試してみてください。期待通りの結果が得られます...私は使用しているMatlabのバージョンはわかりませんが、バージョン8.1では確かに修正されています