README.jp 3.29 KB
------------------------------------------------------------------------
  F3DFLX2.Rej (FZEROX 用) マイクロコード説明書
------------------------------------------------------------------------

  F3DFLX2.Rej マイクロコードは F3DLX2.Rej を改造し, Alpha 値によるライ
ト処理を可能にしたバージョンです. これによりハイライト的な効果を得るこ
とが可能です. 

  ただし以下の制限があります.

  ● Diffuse ライトは 1 つしか使えない.
  ● 環境マップも使えない.
  ● Alpha Light と他の Alpha を使用する処理(FOGなど)とは共存できない.

  これ以外は F3DLX2.Rej と同じようにして使用可能です.
  
  Alpha Light 処理は FOG 機能を使用し, ライトのような効果を出すもので
すので, RDP には FOG を掛けるときの設定をします. ただし FogPosition は
必要ありません. FOG カラーがライトのカラーとなります.

  次に AlphaLight 構造体にデータを設定します.

	typedef	struct {
	  signed	short	offset;	/* Light が垂直のときの A の値 */
	  signed	short	slope;	/* A の変化係数                */
	  unsigned	short	amax;	/* A の最大値(クランプされる)  */
	  unsigned	short	pad1;
	  signed	short	dir[3];	/* 最も光る面の向き */
	  signed	short	pad2;
	} AlphaLight_t;
	
	typedef union {
	  AlphaLight_t		a;
	  long long int		force_alignment[2];
	} AlphaLight;

  Alpha Light 処理は頂点の法線と Light の方向との内積値 n を計算し, 
  Alpha の値を以下のようにテーブル引きで取得します.(-128 <= n <= 127)

     Alpha = Table[n + 128];

  このテーブルを制御することで面の質感が変わってきます. これをうまく利
  用することで, 環境マップのような処理が可能となります. このテーブルは
  g[s]SPSetALTable GBI で設定します. ハイライトを使用する前にこの GBI
  を呼び出してください.

  テーブルは AlphaTable 構造体として定義します. この構造体内部は,
  変換データが 256 bytes 並んでいるだけのものです.

  AlphaLight 構造体ではメンバ dir のみを使用します. 他のパラメータは無
  視されます. これは同様に g[s]SPLookAtY で登録します.

	static	AlphaLight	hilight = {
	 0, 0, 0, 0, 		/* 無視される */
	 0,120*256,0,		/* 面の向き   */
	 0			/* 無視される */
	};
	static	AlphaTable	table = {
	#include	"ALTable.h"
	};

	gSPSetALTable(gp ++, &table);
        gSPLookAtY(gp++, &hilight);

  面の向きのパラメータ dir が常に画面の左側を指すように設定すれば,
  疑似環境マップができます.

    そして AlphaLight 処理を有効にするには G_TEXTURE_GEN フラグを使用
  します.

	gSPSetGeometryMode(gp ++, 
                           G_TEXTURE_GEN|G_LIGHTING|G_SHADE|G_SHADING_SMOOTH);

  もし G_FOG が ON になっていた場合は, G_FOG が優先されますのでご注意
  ください.

  またライトカラーの指定において pad1,pad2 は必ず 0 を指定してください.
ただしライトの設定に gdSPDefLights*() を使用している場合には問題ありません.


● 変更履歴

  Mar-31-98  Release 2.01C
	最初のバージョン

  Apr-14-98  Release 2.02D
	空のマトリクスに対し POPMTX を行なったときはその POPMTX GBI を
	無視するようにした.
	S2DEX2 とロードが可能になった.
	F3DEX2 における Flat Shading のバグは Rejection マイクロコードに
	は関係ない.

  Apr-15-98  Release 2.02E
	HiLight の内積値から Alpha 値を求めるのにテーブル引きで行なう
	ことにした.

  Apr-23-98  Release 2.03F
	LOD 関係の GBI が正常に動かなかったのを修正.

  May-24-98  Release 2.04G
  	ライト1 の計算がおかしくなることがあることの修正.
  	gdSPDefLights*() を使用しないときのライトカラーの設定についての
  	記述の追加.
  	スピードがわずかに速くなった.

------------------------------------------------------------------------