我尝试根据电枢的三个点来计算磁极位置。
开始时,我计算我的杆应始终面向的方向。
然后在每一帧上,我使用我的基本方向重新计算该方向来纠正它。
当我的层次结构的根、中间罐和尖端在条纹线上对齐时,问题就开始了。
计算出的方向向量以随机方式指向。
负责进行该计算的代码如下所示:
private Vector3 CalculatePoleDirection(
Vector3 rootTransformPosition, Vector3 middleTransformPosition, Vector3 tipTransformPosition, Vector3 direction)
{
var middlePointDirection = CalculateMiddleDirection(
rootTransformPosition, middleTransformPosition, tipTransformPosition);
m_midPoint = middlePointDirection.Item2;
var dot = Vector3.Dot(middlePointDirection.Item1, direction);
Debug.Log(dot);
var deltaRotation = Quaternion.FromToRotation(middlePointDirection.Item1, direction);
//m_calculatedDirection = m_root.rotation * middlePointDirection;
var m_calculatedDirection = Quaternion.Inverse(deltaRotation) * direction;
//Inverting direction to always point in the same way.
return dot > 0 ? m_calculatedDirection : -m_calculatedDirection;
}
private (Vector3, Vector3) CalculateMiddleDirection(
Vector3 rootTransformPosition, Vector3 middleTransformPosition, Vector3 tipTransformPosition)
{
var rootToTip = tipTransformPosition - rootTransformPosition;
var rootToMiddle = middleTransformPosition - rootTransformPosition;
rootToTip.Normalize();
var dot = Vector3.Dot(rootToMiddle, rootToTip);
rootToMiddle.Normalize();
var middle = rootToTip * dot;
var middlePosition = rootTransformPosition + middle;
var middleToMiddlePoint = middleTransformPosition - middlePosition;
middleToMiddlePoint.Normalize();
return (middleToMiddlePoint, middlePosition);
}
我能做些什么来防止这种情况发生?