クリーチャーをアニメートする

適切な設定を行ったあとで、クリーチャーをアニメートすることができます。更新シーケンスは次のとおりです。

  1. ソルバにすべてのジョイントに対する現在の FK 変換を提供します(お使いのエンジンが現在の FK アニメーション ポーズを適用した後)。それぞれのチェーンとセクションのジョイントに対し、次の関数を呼び出す必要があります。
    HIKCreatureSetNodeStateTQSfv(mHIKCreature, mHIKInputOutputState,
    	    lizardProfile->mBoneMapping[i].mChainID, lizardProfile->mBoneMapping[i].mBoneID, 
    	    translation, orientation, scale);
    
    注:FK 変換は、キャラクタ スペース座標またはローカル スペース座標のいずれかを使用して、クリーチャー ソルバと通信できます。以下のコード スニペットでは、キャラクタ スペース座標用の関数呼び出しのみを説明します。ローカル スペース座標を使う場合は、FK 変換を HIKCreatureSetStateTransformTQS 関数に対する単一の呼び出しに設定する必要があります。クリーチャー ソルバにおけるキャラクタ スペース座標とローカル スペース座標の違いは、キャラクタ ソルバにおけるこの両者の違いと同じです。詳細については、「HIKCharacterState データのデータ セット関数」を参照してください。
  2. クリーチャーのセットアップ時に親オフセットを事前に宣言すると(「クリーチャーをセットアップする」を参照)、HIKCreatureSetParentOffsetfv を呼び出すことによって、関連するノードに対する現在のフレームの実際の親オフセットの値を設定できるようになりました。クリーチャー ソルバの親オフセットは、キャラクタ ソルバと同様に動作します。
  3. エフェクタをセットアップします(位置コンストレイントと方向コンストレイント)。次のコードは、トカゲの尻尾の目標位置をセットアップする方法を示しています。
    // Synchronize Effectors with current FK transforms
    HIKEffectorSetFromCreature(mHIKCreature, mHIKEffectorSetState, mHIKInputOutputState);
    // Get the current Effector position
    HIKCreatureGetEffectorStateTQSfv(mHIKEffectorSetState, TAIL_EFFECTOR, lTranslation, lOrientation, lScale);
    	
    // Move the current Effector position (tail position)
    lTranslation[0] += cosf(gCurrentTime*2.0f) * 80.0f;
    lTranslation[1] += cosf(gCurrentTime*2.5f) * 150.0f;
    lTranslation[2] -= sinf(gCurrentTime*5.0f) * 40.0f;
    // Provide the solver with the new Effector position (position constraint)
    HIKCreatureSetEffectorStateTQSfv(mHIKEffectorSetState, TAIL_EFFECTOR, lTranslation, lOrientation, lScale);
    // Enable the position constraint (full reach, no blend with FK)
    HIKCreatureSetTranslationActive(mHIKEffectorSetState, TAIL_EFFECTOR, 1.0f);
    // Enable pull, full force
    HIKCreatureSetPull(mHIKEffectorSetState, TAIL_EFFECTOR, 0.25f);
    
  4. ソルバを呼び出します。
    HIKCreatureSolveForEffectorSet(mHIKCreature, mHIKInputOutputState, mHIKEffectorSetState);
  5. 計算出力変換をゲーム エンジンに書き戻します。出力されたポーズを実際のゲーム エンジンのモデルに適用する必要があります。チェーンとセクションのそれぞれのジョイントに対して、次の関数を呼び出してこれらを変換する必要があります。
    HIKCreatureGetNodeStateTQSfv(mHIKCreature, mHIKInputOutputState,
    	    lizardProfile->mBoneMapping[i].mChainID, lizardProfile->mBoneMapping[i].mBoneID,
    	    translation, orientation, scale);
    

詳細については、Creature および Snake のサンプルを参照してください。「Molecule に基づくサンプル」を参照してください。