使用THREE.PerspectiveCamera进行非透视平移

时间:2014-11-07 18:31:28

标签: three.js perspectivecamera

我使用THREE.PerspectiveCamera在正交场景中使用。这是因为THREE.OrthogonalCamera对某些类型的交互并不公平。我也使用了THREE的TrackballControls。到目前为止,缩放和平移场景对用户来说都很有用,但现在我已经意识到我需要以编程方式将对象移动到视图中,并尝试设置相机的位置并不会改变相机的位置 - 它也适用于我不想要的视角。

我想在俯视Z轴(在地图上)的同时沿X轴和Y轴移动我的透视相机(如平移地图)。

对于THREE.PerspectiveCamera,设置" camera.position.x + = 1000"将相机沿x轴移动1000,但也通过旋转相机将视角应用于视图,并使2D场景看起来歪斜。我注意到相机的旋转和四元数值已经改变。

初始camera.position at(0,0,5000)如下所示:

Before

然后设置camera.position.x = 1000,如下所示:

After

在这个问题中提到了这个问题:Moving camera on a perspective map,我认为在这个问题中提到了Three.js & OrbitControls.js - pan camera parallel to ground plane (like Google Earth)

我对矩阵和3D投影不太满意,但知道解决方案已嵌入其工作中。我也知道当我今天拖动地图时, 正确平移 - so the solution may also be embedded in the panning code in THREE.TrackballControls,但我无法理解。

有人可以帮助我实现非透视"平移"与THREE.PerspectiveCamera?

1 个答案:

答案 0 :(得分:0)

您需要的是一台正交相机。它的截头体本质上是一个完美的立方体(而不是透镜相机形成的更多金字塔结构)。

这意味着无论距离多远,所有物体都将保持相同的大小。 (即,正射相机没有深度感知)

透视相机的示例。 Frustum是zNear和zFar之间的区域。 enter image description here

这是完成所要求的唯一高效方式。

现在问题变成了:什么样的相互作用与正交相机不起作用?