# NNSG3dResMdl

## 構造体の定義

    #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`構造体は、１つのモデルデータを格納するデータ構造の根に対応する構造体で、モデルデータ内の情報にアクセスする場合はこの構造体を経由することになります。この構造体は、.nsbmdファイル内のデータとして存在していてg3dcvtrによる.imdファイルのコンバート時に作成されています。
`NNSG3dResMdl`構造体からは以下のようなデータにアクセスすることができます。

- マテリアル
- シェイプ
- SBC列（モデルの構造をシリアライズしてエンコードしたもの）
- 各ノードの静止位置情報
- 使用ＣＧツール・ポリゴン数等の情報

この構造体とこの構造体から到達できるマテリアルやシェイプ等の内容は、描画中にＧ３Ｄライブラリから変更されることはありません(コールバック関数内で変更される場合を除く)。

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 初版