この記事は?
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の座標系を採用しているはず