G3_PolygonAttr

# G3*_PolygonAttr

## 構文

      #include <nitro/gx/g3imm.h>
      #include <nitro/gx/g3b.h>
      #include <nitro/gx/g3c.h>

      void G3_PolygonAttr(
          int light,
          GXPolygonMode polyMode,
          GXCull cullMode,
          int polygonID,
          int alpha,
          int misc
      );

      // 以下ディスプレイリスト（コマンド列）作成用API
      void G3B_PolygonAttr(GXDLInfo* info, ...);
      void G3C_PolygonAttr(GXDLInfo* info, ...);
      void G3BS_PolygonAttr(GXDLInfo* info, ...);
      void G3CS_PolygonAttr(GXDLInfo* info, ...);

## 引数

info | コマンドリスト情報
light | どのライトを点灯するかを指定する4ビットのマスクです。
polyMode | ポリゴンモードを指定します。
cullMode | どの面をカリングするかを指定します。
polygonID | ポリゴンＩＤを指定します
alpha | α値を指定します。
misc | その他のポリゴン属性を指定するためのビットフィールドです。

## 返り値

なし。

## 説明

ポリゴン関連属性値を設定します。
light は4ビットのフラグで、下位4ビットで下位から順に、ライト0, ライト1, ライト2, ライト3のON/OFFを指定します。
polyMode はポリゴンモードを指定する引数で、`GXPolygonMode`型の値を指定します。
cullMode はポリゴンのカリング方式を指定する引数で、`GXCull`型の値を指定します。
polygonID はポリゴンＩＤを指定する引数で、0以上63以下を指定できます。半透明ポリゴン、シャドウポリゴン、及びエッジマーキング描画時に使用されます。
alpha はポリゴンのα値を指定する引数で、0以上31以下を指定できます。31の場合不透明ポリゴンで、0の場合ワイヤーフレーム表示（`G3X_AlphaTest()` の設定で表示しないようにすることが可能）、1以上30以下の場合は、半透明ポリゴンになります。
misc はその他の属性フラグをまとめたビットフィールドで、`GXPolygonAttrMisc`型の値の論理和を渡します。

`GX_POLYGONMODE_MODULATE` | モジュレーションモード
`GX_POLYGONMODE_DECAL` | デカルモード
`GX_POLYGONMODE_TOON` | トゥーンシェーディング／ハイライトシェーディングモード
`GX_POLYGONMODE_SHADOW` | シャドウポリゴンモード

`GX_CULL_ALL` | 両面表示しない
`GX_CULL_FRONT` | 表面を表示しない
`GX_CULL_BACK` | 裏面を表示しない
`GX_CULL_NONE` | 両面表示する

`GX_POLYGON_ATTR_MISC_NONE` | 何も指定しません。
`GX_POLYGON_ATTR_MISC_XLU_DEPTH_UPDATE` | 半透明ポリゴン描画時にデプスバッファを更新します。
`GX_POLYGON_ATTR_MISC_FAR_CLIPPING` | ポリゴンがFAR面と交差したらクリッピングします（指定しない場合は交差したら消去）。
`GX_POLYGON_ATTR_MISC_DISP_1DOT` | １ドットのポリゴンを表示します。`G3X_SetDisp1DotDepth()` も参照してください。
`GX_POLYGON_ATTR_MISC_DEPTHTEST_DECAL` | フラグメントのデプス値がデプスバッファのデプス値と等しい場合に描画します。 指定しない場合は、デプス値より小さい場合に描画します。
`GX_POLYGON_ATTR_MISC_FOG` | レンダリングエンジンでフォグブレンディングを行います。

以下に`GXPolygonMode`型と`GXCull`型と`GXPolygonAttrMisc`型の型定義を示しておきます。

    typedef enum
    {
        GX_POLYGONMODE_MODULATE = 0,
        GX_POLYGONMODE_DECAL = 1,
        GX_POLYGONMODE_TOON = 2,
        GX_POLYGONMODE_SHADOW = 3
    }
    GXPolygonMode;

    typedef enum
    {
        GX_CULL_ALL = 0,
        GX_CULL_FRONT = 1,
        GX_CULL_BACK = 2,
        GX_CULL_NONE = 3
    }
    GXCull;

    typedef enum
    {
        GX_POLYGON_ATTR_MISC_NONE = 0,
        GX_POLYGON_ATTR_MISC_XLU_DEPTH_UPDATE = 1 << REG_G3_POLYGON_ATTR_XL_SHIFT,
        GX_POLYGON_ATTR_MISC_FAR_CLIPPING = 1 << REG_G3_POLYGON_ATTR_FC_SHIFT,
        GX_POLYGON_ATTR_MISC_DISP_1DOT = 1 << REG_G3_POLYGON_ATTR_D1_SHIFT,
        GX_POLYGON_ATTR_MISC_DEPTHTEST_DECAL = 1 << REG_G3_POLYGON_ATTR_DT_SHIFT,
        GX_POLYGON_ATTR_MISC_FOG = 1 << REG_G3_POLYGON_ATTR_FE_SHIFT
    }
    GXPolygonAttrMisc;

## 参照

## 履歴

Ver. 2004/01/19