three.js pov相机看看周围的bug

时间:2015-04-30 08:50:55

标签: javascript math 3d three.js

我使用three.js创建了一个基本场景。我的目标是制作一个基于FirstPersonControls.js的pov相机

我修改了它的代码以适应我的需要(在鼠标点击时移动视图等)我差点完成但仍然存在一个错误:当我第一次移动相机时,它不会从对象的位置开始移动我正在看场景负荷。

仅当我设置相机的位置时才会发生这种情况。否则,几乎有效,正如您在此链接中看到的那样:http://jsfiddle.net/42qeojs0/

只需取消注释这三行(在第60行之后)

    camera.position.x = 10;
    camera.position.y = 10;
    camera.position.z = 250;

然后,尝试通过拖动鼠标移动对象周围的视图。您会看到拖动的起始位置与您第一次看到的位置不同。

提前致谢

1 个答案:

答案 0 :(得分:1)

要更正单击鼠标时的初始跳转。为您所查看的对象引入一个新变量dist,并使用atan2作为获取经度的更可靠方式。

dist = Math.hypot(blue1.position.x,blue1.position.y,blue1.position.z);
phi = Math.acos(blue1.position.y/dist);

theta = Math.atan2(blue1.position.z,blue1.position.x);

lon = THREE.Math.radToDeg(theta);
lat = 90-THREE.Math.radToDeg(phi);

在onDocumentMouseMove中使用

camera.target.x = dist * Math.sin( phi ) * Math.cos( theta );
camera.target.y = dist * Math.cos( phi );
camera.target.z = dist * Math.sin( phi ) * Math.sin( theta );

这样,如果你取初始位置,计算lat,long和dist,然后计算你得到的开始向量的向量。使用500的固定倍数实际上突然跳到比你开始更远的位置。 (注意在IE中不支持Math.Hypot,因此如果定位IE,您可能需要自己计算。)