README.jp
3.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
------------------------------------------------------------------------
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*() を使用しないときのライトカラーの設定についての
記述の追加.
スピードがわずかに速くなった.
------------------------------------------------------------------------