12

ビュー関数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 インチに変更されたことに気付きました。これは、 A(3,4)5 = 10 / 2 と関係があります。
つまり、カメラの位置を [0,0,a] に変更すると、ビュー マトリックスA(3,4)がおよそで変更されますa / 2

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

更新:さらに別の特殊性は、A(1:3,1:3) の行列式が -1 であることですが、回転行列の場合は 1 である必要があります。-1 の場合は、回転だけでなく反射も意味します。なぜ反省が必要なのですか?

4

3 に答える 3

0

matlab には詳しくありませんが、3D グラフィックスでは常に投影行列とカメラ行列を区別します。

射影は、カメラがゼロにある「カメラ空間」から射影空間に進みます。射影行列が適用された後、スクリーン座標は x' = x/w などとして計算されます。したがって、遠近法の下では、射影行列は z を w に移動するだけです。正射投影では、代わりに z を x に追加する場合があります。

ただし、ウィンドウの変換も含まれることがよくあります。カメラ空間では、カメラは 0 で z を見下ろしているため、座標はより -1..1 になります。ただし、ウィンドウ座標は 0..1 であるため、多くの場合、*.5、+.5、または否定などです。

あなたが見る奇妙さは、カメラとプロジェクションを混ぜ合わせることによるものです。matlabには両方があると確信しています。カメラ マトリックスを使用して、カメラを移動および回転します。投影は、ウィンドウ座標と遠近効果にのみ使用してください。

于 2012-10-30T04:18:27.147 に答える
0

私の推測では、matlab では、ピクセル座標が (-0.5*ビューポート サイズ、0.5*ビューポート サイズ) の範囲内にあるかのように設定できますが、各ピクセルの座標がより一般的なピクセル座標系を内部的に使用します。 (0, ビューポート サイズ) の範囲内です。

于 2012-06-14T08:33:27.597 に答える