#include <nnsys/g3d/binres/res_struct.h>
typedef struct NNSG3dResMdl_
{
u32 size; // モデルのサイズ
u32 ofsSbc; // &NNSG3dResMdlを起点としたSbcへのオフセット
u32 ofsMat; // &NNSG3dResMdlを起点としたNNSG3dResMatへのオフセット
u32 ofsShp; // &NNSG3dResMdlを起点としたNNSG3dResShpへのオフセット
u32 ofsEvpMtx; // &NNSG3dResMdlを起点としたNNSG3dEvpMtxへのオフセット
NNSG3dResMdlInfo info; // モデル情報(固定長)
NNSG3dResNodeInfo nodeInfo; // ノード情報
// SBC
// Materials
// Shapes
// EvpMtxs
}
NNSG3dResMdl;
typedef struct NNSG3dResMdlInfo_
{
u8 sbcType;
u8 scalingRule;
u8 texMtxMode;
u8 numNode;
u8 numMat;
u8 numShp;
u8 firstUnusedMtxStackID;
u8 dummy_;
fx32 posScale;
fx32 invPosScale;
u16 numVertex;
u16 numPolygon;
u16 numTriangle;
u16 numQuad;
fx16 boxX, boxY, boxZ;
fx16 boxW, boxH, boxD;
fx32 boxPosScale;
fx32 boxInvPosScale;
}
NNSG3dResMdlInfo;
NNSG3dResMdl構造体は、1つのモデルデータを格納するデータ構造の根に対応する構造体で、モデルデータ内の情報にアクセスする場合はこの構造体を経由することになります。この構造体は、.nsbmdファイル内のデータとして存在していてg3dcvtrによる.imdファイルのコンバート時に作成されています。
NNSG3dResMdl構造体からは以下のようなデータにアクセスすることができます。
この構造体とこの構造体から到達できるマテリアルやシェイプ等の内容は、描画中にG3Dライブラリから変更されることはありません(コールバック関数内で変更される場合を除く)。
| NNSG3dResMdlInfo構造体のメンバ | 説明 |
|---|---|
| sbcType | Structure Byte Codeタイプ識別子(NNSG3dSbcType) |
| scalingRule | スケーリングルール識別子(NNSG3dScalingRule) |
| texMtxMode | テクスチャ行列計算方式識別子(NNSG3dTexMtxMode) |
| numNode | モデル内のノード数 |
| numMat | モデル内のマテリアル数 |
| numShp | モデル内のシェイプ数 |
| firstUnusedMtxStackID | 行列スタックの行列でこのモデルの描画時に使わない行列の最初のID |
| posScale | 頂点位置座標に乗ずるスケール値。ジオメトリエンジンのスケールコマンドへ渡す値 |
| invPosScale | posScaleの逆数 |
| numVertex | .imdファイルにおける<output_info>要素のvertex_size属性の値がそのまま入っている。 |
| numPolygon | .imdファイルにおける<output_info>要素のpolygon_size属性の値がそのまま入っている。 |
| numTriangle | .imdファイルにおける<output_info>要素のtriangle_size属性の値がそのまま入っている。 |
| numQuad | .imdファイルにおける<output_info>要素のquad_size属性の値がそのまま入っている。 |
| boxX, boxY, boxZ | .imdファイルにおける<box?test>要素のxyz属性の値がそのまま入っている。 |
| boxW, boxH, boxD | .imdファイルにおける<box?test>要素のwhd属性の値がそのまま入っている。 |
| boxPosScale | ボックスの座標やサイズに乗ずるスケール値。 |
| boxInvPosScale | boxPosScaleの逆数 |
2007/05/17 構造体の定義を追加
2004/10/13 初版