【问题标题】:Non-perspective panning with THREE.PerspectiveCamera使用 THREE.PerspectiveCamera 进行非透视平移
【发布时间】:2014-11-07 18:31:28
【问题描述】:

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

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

对于 THREE.PerspectiveCamera,设置“camera.position.x += 1000”将相机沿 x 轴移动 1000,但还会通过旋转相机将透视应用于视图,并导致 2D 场景看起来倾斜。我注意到相机的旋转和四元数值发生了变化。

在 (0,0,5000) 处的初始 camera.position 如下所示:

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

在这个 SO 问题中提到了这个问题:Moving camera on a perspective map,我认为在这个 SO 问题中提到了它: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 实现非透视“平移”吗?

【问题讨论】:

  • 您不需要将相机目标移动与相机位置相同的量吗?
  • 我明白了……有道理,我会尝试并告诉你
  • 等等,你的意思是旋转目标吗?因为相机旋转了
  • 不,我的意思是平移,而不是旋转,但也许可以为您的问题创建一个小提琴以更好地说明它。

标签: three.js perspectivecamera


【解决方案1】:

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

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

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

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

现在问题变成了:正交相机的哪些交互效果不佳?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多