私はhtml5とTHREE.jsを使用してゲームを作成しており、オイラーの順序が「YXZ」で回転するカメラを持っています。
これは、カメラが頭のように上下左右に回転するようにするためです。一人称視点のように。
このオイラー順序では、camera.rotationのzプロパティは使用されません(常に0)。xはラジアンでピッチまたは緯度を指定するために使用され、yは経度を表すために使用されます。
カメラが常にこの球の中心にある状態で、ユーザーの周りを球形に移動する多数のターゲットがあります。球の半径が1000であるとしましょう。
私の目的は、カメラが見ている場所とターゲットがいる場所の間の角度を計算することです。
2つのベクトル間の角度を計算する次のコードを作成しました。
var A = new THREE.Vector3(1,0,0);
var B = new THREE.Vector3(0,1,0);
var theta = Math.acos( A.dot(B) / A.length() / B.length() );
// theta = PI/2;
ターゲットのベクトル(targets [0] .position)があります。
問題は、カメラが見ている場所のベクトルを取得する方法がわからないことです。
Vector3.applyProjectionメソッドとapplyEulerメソッドを調べてみましたが、それでも良い結果を得ることができません。
予測を行う前に、オイラーの順序を最初に「XYZ」に戻す必要があると思いますか?私は試しましたが、これを行う方法がわかりません。ドキュメントを理解するのはかなり難しいです。
カメラが直接右を向いている場合、現在の回転方向で中心からRADIUS距離のベクトルを取得する必要があるとします。
したがって、計算を実行できる2つのベクトルになります。