HowToSetup
1.74 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
------------------------------------------------------------------------------
通常の 3 角形の Setup 手順
Jun 05, 1997
開発 3 部 安本 吉孝
------------------------------------------------------------------------------
頂点ロード時に座標変換を終了しているものとする.
スクリーン座標 (Xn, Yn)
頂点カラー (Rn, Gn, Bn, An)
テクスチャ座標 (Sn, Tn)
深さ計算パラメータ (invWin,invWfn)
V0 ( X0,Y0, R0,G0,B0,A0, S0,T0, invWi0,invWf0 )
V1 ( X1,Y1, R1,G1,B1,A1, S1,T1, invWi1,invWf1 )
V2 ( X2,Y2, R2,G2,B2,A2, S2,T2, invWi2,invWf2 )
+-----+-----+-----+-----+--+--+--+--+-----+-----+
ZsVtx | X | Y |invWi|invWf|R |G |B |A | S | T |
+-----+-----+-----+-----+--+--+--+--+-----+-----+
{
// Step 1: 外積計算を行ない, ポリゴンの裏表を判定する
r = (X0-X1)*(Y2-Y1) - (Y0-Y1)*(X2-X1);
if (r 裏面) goto 終了;
// Step 2: Reject フラグを調べ, Reject 処理を行なう
// Step 3: Y ソートを行なう
sort(V0, V1, V2);
V0 = Vmin;
V1 = Vmid;
V2 = Vmax;
// Step 4: 外積値再計算, (1/r)の計算
r = (X0-X1)*(Y2-Y1) - (Y0-Y1)*(X2-X1);
invr = 1 / r;
// Step 5: カラーデータ取得および桁あわせ
// Step 6: invWn の最大値を取得し, その値で正規化する
invWnear = max(invW0, invW1, invW2);
invW0 = invW0 / invWnear;
invW1 = invW1 / invWnear;
invW2 = invW2 / invWnear;
// Step 7: 各アトリビュート値に invWn を乗ずる
(R0,G0,B0,A0,S0,T0,W0) = (R0,G0,B0,A0,S0,T0,0x7fff) * invW0;
(R1,G1,B1,A1,S1,T1,W1) = (R1,G1,B1,A1,S1,T1,0x7fff) * invW1;
(R2,G2,B2,A2,S2,T2,W2) = (R2,G2,B2,A2,S2,T2,0x7fff) * invW2;
// Step 8: エッジの傾きを計算
Mdy = (X1-X0)/(Y1-Y0);
Hdy = (X2-X0)/(Y2-Y0);
Ldy = (X2-X1)/(Y2-Y1);
// Step 9: 各アトリビュートの変化値を計算
.
.
.
.
}
------------------------------------------------------------------------------