对四元数进行球面插值运算,t>0&&t<1
Quaternion InterQua(Quaternion from,Quaternion to,float t)
{
if (t>=1)
{
t=0.9999;
}
else if (t<=0)
{
t=0.00001;
}
//计算开始方位和结束方位的点积
double cosO=from.Dot(to);
if(cosO<0){
from=-from;
cosO=cosO;
}
//进行插值运算
double kO,kl;
if(cosO>0.9999){
kO=1-t;
kl=t;
}else{
double sinO=Ogre::Math::Sqrt(1-Ogre::Math::Pow(cosO,2));
double o=(Ogre::Math::ATan2(sinO,cosO)).valueRadians();
float one=1.00/sinO;
kO=Ogre::Math::Sin((1-t)*o)*one;
kl=Ogre::Math::Sin(t*o)*one;
}
//输出在t参数下的插值结果
Quaternion qua=Quaternion::ZERO;
qua=from*kO+to*kl;
return qua;
}
四元数的球面差值 ogre
最新推荐文章于 2022-02-18 15:21:12 发布