# NNSG3dGlb

## 構造体の定義

    #include <nnsys/g3d/glbstate.h>

    typedef struct
    {
        u32     cmd0;             // G3_MtxMode -> G3_LoadMtx44 -> G3_MtxMode -> G3_LoadMtx43
        u32     mtxmode_proj;     // GX_MTXMODE_PROJECTION
        MtxFx44 projMtx;          // 射影行列
        //
        u32     mtxmode_posvec;   // GX_MTXMODE_POSITION_VECTOR
        MtxFx43 cameraMtx;        // カメラ行列

        u32     cmd1;             // G3_LightVector * 4
        u32     lightVec[4];      // ライトベクトル

        u32     cmd2;             // G3_MatColorDiffAmb -> G3_MatColorSpecEmi -> G3_PolygonAttr -> G3_ViewPort
        u32     prmMatColor0;
        u32     prmMatColor1;
        u32     prmPolygonAttr;
        u32     prmViewPort;

        u32     cmd3;             // G3_LightColor * 4
        u32     lightColor[4];    // ライトカラー

        u32     cmd4;             // G3_MultMtx43 -> G3_Scale -> G3_TexImageParam
        MtxFx33 prmBaseRot;
        VecFx32 prmBaseTrans;
        VecFx32 prmBaseScale;
        u32     prmTexImageParam;

        u32 flag;   // NNSG3dGlbFlag
        MtxFx43 invCameraMtx;
        MtxFx43 srtCameraMtx;
        MtxFx43 invSrtCameraMtx;

        MtxFx43 invBaseMtx;

        MtxFx44 invProjMtx;
        MtxFx44 invCameraProjMtx;

        VecFx32 camPos;
        VecFx32 camUp;
        VecFx32 camTarget;
    }
    NNSG3dGlb;

## 構造体の解説

`NNSG3dGlb`構造体は、射影行列・ライトの色や方向・カメラ位置や向き、といった複数のモデルやシーン全体で使用されるデータを管理する構造体です。`NNSG3dGlb`構造体は、以下のようなデータを保持しています。

- 射影行列
- カメラ行列（カメラの位置・視点・上方向）
- ライトの方向
- ライトカラー
- ビューポート
- オブジェクトのワールド変換行列（SRT）
- デフォルトのマテリアルカラー、ポリゴンアトリビュート
- キャッシュされた各種行列

NNSG3dGlb構造体のインスタンスは、グローバル変数の`NNS_G3dGlb`のみであり、使用前に`NNS_G3dGlbInit`関数を呼び出すことで初期化することができます。構造体の持つデータメンバへのアクセスはNNS_G3dGlb*関数群を通すようにしてください。
一般に、`NNS_G3dDraw`関数を使用して描画する前に`NNS_G3dGlbFlushP`・`NNS_G3dGlbFlushVP`・`NNS_G3dGlbFlushWVP`関数のどれかを使用することにより、`NNSG3dGlb`構造体に設定されたデータをジオメトリエンジンに反映させることができます。デフォルトのマテリアルカラー等は、`NNS_G3dMdlUseGlbXXXXX`関数をモデルリソースに対して使用した場合、この構造体の設定が使用されるようになります。
なお、ビルボードを含むモデル等、描画中にカメラ行列等の情報が必要となった場合、G3Dは`NNSG3dGlb`構造体に記録されているデータを使用する場合があることに注意してください。

## 参照

グローバルステート

## 履歴

2007/05/17 構造体の定義を追加
2004/10/12 初版