Three.jsのこのような中心的な問題への答えを見つけるために数時間/日の検索が終わっても私にとっては不可能です:私は1)カメラの位置(=私の目)2 )カメラの方向(私の目の)3)私の頭の方向。カメラを生成する(カメラの角度、near/far、asoは無視する)。次のように私が手に最も近いです:Three.jsの位置とカメラの指示
eye_deg1
目(-90:90、下を見て:上方に見える)の高い
camera = new THREE.PerspectiveCamera(150, window.innerWidth/window.innerHeight, 0.1, 5000);
camera.position.x = myParams.eye_x;
camera.position.y = myParams.eye_y;
camera.position.z = myParams.eye_z;
camera.rotateOnAxis(new THREE.Vector3(0,0,1), Math.PI /2);
camera.rotateOnAxis(new THREE.Vector3(0,0,1), Math.PI * (myParams.eye_deg2)/180);
camera.rotateOnAxis(new THREE.Vector3(sin(myParams.eye_deg2),-cos(myParams.eye_deg2),0), Math.PI * (myParams.eye_deg1+90)/180);
camera.updateProjectionMatrix();
、eye_deg2
(xy平面方向、0:-X方向) 。
最初の2つの回転は同じ軸上にあり、1つのステップで実行できます。 2回目の回転は機能しません。
私は位置と回転の設定を切り替えると、私は変更を観察しません(しかし回転は通貨換算で通らないのですか?)。
しかし、私はちょうどカメラを生成する関数が必要で、私は何の説明も必要ありません。私はこのような単純な問題を解決する理由を理解していないので、3Dグラフィックスで600pgの本を読む必要があります....
アイベクトルは(-cos a1 cos a2、-cos a1 sin a2、sin a1)ここで、a1 = eye_deg1およびa2 = eye_deg2である。 Three.jsのデフォルトは(0,0、-1)、すなわちa1 = -90(下)
先頭ベクトルは(-sin a1 cos a2、-sin a1 sin a2、cos a1)です。 Three.jsのデフォルトは(0,1,0)、つまりa2 = 90です。眼ベクトルは(-cos a2、-sin a2,0)であり、頭部ベクトルは(0,0,1)である。一例として、a1 = 0である。