2013-06-01 37 views
0

在我的應用程序中,我有一個3D模型,我可以通過手動設置值來旋轉,縮放,翻譯。我也可以提取給定點處的旋轉。所以我現在可以存儲關鍵幀,每個關節都有4x4矩陣。C++中的動畫,插值旋轉矩陣的關鍵幀

但是,現在我想在這些幀之間進行動畫處理。 我想要什麼: 在X秒內插入幀1到幀2。我怎樣才能在C++中實現這個? 我發現像http://www-scf.usc.edu/~amahajan/mocap/mocap4.html ...但我不知道如何寫在c + +

回答

0

好吧我解決了這個...特徵庫已經Quaternion1.slerp(Quaternion2,float T)函數。如果你不知道SLERP是什麼:slerp在一個四元數與另一個四元數之間插值,浮點數T可以被認爲是增量,它應該插入多少。例如:如果給slerp一個單位四元數,一個Y 90°四元數,浮點數T爲一個「0.5」值,則結果是一個四元數,Y 45°。有關斯萊普的詳細信息,您應該谷歌它,這是衆所周知的。

如果使用本徵,你可以簡單地讓四元數出旋轉矩陣:

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()); 
    }