我使用three.js创建了一个基本场景。我的目标是制作一个基于FirstPersonControls.js的pov相机
我修改了它的代码以适应我的需要(在鼠标点击时移动视图等)我差点完成但仍然存在一个错误:当我第一次移动相机时,它不会从对象的位置开始移动我正在看场景负荷。
仅当我设置相机的位置时才会发生这种情况。否则,几乎有效,正如您在此链接中看到的那样:http://jsfiddle.net/42qeojs0/
只需取消注释这三行(在第60行之后)
camera.position.x = 10;
camera.position.y = 10;
camera.position.z = 250;
然后,尝试通过拖动鼠标移动对象周围的视图。您会看到拖动的起始位置与您第一次看到的位置不同。
提前致谢
答案 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,您可能需要自己计算。)