我试图有一些算法计算自定义重力。为了让它按照我想要的方式工作我想把输入向量箝位到(-1,-1,-1)或者(+1,+1,+1)如果我使用规范化函数,它将变成(0.6,0.6,0.6)。我不能夹紧它,否则矢量方向会改变。
我的问题是-有一个内置的功能来做吗?还是我需要自己做归一化计算?
我认为它没有内置函数。
这里有一个关于如何将其编写为扩展方法的想法:
public static class VectorX {
public static Vector3 SquareNormalize (this Vector3 vector) {
var bounds = new Bounds(Vector3.zero, Vector3.one * 2f);
return bounds.ClosestPoint(vector);
}
}
使用它调用:
myVector.SquareNormalize();
我是这样做的:
using Unity.Mathematics;
using static Unity.Mathematics.math;
public static class CustomMathHelper
{
public static float3 ClampNormalize(float3 value, float normalizeLimit)
{
var maxValue = max(abs(value.x), max(abs(value.y), abs(value.z)));
if (maxValue > abs(normalizeLimit))
{
var factor = (1 / maxValue) * abs(normalizeLimit);
return new float3(factor * value.x, factor * value.y, factor * value.z);
}
return value;
}
}
留下未解决的问题,以防有人遇到已经这样做的框架方法