openvr と opengl を使用してアプリケーションをプログラミングしていますが、カメラが見ている方向に移動するようにします。そのため、hmd を装着して特定の方向を見ると、仮想カメラがその方向に飛んで移動できるようになります。
したがって、hmd の位置は openvr によって への呼び出しで提供されVRCompositor()->WaitGetPoses
、これはビュー マトリックスの逆に類似している必要があります。したがって、マトリックスの 3 番目の列を抽出すると、ビューの方向が取得され、モデルを変換できます。その方向に沿って行列を動かしてシーンを移動します。
m_mat4HMDPose = VRCompositor()->WaitGetPoses;
m_mat4HMDPose = inverse(m_mat4HMDPose);
vec4 direction = m_mat4HMDPose * vec4(0.0, 0.0, -1.0, 0.0);
model = translate(model, vec3(direction.x, direction.y, direction.z));
これは完全に間違っているようには見えませんが、すべての方向で機能するわけではありません。時々私は左を向いていますが、右に翻訳されています。これは上/下でも発生し、z 軸を中心に hmd を回転させると移動が変化します。
また、このチュートリアルhttps://www.youtube.com/watch?v=QREKO1sf8b8に従ってユニティを実行しようとしましたが、ユニティで動作する動きが得られましたが、コードを変換して opengl アプリケーションで実行することはできません。オイラーと四元数の変換を実装しようとしましたが、成功しませんでした。
方向ベクトルを追加のマトリックスで変換する必要があると感じているので、常に正しい方向を指しますが、どのように o_o を理解することはできません
誰かが間違いを知っていますか、またはこの動きを実装する方法を知っていますか?