【问题标题】:Camera Smoothing (Camera Moves Faster When Zoomed)相机平滑(缩放时相机移动得更快)
【发布时间】:2017-09-26 22:21:50
【问题描述】:

我遇到了相机绕轴移动的问题。当相机远离它的目标时,相机在物体周围移动的速度似乎比相机靠近它的目标时慢。我知道这是由于距离较远,并且当相机靠近目标时视野较小。就像你在看一只蜘蛛跑过你的台面一样,如果你离蜘蛛更近,它看起来就像是在冲刺一样,如果你穿过厨房,蜘蛛看起来会移动得更慢,因为它的表面积更大您的视野范围。

无论与目标的距离如何,我都需要相机以恒定的速度移动。很直接的问题。由于工作原因,我必须限制我的代码。

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);

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

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

更新

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

【问题讨论】:

  • 如果这是unity 问题,请考虑添加适当的标签。
  • 这不是 Unity 问题。
  • 我的直觉告诉我你的数学是错的,但我不能说到底是怎么回事。那里不应该有一个二的平方根吗?你的移动速度是长度为moveSpeed 的向量。您的运动矢量(deltaX, deltaY, 0) 需要缩放,以便矢量长度 等于moveSpeed。正确的? IIRC 这被称为“向量归一化”
  • 所以,我认为需要做的是,用(deltaX, deltaY, 0) 制作你的向量,然后找到它的大小,我称之为L。计算moveSpeed / L 以获得您的比例因子SF。最后,这对我来说是模糊的,您需要将SF 粘贴到您的最终向量中以缩放其 X 和 Y 分量。不过,我不清楚这样做的正确方法。

标签: c#


【解决方案1】:

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

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

上面的 sn-p 在我尝试过的所有方法中产生了最干净、最平滑的结果。最初,上面的 sn-p 将被写成如下,因为它产生了一个专注于距离上的速度的向量。距离越小速度越小,反之亦然。由于我的距离变量产生了 2.5 * 10^12 和更大的结果,因此我不得不为相同的 sn-p 生成不同的方法,从而迫使目标离开屏幕。

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

【讨论】:

    猜你喜欢
    • 2012-09-17
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 2020-06-23
    • 1970-01-01
    相关资源
    最近更新 更多