在我的应用程序中,我有一个3D-Model,我可以通过手动设置值来旋转、缩放、平移。我还可以在给定点提取旋转。因此,我现在可以存储关键帧,每个关节的4x4矩阵。
但是,现在我想在这些帧之间设置动画。我想要的:在X秒内从第1帧插值到第2帧。如何在C++中实现此功能??我找到了像http://www-scf.usc.edu/~amahajan/mocap/mocap4.html ...but这样的东西,我不知道怎么用c++写这个
发布于 2013-06-03 17:00:11
好的,我解决了浮点库已经有一个this...the 1.slerp(Quaternion2,this...the T)函数。如果你不知道SLERP是什么: slerp在一个四元数和另一个四元数之间进行插值,浮点T可以看作是增量,它应该插值多远。例如:如果你给slerp一个单位四元数,一个Y 90°四元数,和一个"0.5“值的浮动T,结果是一个Y 45°的四元数。有关slerp的详细信息,您应该在google上搜索它,这是众所周知的。
如果使用Eigen,则可以简单地从旋转矩阵中生成四元数:
Matrix3f m;
Quaternion<float> q1=m.toRotationMatrix();有了这个,我简单地创建了一个从0.01到1.00的循环,增量为0.01。您应该在另一个线程中完成此工作:
for(double i=0.0;i<1.0;i=i+0.01)
{
//let this thread sleep for 10 millisec, this gives us a 100hertz rate
//with this, the whole animation is over in 1 second
boost::this_thread::sleep(boost::posix_time::millisec(10));
//q1= first frame, q2 = second frame
Quaternion<float> q3(q1.slerp(i,q2));
//now apply the quaternion
// for each "bone", or node you need to apply a SLERPed quaternion
m_node->setRotation(q3.toRotationMatrix());
}https://stackoverflow.com/questions/16871891
复制相似问题