如何在给定时间(或速度)的 2 个欧拉角之间正确插值?
例如,我想实现一个简单的眨眼,首先向下旋转盖子,然后再向上旋转。眨眼的时间应该在 50 到 500 毫秒之间。目前我只是计算 x 值(向下):
Eigen::Vector3f rotateLeftLidDown(float step)
{
return Eigen::Vector3f(-step*COMPLETE_CLOSURE,0,0);
}
//INTERPOLATION
float duration =gen_random_float(0.05f,0.5f);
for(float i=0;i<1;i=i+(duration))
{
LeftLid.push_back(rotateLeftLidDown(i));
}
for(float i=1;i>0;i=i-(duration))
{
LeftLid.push_back(rotateLeftLidUp(i));
}
每个计算步骤稍后都会从麻袋中弹出并以100 赫兹的速率应用于节点。这种方法可以快速或慢速闪烁,但它看起来并不正确。我不考虑眼睑的速度,而且这里的“插值”真的很脏......将欧拉转换为四元数或旋转矩阵更好吗?
像眨眼(500 毫秒)这样的功能,它考虑在 70 毫秒内向下 280 毫米/秒的峰值速度并以大约 100 毫米/秒的速度张开眼睑,这对我很有帮助。