通過前面[1,2]將OGRE中的facial.mesh轉換爲xml進行分析後,明白了OGRE中Pose Animation的實現原理:在頂點初始位置與偏移位置(由poseoffset指定)之間進行線性插值。比如:頂點位置爲:x = 1 , y = 1 , z = 1,poseoffset指定該點的相對偏移量爲:pox = 2 , poy = 2 , poz = 1,如果規定在100s完成動畫,並假設FPS = 1(這有點誇張),則應該將相對偏移量進行100等分,每一秒在原來的頂點座標上增加:deltax = 0.02,deltay = 0.02,deltaz = 0.01。
程序中通過解析xml文件得到:submesh信息、每個submesh對應的poseoffset集。下面是其數據結構:
每個submesh用鏈表串起來,而一個submesh中可能存在多個pose動畫,這些pose動畫也採用鏈表結構。在程序中允許用戶選擇一個submesh作爲當前submesh,如果該submesh有pose動畫則在左邊列表中給出,用戶點擊相應的pose動畫可以播放。