なぜ一つに統一されていないのか……
とりあえず使ったことがあるものをまとめていく
Forward: +Z, Up: -Y, Right: +X
- 右手系
- COLMAP, OpenCV, viser
- ただし、COLMAP の cameras.txt は wxyz の quaternion で格納されている
Forward: -Z, Up: +Y, Right: +X
- 右手系
- NerfStudio, OpenGL, Blender
- NeRF, InstantNGP などで使われている保存形式である
transforms.jsonのtransform_matrixもこれ
変換
translation については単純に逆向きになっている軸を反転すればいい
rotation については、 それぞれのパラメータの意味 を参考にして考えると
- cw の横ベクトル、または
- wc の縦ベクトル
を反転させればいいとわかる。すなわち例えば、COLMAP ←> OpenGL の変換だと
R_cw[1:3] = R_cw[1:3] * -1
# または
R_wc[:, 1:3] = R_wc[:, 1:3] * -1