プラットフォーム毎の座標系、ベクトル、行列の取り扱い

AGX

Unity

Unreal

ROS

SpaceClaim

OpenGL

DirectX

ハンドネス

Right [1]

Left

Left

Right

Right

Right

Left

上方軸

Z

Y

Z

Z

Z

カメラ前方軸

X

Z

X

長さの単位

m

m

cm

m

ベクトルの種類

Row

Column

Row

Column

Row

行列とベクトルの掛け算順

Pre

Post

Pre [2]

Post

Pre

行列の要素アクセス順

RxC

RxC

RxC

CxR

RxC

行列のメモリレイアウト

Row

Column

Row

Column

Row

三角形メッシュの頂点順

反時計

時計

テクスチャ、スクリーン座標原点

左下

左上

ベクトルの種類

v = Vector3(v0, v1, v2) を行ベクトルとして扱うか、列ベクトルとして扱うか。

Row:

行ベクトル vrow=(v0v1v2)

Column:

列ベクトル vcolumn=(v0v1v2)

行列とベクトルの掛け算順

行列 A とベクトル v の掛け算の順番がベクトル-行列(Pre-Multiplication)か行列-ベクトル(Post-Multiplication)か。

Pre:

v * Av は行ベクトル。

Post:

A * vv は列ベクトル。

行列の要素アクセス順

各要素へのアクセスを行列(row, column)の順番とするか行列(column, row)とするか。 A=(abcdefghi) のとき、

RxC:

行列アクセス A[row, column]。 0行1列 A[0, 1] = b

CxR:

列行アクセス A[column, row]。 0列1行 A[0, 1] = d

行列のメモリレイアウト

行列の要素の配列への保存順が行オーダー(Row-major order)か列オーダー(Column-major order)か。

A=(a00a01a02a10a11a12a20a21a22) のとき、

Row:

行オーダー A = [a00, a01, a02, a10, a11, a12, a20, a21, a22]

Column:

列オーダー A = [a00, a10, a20, a01, a11, a21, a02, a12, a22]

三角形メッシュの頂点順

../../_images/trimesh_order.png

テクスチャ、スクリーン座標原点

../../_images/screen_origin.png