相机平滑(相机在放大时移动速度更快)

时间:2017-09-20 17:18:54

标签: 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);

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

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

更新

我目前需要一个基本的数学表示来平滑相机与目标之间距离的“速度”差异。

1 个答案:

答案 0 :(得分:0)

所以在关闭了一段时间之后,我发现以下解决方案产生了最好的结果:

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;