この記事は?
3Dモデルを扱うライブラリは実装によって軸の向きが違います。それぞれの違いをまとめた備忘録。
3Dライブラリのカメラ座標系の違い
カメラを原点にしたときのそれぞれの軸の向き。画像の左右方向がx、上下方向がy、カメラから画像平面に下ろした垂線方向がzなのはどれも共通だが、軸の向きは実装によって異なる。レアな実装は太字にした。
ライブラリ | x | y | z | 備考 |
---|---|---|---|---|
OpenGL | 右 | 上 | 手前 | |
Blender | 右 | 上 | 手前 | |
NeRF | 右 | 上 | 手前 | オリジナル実装 |
pytorch3d | 左 | 上 | 奥 | |
COLMAP | 右 | 下 | 奥 | |
OpenCV | 右 | 下 | 奥 | |
Unity | 右 | 上 | 奥 |
変換メモ
軸向きを変えるには反転させる軸に -1
、反転させない軸に 1
をかければ良い。numpyなどによって変換前の点群が (num_points, 3)
で表される場合には、反転軸に対応する要素が -1
、そうでない軸に対応する要素が 1
である対角行列を右からかければ良い。
# COLMAP -> OpenGL
new_points = points @ np.diag([1, -1, -1]) # points.shape = (num_points, 3)
その他メモ
- バックエンドでOpenGLを使っているものはOpenGLの座標系を採用しているはず