# 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 | １つのアニメーションリソースへのポインタ
funcAnm | アニメーションを計算する関数へのポインタ
next | `NNS_G3dRenderObjBindAnmObj`, `NNS_G3dRenderObjReleaseAnmObj`で設定される。
resTex | テクスチャリソースへのポインタ。テクスチャパターンアニメーションのときだけ使用される
priority | `NNSG3dRenderObj`に登録される際の優先順位
numMapData | mapData配列の長さ
mapData | モデルリソースのマテリアルＩＤ・ジョイントＩＤとアニメーションリソースのインデックスを対応させるためのテーブル。

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

1. `NNS_G3dAllocAnmObj`関数を使用して、構造体の領域を確保します。この構造体のサイズはモデルのマテリアル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 初版