3d 如何以不同的距离围绕观察点旋转相机?

3d 如何以不同的距离围绕观察点旋转相机?,3d,3d,我有一个公式,它给出了我大致想要的东西。但我真正想要的是利用距离来实现这一点的能力。让我解释一下 下面是使相机围绕一个点(注视点)旋转的公式 根据我是按左键还是按右键,角度(以上)将更新0.15(+或-)。 这会产生这样的效果:我的相机正在围绕相机正前方的一个点旋转 我想要的是: 能够围绕观察点旋转摄影机(与当前行为类似),但允许摄影机根据到观察点的距离“放大”或“缩小” 我尝试了以下方法,但没有达到预期效果: this.Position.X = this.LookAt.X + Math.sin

我有一个公式,它给出了我大致想要的东西。但我真正想要的是利用距离来实现这一点的能力。让我解释一下

下面是使相机围绕一个点(注视点)旋转的公式

根据我是按左键还是按右键,角度(以上)将更新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;

从我阅读您描述的方式来看,我认为这将满足您的需求:

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

按照您的方式,您可以将
LookAt
点乘以
distance
,这意味着它将随着您的缩放而移动。如果你想继续观察同一点,但只想靠近/更远,你只需要乘以相对于
LookAt
点的位置。

这个问题与WebGL、OpenGL、OpenGLS或透视相机无关。您显示的唯一代码与您尚未命名的库相关
this.Position.X = this.LookAt.X + distance * Math.sin(angle);
this.Position.Z = this.LookAt.Z + distance * Math.cos(angle);