相机平滑(缩放时相机移动更快)

  • 本文关键字:相机 移动 平滑 缩放 c#
  • 更新时间 :
  • 英文 :


我正面临围绕轴运动的相机移动的问题。当相机远离其目标时,相机似乎比相机靠近目标时移动速度要慢。我知道这是由于距离造成的,并且当相机更靠近目标时具有较小的视野。好像您正在看着蜘蛛在柜台顶部奔跑一样,如果您靠近蜘蛛,看起来他只是在冲刺,如果您对面的厨房,蜘蛛似乎移动得慢,因为他的表面积有更多您的视野要跨度。

无论与目标的距离如何,我都需要相机以恒定的速率移动。非常简单的问题。由于工作,我必须对我的代码受到限制。

float deltaX = mouse.X;
float deltaY = mouse.Y;
float moveSpeed = 100000f;
// These are set elsewhere and manipulated throughout the code.
Vector3 deltaMove = Vector3.Zero;
Vector3 Position = Vector3.Zero;
Vector3 Target = Vector3.Zero;
deltaMove += new Vector3(deltaX * moveSpeed / 2f, deltaY * moveSpeed / 2f, 0);

我相信可以解决此问题,包括目标位置和相机位置之间的距离。任何帮助是极大的赞赏。如果您需要更多细节或有疑问,请询问。

最终结果应该是相机以相同的速率移动,无论其离目标有多近或距离。

Update

我目前需要一个基本的数学表示,以平滑相机和目标之间的"速度"差异。

因此,在插入此之后,我发现以下解决方案产生了最佳结果:

float distance = Vector3.Distance(CameraPosition, TargetPosition) * 50 / moveSpeed;
deltaMove += new Vector3(x, y, 0) * distance;

上面的摘要在我尝试过的所有内容中产生了最干净,最平稳的结果。最初,上述片段将如下写,因为它会产生一个载体,该向量集中在距离上的速度上。距离越小,速度越小,反之亦然。由于我的距离变量的结果为2.5 * 10^12及更大的结果,我必须产生同一片段的不同方法。

float distance = Vector3.Distance(CameraPosition, TargetPosition) * moveSpeed;
deltaMove += new Vector3(x, y, 0) * distance;

最新更新