GX Demos

# グラフィックスサンプルデモ

## 場所

`$TwlSDK/build/demos/gx/UnitTours`

またグラフィックサンプルデモはすべて、`$TwlSDK/build/demos/gx/UnitTours/DEMOLib` 以下の `DEMO.h` および `libDEMO.a` を共通して利用しています。

## コンパイル方法

`$TwlSDK/build/demos/gx/UnitTours` ディレクトリに移り、

> `% make`

と入力します。コンパイルが始まり、実行ファイルである `.srl` ファイルやバイナリ情報を記述した `.nef` または `.tef` ファイルが、

> `$TwlSDK/build/demos/gx/UnitTours/(サンプル名)/bin/(プラットフォーム)/(ターゲット)/`

の下に生成されます。例えば、

> `$TwlSDK/build/demos/gx/UnitTours/2D_Oam_1/bin/ARM9-TS/Release/main.srl`

が `2D_Oam_1` デモの実行ファイルとなります。

## 実行方法

### NITRO ROM の場合

Ensata エミュレータを用いる場合

- ensata で `*.nef`, `*.srl` を実行する。

IS-NITRO-DEBUGGER を用いる場合

- IS-NITRO-DEBUGGER で `*.nlf` ファイルを読みこんで実行する。
- IS-NITRO-DEBUGGER で `*.srl` を実行する。
- コマンドラインから `loadrun.exe` で IS-NITRO-DEBUGGER で `*.srl` を実行する。

IS-TWL-DEBUGGER を用いる場合

- IS-TWL-DEBUGGER で `*.nlf` ファイルを読みこんで実行する。
- IS-TWL-DEBUGGER で `*.srl` を実行する。
- コマンドラインから `loadrun.TWL.exe` で IS-TWL-DEBUGGER で `*.srl` を実行する。

### TWL/NITRO HYBRID ROM の場合

IS-NITRO-DEBUGGER を用いる場合

- IS-NITRO-DEBUGGER で `*.srl` を実行する。
- コマンドラインから `loadrun.exe` で IS-NITRO-DEBUGGER で `*.srl` を実行する。

IS-TWL-DEBUGGER を用いる場合

- IS-TWL-DEBUGGER で `*.tlf` ファイルを読みこんで実行する。
- IS-TWL-DEBUGGER で `*.srl` を実行する。
- コマンドラインから `loadrun.TWL.exe` で IS-TWL-DEBUGGER で `*.srl` を実行する。

### TWL LIMITED ROM の場合

IS-TWL-DEBUGGER を用いる場合

- IS-TWL-DEBUGGER で `*.tlf` ファイルを読みこんで実行する。
- IS-TWL-DEBUGGER で `*.srl` を実行する。
- コマンドラインから `loadrun.TWL.exe` で IS-TWL-DEBUGGER で `*.srl` を実行する。

## 説明

#### ＢＧのサンプル

デモ名 | ディレクトリ | 動作
--- | --- | ---
`2D_CharBg_1` | `demos` | テキストモードでBGを表示します。
`2D_CharBg_2` | `demos` | アフィンモードでBGを表示します。キー操作で画面を回転させることができます。
`2D_CharBg_3` | `demos` | アフィンモードでBGを表示します。キー操作で画面を拡大縮小させることができます。
`2D_CharBg_4` | `demos` | BGにオフセットを設定します。キー操作で画面をスクロールさせることができます。
`2D_CharBg_5` | `demos` | BGの各キャラクタをフリップさせます。キー操作で画面の各キャラクタをフリップさせることができます。
`2D_CharBg_6` | `demos` | BGにモザイクをかけます。キー操作でモザイクのサイズを変更することができます。
`2D_CharBg_7` | `demos` | 2つのBGをαブレンディングします。キー操作でブレンド係数の調整をすることができます。
`2D_CharBg_8` | `demos` | 2つのウィンドウを表示します。キー操作でウィンドウの位置とサイズを変更することができます。
`2D_CharBg_9` | `demos` | BGの輝度を設定します。キー操作で輝度の変更ができます。
`2D_CharBg_256_16` | `demos` | アフィン拡張BGで256色×16パレットを使用して画面を表示します。
`2D_CharBg_256BMP` | `demos` | アフィン拡張256色ビットマップBGを使用して画面を表示します。
`2D_CharBg_Direct` | `demos` | アフィン拡張BGでダイレクトカラービットマップBGを使用して画面を表示します。
`2D_BmpBg_Vram` | `demos` | VRAM表示モードを用いて画面を表示します。
`2D_BmpBg_MainRam` | `demos` | メインメモリ表示モードを用いて画面を表示します。
`2D_CharBg_BankEx` | `demos` | GX_SetBankForBGEx() でBG-VRAMを直接指定して画面を表示します。

#### OBJのサンプル

デモ名 | ディレクトリ | 動作
--- | --- | ---
`2D_Oam_1` | `demos` | OBJを表示します。
`2D_Oam_2` | `demos` | OBJをアフィンモードで回転させます。キー操作でOBJを回転させることができます。
`2D_Oam_3` | `demos` | OBJをアフィン倍角モードで拡大縮小します。キー操作でOBJを拡大縮小させることができます。
`2D_Oam_4` | `demos` | OBJをフリップさせます。キー操作でOBJをフリップさせることができます。
`2D_Oam_5` | `demos` | OBJにモザイクをかけます。キー操作でモザイクのサイズを変更することができます。
`2D_Oam_256_16` | `demos` | 256色×16拡張パレットOBJを表示します。
`2D_Oam_Direct` | `demos` | 2次元マッピングのビットマップOBJを表示します。
`2D_Oam_Bmp1D` | `demos` | 1次元マッピングのビットマップOBJを表示します。
`2D_Oam_Char1D` | `demos` | 1次元マッピングのキャラクタOBJを表示します。
`2D_Oam_Translucent` | `demos` | 半透明OBJを表示します。キー操作で半透明OBJのブレンディング係数を変更することができます。
`2D_Oam_OBJWindow` | `demos` | 背景のBGを円形のOBJウィンドウを通して表示します。キー操作によってOBJウィンドウを移動することができます。

#### 3Dのサンプル

デモ名 | ディレクトリ | 動作
--- | --- | ---
`3D_Pol_OneTri` | `demos` | 画面に三角形を１つ表示します。
`3D_Pol_Simple` | `demos` | ライトや頂点カラー無しに回転する立方体を表示します。
`3D_Pol_Simple2` | `demos` | 立方体を表示しますが、G3_VtxXY(), G3_VtxXZ(), G3_VtxYZ() を使用します。
`3D_Pol_Simple3` | `demos` | 立方体を表示しますが、G3_Vtx10() を使用します。
`3D_Pol_Color` | `demos` | 立方体を、G3_Color() で頂点カラーを設定して表示します。
`3D_Pol_Light` | `demos` | 立方体を、G3_Normal() で法線ベクトルを設定して表示します。
`3D_Pol_LightColor` | `demos` | G3_Color() とG3_Normal() の順序の違いによる表示の違いを示します。
`3D_Pol_Tex4_Plett` | `demos` | 立方体に4色パレットテクスチャをはって表示します。
`3D_Pol_Tex16_Plett` | `demos` | 立方体に16色パレットテクスチャをはって表示します。
`3D_Pol_Tex256_Plett` | `demos` | 立方体に256色パレットテクスチャをはって表示します。
`3D_Pol_Tex32768` | `demos` | 立方体にダイレクトテクスチャをはって表示します。
`3D_Pol_Tex4x4` | `demos` | 立方体に4x4texel圧縮テクスチャをはって表示します。
`3D_Pol_Tex_Alpha` | `demos` | 立方体に半透明テクスチャをはって表示します。
`3D_Pol_Tex_Decal` | `demos` | 立方体にテクスチャをデカルモードではって表示します。
`3D_Pol_Toon` | `demos` | トゥーンシェーディングを使用して椅子を表示します。
`3D_Pol_High_Light` | `demos` | ハイライトシェーディングを使用して椅子を表示します。
`3D_Pol_TexSRT` | `demos` | G3_TexImageParam() でTexCoordソースを指定して、テクスチャの回転拡大縮小と平行移動を行います。
`3D_Pol_Env_Mapping` | `demos` | G3_TexImageParam() でNormalソースを指定して、環境マップの表示を行います。
`3D_Pol_Vertex_Source` | `demos` | G3_TexImageParam() でVertexソースを指定して、投影マッピングの表示を行います。
`3D_Pol_Translucent` | `demos` | 半透明ポリゴンを表示します。
`3D_Pol_Transparent` | `demos` | 透明（ワイヤーフレーム表示）ポリゴンを表示します。
`3D_Shininess` | `demos` | 鏡面反射輝度テーブルを設定し、鏡面反射輝度の変換を行います。
`3D_Fog` | `demos` | フォグがかかった空間を立方体が移動します。
`3D_Edge_Marking` | `demos` | 3つの立方体にそれぞれ違う色のエッジマーキングを施して表示します。
`3D_Alpha_Test` | `demos` | αテストを行います。立方体を2つ描画していますが、表示されるのは１つだけです。
`3D_Command_Pack` | `demos` | あらかじめ用意されたコマンドリスト（ディスプレイリスト)をDMA転送し、モデルを表示します。
`3D_Pol_MakeDL` | `demos` | コマンドリスト（ディスプレイリスト)をプログラム内で動的に生成し、モデルを表示します。
`3D_Pol_Split` | `demos` | Hブランク中に出力ディスプレイを切り替えることで両方のスクリーンに3Dオブジェクトを表示します。
`3D_PolAttr_1Dot` | `demos` | G3_PolygonAttr() でMISC_DISP_1DOTを指定して1ドットポリゴンの表示抑制を行います。キー操作によって1ドットポリゴンの表示・非表示を切り替えます。
`3D_PolAttr_DpthTest` | `demos` | G3_PolygonAttr() でMISC_DEPTHTEST_DECALを指定して、デカルポリゴンとしての表示を行ないます。キー操作によって効果のON/OFFを切り替えます。
`3D_PolAttr_DpthUpdate` | `demos` | G3_PolygonAttr() でMISC_XLU_DEPTH_UPDATEを指定して、半透明ポリゴン描画時のデプスバッファの更新行います。キー操作によって効果のON/OFFを切り替えます。
`3D_PolAttr_FARClip` | `demos` | G3_PolygonAttr() のFAR面交差ポリゴンのクリッピングを行います。キー操作によってFAR面の移動及びクリッピング効果のON/OFFを切り替えを行います。
`3D_Shadow_Pol` | `demos` | シャドウポリゴンを使用して影を表示します。
`3D_BoxTest` | `demos` | ボックステストを行います。回転移動する球体が立方体の面に接触しているかどうかの判定結果によって通常描画とワイヤーフレーム描画を切り替えます。
`AntiAlias` | `demos` | ポリゴンのアンチエイリアスをおこないます。
`FlipRepeat` | `demos` | テクスチャのフリップ、リピート設定を行ない表示します。キー操作によって設定を切り替えます。
`ClearColor` | `demos` | クリアカラーを設定して、カラーバッファの初期値を設定します。
`ClearImage` | `demos` | クリアイメージを使用してクリアカラーバッファの初期値に画像を設定して表示します。
`ClearDepthOnly` | `demos` | クリアカラーイメージスロットにVRAMを設定せずに、クリアデプスイメージのみ単体で使用します。この時クリアカラーはすべて0で初期化されます。
`CurrentMtx` | `demos` | カレントクリップ行列を取得しデバッグ出力に表示します。
`PosVecTest` | `demos` | カレントクリップ座標行列によって変換した位置座標と、カレント方向ベクトル行列によって変換したベクトルを取得してデバッグ出力に表示します。
`LinesOver` | `demos` | ラインズオーバーの発生を検出してデバッグ出力に表示します。
`RamOverFlow` | `demos` | ポリゴンリストRAM, 頂点リストRAMのオーバーフローを検出してデバッグ出力に表示します。
`ViewPort` | `demos` | ビューポートを設定して表示します。キー操作によってビューポートのサイズと位置を移動することができます。

#### 画面効果を使用するサンプル

デモ名 | ディレクトリ | 動作
--- | --- | ---
`MasterBright` | `demos` | 輝度アップ／ダウンの特殊効果を使用して画面を表示します。キー操作によって画面輝度を変更することができまます。
`Capture` | `demos` | 画面のキャプチャー機能を使用してモーションブラー効果を表示します。
`Window` | `demos` | Hブランク割り込み処理を使用してウィンドウを変形表示します。
`Window_HDMA` | `demos` | Hブランク自動起動DMAを使用してウィンドウを変形表示します。

#### サブグラフィックスエンジンとBottom LCDを使用するサンプル

デモ名 | ディレクトリ | 動作
--- | --- | ---
`Sub_CharBg_1` | `demos` | `2D_CharBg_1`と同様の操作をサブグラフィックスエンジンに対して行い、Bottom LCDに表示します。
`Sub_CharBg_2` | `demos` | `2D_CharBg_2`と同様の操作をサブグラフィックスエンジンに対して行い、Bottom LCDに表示します。
`Sub_CharBg_3` | `demos` | `2D_CharBg_3`と同様の操作をサブグラフィックスエンジンに対して行い、Bottom LCDに表示します。
`Sub_CharBg_4` | `demos` | `2D_CharBg_4`と同様の操作をサブグラフィックスエンジンに対して行い、Bottom LCDに表示します。
`Sub_CharBg_5` | `demos` | `2D_CharBg_5`と同様の操作をサブグラフィックスエンジンに対して行い、Bottom LCDに表示します。
`Sub_CharBg_6` | `demos` | `2D_CharBg_6`と同様の操作をサブグラフィックスエンジンに対して行い、Bottom LCDに表示します。
`Sub_CharBg_7` | `demos` | `2D_CharBg_7`と同様の操作をサブグラフィックスエンジンに対して行い、Bottom LCDに表示します。
`Sub_CharBg_8` | `demos` | `2D_CharBg_8`と同様の操作をサブグラフィックスエンジンに対して行い、Bottom LCDに表示します。
`Sub_CharBg_9` | `demos` | `2D_CharBg_9`と同様の操作をサブグラフィックスエンジンに対して行い、Bottom LCDに表示します。
`Sub_Oam_1` | `demos` | `2D_Oam_1`と同様の操作をサブグラフィックスエンジンに対して行い、Bottom LCDに表示します。
`Sub_Oam_2` | `demos` | `2D_Oam_2`と同様の操作をサブグラフィックスエンジンに対して行い、Bottom LCDに表示します。
`Sub_Oam_3` | `demos` | `2D_Oam_3`と同様の操作をサブグラフィックスエンジンに対して行い、Bottom LCDに表示します。
`Sub_Oam_4` | `demos` | `2D_Oam_4`と同様の操作をサブグラフィックスエンジンに対して行い、Bottom LCDに表示します。
`Sub_Oam_5` | `demos` | `2D_Oam_5`と同様の操作をサブグラフィックスエンジンに対して行い、Bottom LCDに表示します。
`Sub_Double3D` | `demos` | キャプチャを用いることにより上下のLCDに3D面表示を擬似的に行います。

## 動作

`3D_Pol_Transparent は ensata では正常動作しません。`

## 参照

`グラフィックス関数一覧`

## 履歴

2008/07/11 TWLに対応した記述に変更
2007/02/23 VCount デモの削除
2006/02/27 2D_CharBg_256BMPの解説が誤っていたのを修正。
2005/07/22 サンプルデモ名の誤りを修正。
2005/05/10 2D_CharBg_BankEx サンプルデモの説明を追加。
2005/03/02 記述内容を現在のサポート環境の状況に合うよう修正
2004/08/17 IS-NITRO-EMULATORについての表記を統一
2004/07/10 .bin から .srl へ変更。
2004/02/20 サブグラフィックスエンジンとBottom LCD使用サンプルを追加。
2004/01/09 初版