首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通用LERP促进统一

通用LERP促进统一
EN

Stack Overflow用户
提问于 2022-03-07 11:37:21
回答 1查看 161关注 0票数 -1

我想要一个统一的通用线性插值函数。它应该适用于float,Vector2,Vector3,Vector4,Color,Quaternion

勒平需要这种逻辑。

代码语言:javascript
复制
static T LerpGeneric<T>(T a, T b, float t)
{
    return a * (1f - t) + b * t;
}

当然,它不编译,我也不确定这个逻辑是否也适用于四元数。

EN

回答 1

Stack Overflow用户

发布于 2022-03-07 12:00:47

目前还没有一种简单的方法来做到这一点。.Net泛型与c++模板不一样,因此,如果希望特定方法可用,则需要使用泛型约束。不幸的是,对于内置类型,没有这样的接口可用。

提供这样的功能已经被多次提出。最新的版本是一般数学,但这只是在.Net 6中的预览版。我假设.Net 6还没有得到Unity3d的支持。

解决方法可以是将相加和乘方法委托给委托,即

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71380486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档