NNSG3dAnmObj

構造体の定義

#include <nnsys/g3d/kernel.h>

typedef struct NNSG3dAnmObj_
{
    fx32                  frame;
    fx32                  ratio;
    void*                 resAnm;     // リソースファイル内アニメーションデータブロックへのポインタ
    void*                 funcAnm;    // 各アニメーションの関数ポインタにキャストされる。デフォルトが入るが変更できる
    struct NNSG3dAnmObj_* next;
    const NNSG3dResTex*   resTex;     // テクスチャブロックの情報が必要な場合(テクスチャパターンアニメーションのみ)
    u8                    priority;
    u8                    numMapData;
    u16                   mapData[1]; // numMapData個の配列になる(NNSG3dAnmObjMapData)
}
NNSG3dAnmObj;

構造体の解説

NNSG3dAnmObj構造体は、アニメーションデータをアニメーションリソースから取り出すのに必要になるデータをまとめた構造体です。NNSG3dAnmObj構造体は以下のようなデータを保持しています。mapDataは可変長の配列なので、sizeof(NNSG3dAnmObj)でサイズを取得することは正しくありません。

NNSG3dAnmObj構造体のメンバ 説明
frame アニメーションのフレームカウント
ratio アニメーションのブレンド比率(モーションブレンドを行う場合に利用される)
resAnm 1つのアニメーションリソースへのポインタ
funcAnm アニメーションを計算する関数へのポインタ
next NNS_G3dRenderObjBindAnmObj, NNS_G3dRenderObjReleaseAnmObjで設定される。
resTex テクスチャリソースへのポインタ。テクスチャパターンアニメーションのときだけ使用される
priority NNSG3dRenderObjに登録される際の優先順位
numMapData mapData配列の長さ
mapData モデルリソースのマテリアルID・ジョイントIDとアニメーションリソースのインデックスを対応させるためのテーブル。


NNSG3dAnmObjNNS_G3dRenderObjAddAnmObj関数を用いてNNSG3dRenderObj構造体に登録することによって、アニメーションを再生するために用いられます。NNSG3dAnmObjを使用するためには以下のような処理が必要となります。

  1. NNS_G3dAllocAnmObj関数を使用して、構造体の領域を確保します。この構造体のサイズはモデルのマテリアルIDかジョイントIDの数によってサイズが異なることに注意してください。
  2. NNS_G3dAnmObjInit関数を使用してNNSG3dAnmObj構造体を初期化します。
  3. NNS_G3dRenderObjAddAnmObj関数でNNSG3dRenderObjにアニメーションオブジェクトを登録します。
  4. NNS_G3dAnmObjSetFrame関数で再生するフレーム数を、NNS_G3dAnmObjSetBlendRatio関数でブレンド比率(通常ジョイントアニメーションが複数登録されている場合のみ)を設定します。
  5. NNS_G3dDraw関数を使用してアニメーションつきモデルを描画します。
  6. アニメーションの再生をやめる場合は、NNS_G3dRenderObjRemoveAnmObj関数でアニメーションオブジェクトをNNSG3dRenderObjから取り除きます。
  7. もうNNSG3dAnmObjを使用しなくなった場合はNNS_G3dFreeAnmObj関数を使用して、構造体の領域を解放します。

なお、NNS_G3dDraw1Mat1Shp関数を使用して描画する場合にはアニメーションを使用することはできません。

参照

カーネル

履歴

2007/05/17 構造体の定義を追加
2004/10/12 初版