3D空間でマップイメージタイルの平面を表示しようとしているWebアプリケーションがあります。
飛行機を常に水平にしたいのですが、デバイスは回転します。最終的な効果は、この海洋コンパスのデモに似ています。
これで、モバイルデバイス用のW3CデバイスオリエンテーションAPIを介してデバイスオリエンテーションをキャプチャでき、マップイメージタイルを正常にレンダリングできました。
私の問題は、デバイスの向きに応じてカメラを正しく回転させる方法についての基本的な数学の知識が不足していることです。
私はThree.jsライブラリを使用しています。カメラオブジェクトの回転をアルファ/ベータ/ガンマ(ラジアンに変換)で直接設定しようとしました。ただし、カメラは常にローカル軸ではなく、openGL / webGLで使用されるワールド軸に従って回転しているように見えるため、機能していません。
カメラの前でポイントを100ユニット回転させ、デバイスの向きAPIによって提供される角度でカメラの位置に対してポイントを回転させるというアイデアに出会いました。しかし、これを実装する方法もわかりません。
誰かが私が達成したいことを手伝ってくれますか?
編集:
間違いの修正:
同様のことを実装することに興味がある人にとって、Three.jsオブジェクトはデフォルトでワールド空間軸ではなくローカル空間軸を使用していることがわかりました。私は間違っていました。公式文書には、「object.matrixAutoUpdate = false」を設定し、「object.matrixWorld」を変更して「object.updateWorldMatrix()」を呼び出すと、オブジェクトをワールド軸で手動で移動/回転/スケーリングできると記載されています。ただし、オブジェクトに親がある場合は機能しません。オブジェクトに親がある場合は、ローカル軸マトリックスが常に使用されます。