#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とアニメーションリソースのインデックスを対応させるためのテーブル。 |
NNSG3dAnmObjはNNS_G3dRenderObjAddAnmObj関数を用いてNNSG3dRenderObj構造体に登録することによって、アニメーションを再生するために用いられます。NNSG3dAnmObjを使用するためには以下のような処理が必要となります。
NNS_G3dAllocAnmObj関数を使用して、構造体の領域を確保します。この構造体のサイズはモデルのマテリアルIDかジョイントIDの数によってサイズが異なることに注意してください。
NNS_G3dAnmObjInit関数を使用してNNSG3dAnmObj構造体を初期化します。
NNS_G3dRenderObjAddAnmObj関数でNNSG3dRenderObjにアニメーションオブジェクトを登録します。
NNS_G3dAnmObjSetFrame関数で再生するフレーム数を、NNS_G3dAnmObjSetBlendRatio関数でブレンド比率(通常ジョイントアニメーションが複数登録されている場合のみ)を設定します。
NNS_G3dDraw関数を使用してアニメーションつきモデルを描画します。
NNS_G3dRenderObjRemoveAnmObj関数でアニメーションオブジェクトをNNSG3dRenderObjから取り除きます。
NNSG3dAnmObjを使用しなくなった場合はNNS_G3dFreeAnmObj関数を使用して、構造体の領域を解放します。
なお、NNS_G3dDraw1Mat1Shp関数を使用して描画する場合にはアニメーションを使用することはできません。
2007/05/17 構造体の定義を追加
2004/10/12 初版