2014年1月7日火曜日

回転と右手系左手系

3Dグラフィックスを扱う場合に,カメラからの座標に変換するビュー変換やクリップ空間に変換するプロジェクション変換の場合,座標系が右手か左手かを気にするけれど,モデルのローカル座標からワールド座標に変換する場合の変換では,右手左手を気にする話を聞かないな,と思ってふと気になったので,とりあえず回転について考えてみた.

X軸,Y軸、Z軸をそれぞれ赤(R),緑(G),青(B)の直方体で表し,左に左手系の座標軸,右に右手系の座標軸を作ってみた.

この状態で,Z軸に関する回転を考えると,左手座標系でも右手座標系でもX軸とY軸の向きが同じなので,時計回りなら時計回り、反時計回りなら反時計回りに、と同じ方向に回せば同じ結果になりそうだ.

今度は、軸の位置関係を保ったまま、YZ平面が見えるようにして、X軸で回転する場合を考えてみる.この場合も、どちらの座標系でもY軸(G)とZ軸(B)の方向が同じ方を向いているので、X軸を同じ方向に回せば,同じ結果が得られそうだ.

最後に,XZ平面が見えるようにして,Y軸で回転する場合を考えてみる.この場合も、どちらの座標系でもX軸(R)とZ軸(B)の方向が同じ方を向いているので、Y軸を同じ方向に回せば,同じ結果が得られそうだ.


ただ,Y軸回転の場合のみX軸が画面上を向くことになる.ここで,各軸での回転行列を思い出してみる.
Z軸回転
cos-sin0
sincos0
001

X軸回転
100
0cos-sin
0sincos

Y軸回転
cos0sin
010
-sin0cos

Y軸についての回転のときだけsinの符号の位置関係が違っているのが気になっていたのだけれど,X軸が上でZ軸が右側になるから,と考えると納得できる.

こういうのって,専門的に3Dグラフィックスを扱っている人とかだと常識なんだろうか?

2014年1月4日土曜日

同次座標系でのwの効果を体感する

同次座標系(3次元をx, y, z, wの4つで表すヤツ)では,実際の座標は(x/w, y /w, z / w)となる,
ということを体感するためのページを作ってみた.

同次座標系でのwの効果を体感する (GitHub Pages)

横のスライドバーは1から10まで変更できて,(1, 0, 0, w)のwに反映される.
wが大きくなるほど点のx座標が0 (中心)に近づくのが分かる.