我如何在vector3/float3值上应用规范化,其幅度大于1?



我试图有一些算法计算自定义重力。为了让它按照我想要的方式工作我想把输入向量箝位到(-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;
}
}

留下未解决的问题,以防有人遇到已经这样做的框架方法

最新更新