アニメーション アイテムは、 CTaAnim::GetObjectItem() で取得、 CTaAnim::CreateObjectItem() で追加します。
また、複数のキー フレームを追加する場合は、
//キー フレームのループ for(UINT i = 0; i < nKeys; ++i) { //キー フレームの追加 float KeyFrame = 〜; float Value = 〜; pAnimItem->InsertKeyFrame(KeyFrame, Value); } //スプライン曲線の更新 pAnimItem->UpdateSpline();
アニメーション バリュー(CTaAnimValues)を作成し、 CTaAnimValues::StoreObjectValues() でオブジェクトの現在のデータを保持しておきます。
CTaAnimValues* pAnimValues = TaCreateAnimValues(); pAnimValues->StoreObjectValues(pAnim, pObject);
CTaAnim::AnimateObjectItems() で指定フレームについてのオブジェクトのアニメーションを実行します。
float Frame = 〜;
pAnim->AnimateObjectItems(Frame, pObject);
この時点でオブジェクトに関するアニメーション データは更新されているので、 CTaObject::GetTransform() でオブジェクトのローカル変換行列を取得したりなどできます。
オブジェクトのデータの取得が終わったら、 CTaAnimValues::Restore() でオブジェクトのデータを復元し、 最後にアニメーション バリュー(CTaAnimValues)を削除します。
pAnimValues->Restore(pAnim); TaDeleteAnimValues(pAnimValues);
まず、複製用のアニメーション(CTaAnim)を作成し、 これを引数にして CTaAnim::GetConstrainedObjectItems() を実行します。 この関数は、IKハンドル自体にアニメーションがセットされている場合、 IKハンドルが参照しているオブジェクトのアニメーションに変換してコピーします。
CTaAnim* pDupAnim = TaCreateAnim(); if(pAnim->GetConstrainedObjectItems(pDupAnim, 1.0f, TRUE)) { 〜 }
複製したアニメーションを用いてデータの出力などを行います。
CTaAnimItem* pItem = pDupAnim->GetObjectItem(TA_ANIM_ITEM_TRANSLATE_X, pObject); if(pItem) { 〜 }
使用が終わったら、複製したアニメーションを削除します。
TaDeleteAnim(pDupAnim);