Math 插值三维角度(在Garry&x27;s模型中)

Math 插值三维角度(在Garry&x27;s模型中),math,3d,angle,garrys-mod,Math,3d,Angle,Garrys Mod,我尝试在中插入角度,例如: local=mix(开始,结束,0.0-1.0) mix(v/a,v/a,n)是一种线性插值函数,它(可能)最容易描述为: 功能角度混合(开始:角度、结束:角度、数量:数字){ 返回开始*金额+结束*(1-金额) } 问题是:3D角度范围是-180到180,这会导致一些小故障。(据我的朋友说,这与你有关 我尝试了一些方法,但由于源引擎中角度的性质,这些方法不起作用: 功能角度:to360(){ 局部绝对=ang(abs(此:俯仰())、abs(此:偏航())、ab

我尝试在中插入角度,例如:

local=mix(开始,结束,0.0-1.0)
mix(v/a,v/a,n)是一种线性插值函数,它(可能)最容易描述为:

功能角度混合(开始:角度、结束:角度、数量:数字){
返回开始*金额+结束*(1-金额)
}
问题是:3D角度范围是-180到180,这会导致一些小故障。(据我的朋友说,这与你有关

我尝试了一些方法,但由于源引擎中角度的性质,这些方法不起作用:

功能角度:to360(){
局部绝对=ang(abs(此:俯仰())、abs(此:偏航())、abs(此:滚转())
本地节距=此:节距()<0?绝对:节距()+180:绝对:节距()
本地偏航=此:偏航()<0?绝对:偏航()+180:绝对:偏航()
本地滚动=此:滚动()<0?绝对:滚动()+180:绝对:滚动()
返回ang(俯仰、偏航、横摇)
}
或者在角度上增加180度


TL;DR三维角度插值面对这个问题(角度范围-180到180),最好的解决方案是使用一个函数,将其转换为0-360范围并返回到-180-180。

我最终使用了
quat(角度)
函数要将角度转换为四元数,我使用了内置的slerp(球面线性插值)函数,如下所示:

local Ang=slerp(quat(Angle1)、quat(Angle2)、Interp):toAngle()

这个问题与万向节锁无关。你说的是什么故障?如果处理正确,应该不会出现视觉伪影。当然,欧拉角不是插值的最佳表示。因此,结果可能看起来很奇怪(但没有伪影)。显示实际的插值代码。请确保仅将360°的倍数添加/减去角度。添加/减去180°会更改角度!@NicoSchertler如果对象的角度为[0,0,0]我将它绕一个特定的轴向右旋转,它将增加到180,但是,如果我向左旋转,它将从-180变为0,再变回180。当插值变为bazongas,并决定360度翻转实体,使其接近角度时,会出现毛刺。这就像它越过某条线,角度从正变为nEuler角非常不适合对其进行任何类型的几何变换。它们仅用于视觉编辑和无冗余表示。