2017-11-07 18 views
0

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である。

答えて

0

ソリューション

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.up.set( 
    -sin(myParams.eye_deg1) * cos (myParams.eye_deg2), 
    -sin(myParams.eye_deg1) * sin (myParams.eye_deg2), 
    cos(myParams.eye_deg1) 
); 
camera.lookAt(new THREE.Vector3(
    myParams.eye_x - cos (myParams.eye_deg1) * cos (myParams.eye_deg2), 
    myParams.eye_y - cos (myParams.eye_deg1) * sin (myParams.eye_deg2), 
    myParams.eye_z + sin (myParams.eye_deg1) 
)); 
関連する問題