座標系(OpenGLとDirectXの違い)

coordinate-system.png

定義

座標
空間で点の位置を定める数の集合である。
座標系
空間内の各点を数の集合で指定するための規則。
座標軸
座標系を定義するために用いられる直線または曲線。一つの座標の値はその軸上の点の位置を唯一決定し、他の座標の値はその軸上では0となる。

右手座標系と左手座標系

親指が+x軸
人差し指が+y軸
中指が+z軸
OpenGLは右手座標系
DirectXは左手座標系
OpenGL DirectX
座標系 右手 左手
ウィンドウ座標系 左上原点
面の表 反時計回り 時計回り
回転する時 反時計回りが正 時計回りが正
ベクトル 列ベクトル 行ベクトル
座標変換 $p'=Mp$ $p'=pM$
かける順番 $v'=P*V*M*v$ $v'=v*M*V*P$
行列の配列 $\begin{pmatrix}0&4&8&12\\1&5&9&13\\2&6&10&14\\3&7&11&15\end{pmatrix}$ $\begin{pmatrix}0&1&2&3\\4&5&6&7\\8&9&10&11\\12&13&14&15\end{pmatrix}$

V=ビュー行列(z方向への平行移動)
M=モデル行列(glLookAt)
P=プロジェクション行列
もとの頂点に近い行列ほど先に掛け算するのだ。

行列が効く順番

OpenGLの場合、glPushMatrix()とglPopMatrix()の間では内側から順番に効いていく。

glPushMatrix();
glTranslated();//2番目 なのでスケール後の値を記述する
glScalef();//1番目
draw();
glPopMatrix();

matrix

サポートサイト Wikidot.com matrix