#include <nnsys/g3d/kernel.h>
typedef struct NNSG3dRenderObj_
{
u32 flag; // NNSG3dRenderObjFlag
NNSG3dResMdl* resMdl;
NNSG3dAnmObj* anmMat;
NNSG3dFuncAnmBlendMat funcBlendMat;
NNSG3dAnmObj* anmJnt;
NNSG3dFuncAnmBlendJnt funcBlendJnt;
NNSG3dAnmObj* anmVis;
NNSG3dFuncAnmBlendVis funcBlendVis;
// コールバック用情報
NNSG3dSbcCallBackFunc cbFunc; // NULLならばコールバックはない。
u8 cbCmd; // 停止位置をコマンドで指定。NNS_G3D_SBC_*****(res_struct.hで定義)
u8 cbTiming; // NNSG3dSbcCallBackTiming(sbc.hで定義)
u16 dummy_;
// レンダリング開始直前に呼ばれる。一般的にNNS_G3dRSの
// コールバックベクタを設定するために使われる。
NNSG3dSbcCallBackFunc cbInitFunc;
// ユーザーが管理する領域へのポインタ
// あらかじめポインタを設定しておけばコールバックでの使用が可能.
void* ptrUser;
u8* ptrUserSbc;
struct NNSG3dJntAnmResult_* recJntAnm;
struct NNSG3dMatAnmResult_* recMatAnm;
u32 hintMatAnmExist[NNS_G3D_SIZE_MAT_MAX / 32];
u32 hintJntAnmExist[NNS_G3D_SIZE_JNT_MAX / 32];
u32 hintVisAnmExist[NNS_G3D_SIZE_JNT_MAX / 32];
}
NNSG3dRenderObj;
NNSG3dRenderObj構造体は、モデルの描画に際して必要なデータをまとめた構造体です。NNSG3dRenderObj構造体は、以下のようなデータを保持しています。
NNSG3dResMdl)へのポインタ
NNSG3dAnmObj)へのポインタ
NNSG3dJntAnmResult, NNSG3dMatAnmResult)へのポインタ
NNSG3dRenderObj構造体を利用してモデルを描画するためには、以下のような処理が必要となります。
NNS_G3dAllocRenderObj関数を使用して(利用せずにスタックに確保しても可)、構造体の領域を確保します。
NNS_G3dRenderObjInit関数を使用して、構造体を初期化します。
NNS_G3dRenderObjAddAnmObj関数でアニメーションオブジェクトを追加します。
NNS_G3dRenderObjSetCallBack関数やNNS_G3dRenderObjSetInitFunc関数でコールバック関数を登録します。
NNS_G3dRenderObjSetJntAnmBuffer関数や NNS_G3dRenderObjSetMatAnmBuffer関数を使用してバッファをNNSG3dRenderObj構造体に登録します。
NNS_G3dDraw関数を使用して描画します。
NNS_G3dFreeRenderObj関数を使用して、確保した領域を解放します。
なお、NNS_G3dDraw1Mat1Shp関数を使用して描画する場合にはNNSG3dRenderObj構造体を用意する必要はありません。
2007/05/17 構造体の定義を追加
2004/10/12 初版