我正在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);
我的量值计算是否有误?