Three.js定位并指示相机

时间:2017-11-07 16:13:48

标签: javascript three.js

对于我而言,经过数小时/天的搜索才能找到Three.js中这样一个核心问题的答案:我知道1)相机的位置(=我的眼睛)2)相机的方向(我的眼睛)3)我的方向。生成相机(我们忽略相机角度,近/远,aso)。我得到的最近如下:

  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_deg1是眼睛的高点(-90:看底部,90:向上看),eye_deg2(xy-平面方向,0:-x方向)。

前两个旋转位于同一轴上,可以一步完成。第二次轮换不起作用。

如果我切换位置和旋转的设置,我没有观察到任何变化(但旋转不会与翻译一起通勤?!?)。

但说实话,我只需要一个生成相机的功能,我不需要任何解释。我不明白为什么要解决这个简单的问题,我必须阅读一本600页的关于3D图形的书....

眼睛向量是(-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。

一个例子,a1 = 0.眼睛向量是( - cos a2,-sin a2,0),头部向量是(0,0,1)。

1 个答案:

答案 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)
));