【问题标题】:How to rotate a camera around a LookAt point with a varying distance?如何围绕不同距离的 LookAt 点旋转相机?
【发布时间】:2014-07-30 10:18:50
【问题描述】:

我有一个公式可以给我大致想要的东西。但我真正想要的是能够在距离上做到这一点。让我解释一下。

以下是使相机围绕一个点(LookAt 点)旋转的公式。

this.Position.X = this.LookAt.X + Math.sin(angle);
this.Position.Z = this.LookAt.Z + Math.cos(angle);

角度(上图)正在更新 0.15(+ 或 -),这取决于我是按向左键还是向右键。 这给出了我的相机围绕相机正前方的一个点旋转的效果。

我想要的是这个: 能够围绕观察点旋转相机(如当前行为),但允许相机根据到观察点的距离“放大”或“缩小”。

我尝试了类似以下的方法,但没有达到预期的效果:

this.Position.X = this.LookAt.X + Math.sin(angle);
this.Position.Z = this.LookAt.Z + Math.cos(angle);
this.Position.X *= distance;
this.Position.Z *= distance;

【问题讨论】:

  • 这个问题与 WebGL、OpenGL、OpenGLES 和透视相机无关。您显示的唯一代码与您尚未命名的某个库有关

标签: 3d


【解决方案1】:

按照我阅读您的描述的方式,我认为这会给您想要的:

this.Position.X = this.LookAt.X + distance * Math.sin(angle);
this.Position.Z = this.LookAt.Z + distance * Math.cos(angle);

按照您的方式,您也可以将LookAt 点乘以distance,这意味着它会随着您的缩放而移动。如果您想继续看同一个点,但只是移动得更近/更远,您只需将相对于LookAt 点的位置相乘即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 2019-01-26
    • 2014-12-31
    • 2014-11-01
    • 1970-01-01
    相关资源
    最近更新 更多