我想要一个统一的通用线性插值函数。它应该适用于float,Vector2,Vector3,Vector4,Color,Quaternion
勒平需要这种逻辑。
static T LerpGeneric<T>(T a, T b, float t)
{
return a * (1f - t) + b * t;
}当然,它不编译,我也不确定这个逻辑是否也适用于四元数。
发布于 2022-03-07 12:00:47
目前还没有一种简单的方法来做到这一点。.Net泛型与c++模板不一样,因此,如果希望特定方法可用,则需要使用泛型约束。不幸的是,对于内置类型,没有这样的接口可用。
提供这样的功能已经被多次提出。最新的版本是一般数学,但这只是在.Net 6中的预览版。我假设.Net 6还没有得到Unity3d的支持。
解决方法可以是将相加和乘方法委托给委托,即
public LerpGeneric<T>(T a, T b, float t, Func<T, T, T> mul, Func<T, T, T> add)
=> add(mul(a , (1f - t)) , Mul(b , t));但这可能比为每种类型提供单独的实现要复杂得多。因此,我可能会咬紧牙关,提供6种实现。实际上,这将不是很多代码,所以维护开销应该是最小的。
四元数通常有一个Lerp实现,因为这是首先使用四元数的主要原因之一。Unity3ds向量和颜色也已经提供了lerp实现,对于浮点数,您可以使用Mathf.Lerp。
https://stackoverflow.com/questions/71380486
复制相似问题