0

我正在 Unity3D 中编写一个工具,它允许拖动点来调整形状的大小:

在此处输入图像描述

拖动点只能沿表面法线移动(即示例立方体不能变形,只能拉长)。

自然鼠标可以向任何方向拖动,所以我试图计算沿表面法线拖动的距离。

目前我正在做以下事情:

public static float NormalMoveHandle(Vector3 position, Vector3 normal)
{
    Vector3 newPosition = FreeMoveHandle(position);
    Vector3 dragVector = newPosition - position;

    return Vector3.Dot(dragVector, normal) * dragVector.magnitude;
}

但是我得到了不可预测的结果:

http://i.gyazo.com/35f3fc4b4e0471f3c5d70097ddc6f79f.mp4

当拖动超过一小段距离时,该值会突然变为 NaN:

在此处输入图像描述

如果我调整我的计算,我会得到更稳定的行为,但手柄会变得迟钝。我相信这表明手柄是功能性的。问题在于我的数学。

return Vector3.Dot(dragVector, normal);

我的震级计算有误吗?

4

0 回答 0