作ったもの
- 下記の3D回転表現に対応しています
- 回転行列: Rotation Matrix
- 回転ベクトル: Rotation Vector
- Axis-angle
- クオータニオン: Quaternion
- オイラー角: Euler Angles (Intrinsic; Mobile)
- 固定角: Euler Angles (Extrinsic; Fixed)
- 入力の回転に応じて、物体がどの方向を向くかを3D空間上で表示します
- 入力の回転を、他の全ての3D回転表現に変換します
- GitHub
- ブラウザで試す
実行ファイル
- 下記リリースからご使用のOSに合わせた実行ファイルをダウンロードしてください
-
https://github.com/iwatake2222/rotation_master/releases/latest
- Windows 10/11 64-bit: rotation_master_windows-2019_x64.zip
- Linux (Ubuntu 20.04): rotation_master_ubuntu-20.04_x64.tgz
MacOS: rotation_master_macos-10.15.tgz- 注意
- Windowsだと実行時にセキュリティに関する警告が出ます。信用いただけるならそのまま実行してください
- Ubuntuの場合
apt install -y libglu1-mesa-dev mesa-common-dev libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev
が必要です - WSL2だとグラフィック系の問題で動作しませんでした。WSL2上のDocker(Ubuntu20.04)だと動作しました
- MacOSだと実行時にエラーが発生するようです。自分でビルドするか、何か足りていないライブラリをインストールしたらいけるかも?
-
https://github.com/iwatake2222/rotation_master/releases/latest
- セキュリティが気になる場合は、自分でビルドしてください
操作方法
変換
- Inputエリアで、数値を変更します
- マウスドラッグ、または、Ctrl+クリックで直接入力します
- 値を変更した3D回転表現が入力として自動的に選ばれますが、変えたい場合はラジオボタンをクリックしてください
- Converted valuesエリアに、結果が自動的に出力されます
カメラ操作
Revolutionモード
- カメラは原点の周回を移動します。カメラは常に原点の方向を向いています
- 右ドラッグ: カメラの位置回転
- スクロール: カメラの前後移動 (原点からの距離変更)
Freeモード
- カメラを自由に移動することができます
- 右ドラッグ: カメラの回転
- 中央ドラッグ: カメラの移動
- スクロール: カメラの前後移動
その他
- 画面の右側に、X, Y, Z軸それぞれから見た状態が表示されます
- 現在の変換結果(Converted Values)を入力値(Input)に設定したい場合は、"Overwrite input values by the converted values" ボタンをクリックします
技術的な話
変換の流れ
- 入力値を回転行列に変換する
- ConvertOOO2RotationMatrix
- 変換した回転行列から、全ての3D回転表現に変換する
- ConvertRotationMatrix2OOO
変換関数は下記で実装されています。依存は自前の小さいMatrixクラス(2ファイル)だけなので、マイコンなどへの移植も容易だと思います。
https://github.com/iwatake2222/rotation_master/blob/master/desktop/transformation_matrix/rotation_matrix.cpp
使用技術
- C++
- OpenGL + GLFW + GLEW
- Dear ImGui
Help
これのWebアプリ版を作ってくれる方を募集中 !-
各ライブラリのWeb版は一応存在するようです - 2022/01/18追記: @astomih さんがEmscriptenを使って作成してくれました。ありがとうございます!
- 2022/01/26追記: 自分でもWEB上で動かせるようにしてみました