私は iOS 拡張現実アプリケーションに取り組んでいます。マーカーベースではなく、ロケーションベースです。
GPS、コンパス、加速度計を使用して、緯度、経度、高度、およびヨー、ピッチ、ロールの 3 つのオイラー角を取得します。NSLog() を使用して、これらの 6 つの変数に有効なデータが含まれていることを知っています。
私のアプリケーションは、カメラ ビュー上にいくつかの 3D オブジェクトを表示します。ロール角以外のすべてを使用する限り、問題なく動作します。
その 3 番目の角度を追加すると、opengl ワールドに適用される回転がうまくいきません。メインの OpenGL draw メソッドでそのようにします
glRotatef(pitch, 1, 0, 0);
glRotatef(yaw, 0, 1, 0);
//glRotatef(roll, 0, 0, 1);
このアプローチには何か問題があると思いますが、私は確かに専門家ではありません。たぶん、3 つの異なる回転行列ではなく、ある種の独自の回転行列を作成する必要がありますか?
そう簡単には出来ないのではないでしょうか?結局のところ、ほとんどのデスクトップ ビデオ ゲーム、FPS などでは、ユーザーがマウスを使用してヨーとピッチを変更できるようにするだけなので、角度は 3 ではなく 2 つだけです。現実はあらゆる角度で動くことができます。
しかし、繰り返しになりますが、私がオンラインで見たすべての AR チュートリアルは、「ロール」を適切に処理できませんでした。携帯電話を「ローリング」すると、ロール補正戦略を使用して、AR を完全に台無しにするか、まったく何もしません。
私の質問は、電話センサーを使用して3つのオイラー角があると仮定すると、それらを3d openglビューにどのように適用すればよいですか?