gSPModifyVertex.htm
5.67 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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
<HTML>
<HEAD>
<TITLE>HTML 文書</TITLE>
<META NAME="GENERATOR" CONTENT="Internet Assistant for Microsoft Word 2.0j">
</HEAD>
<BODY>
<P>
<A NAME="_Toc366998482"></A><B><FONT FACE="Arial">gSPModifyVertex(3P)
<BR>
</FONT></B>
<P>
<B>関数名<BR>
</B>
<P>
gSPModifyVertex, gsSPModifyVertex
<P>
→ RSP内にロードされた後のバーテックスのモディファイ<BR>
<P>
<B>構文<BR>
</B>
<P>
#include "gbi.h"
<P>
gSPModifyVertex(Gfx *gdl, vtx, where, val)
<P>
gsSPModifyVertex(vtx, where, val)
<P>
gsSPNearClip(nc)<BR>
<P>
<B>パラメータ<BR>
</B>
<P>
<B>*gdl</B> グラフィクスディスプレイリストポインタ
<P>
<B>vtx</B> モディファイするRSPバーテックスの指定(0〜15)
<P>
<B>where</B> バーテックスのどの部分をモディファイするかの指定。以下の内のいずれか。
<P>
G_MWO_POINT_RGBA
<P>
G_MWO_POINT_ST
<P>
G_MWO_POINT_XYSCREEN
<P>
G_MWO_POINT_ZSCREEN
<P>
<B>val</B> バーテックスのモディファイする部分の新値。(32bit int値)
<BR>
<P>
<B>説明<BR>
</B>
<P>
これは高度なコマンドです。このコマンドを使用する前に、RSPマイクロコード内のバーテックスの動作を良く理解しておくことが必要です。(<a href="../gsp/gSPVertex.htm">gSPVertex(3P)</a>参照)
<BR>
<P>
このコマンドを使用して(<a href="../gsp/gSPVertex.htm">gSPVertex</a>コマンドで)RSPに送った後のバーテックスのある部分をモディファイすることができます。これは2つまたはそれ以上のトライアングルに共有されていて,しかし1つのトライアングルに使用されるときと他のトライアングルに使用されるときで異なる特性を持っている様なバーテックスに有効です。例えば2つの隣接したトライアングルで両方ともスムースシェーディングカラーを使用しますが、1つはレッドからイエローにスムースシェーディングを行い、他方はグリーンからシアンにスムースシェーディングを行うような場合です。このケースでは両方のトライアングルに共有されているバーテックスがまずレッド/イエローカラーで(<a href="../gsp/gSPVertex.htm">gSPVertex(3P)</a>を使用して)送られ、最初のトライアングルを描き、グリーン/シアンのカラーに<b>gSPModifyVertex</b>コマンドを使ってカラーを変更し、そして2番目のトライアングルを描くという手順です。本来の<b>gSPModifyVertex</b>コマンドの使用は,異なるテクスチャを持つトライアングルに共有されたバーテックスで、最初のテクスチャに使用するテクスチャ座標と、2番目のテクスチャに使用するためにそれをモディファイして使用することを目的にしています。
<BR>
<P>
<b>gSPModifyVertex</b>コマンドは異なるがよく似ている新しいバーテックスコマンドを送るよりも高速です。なぜならそのコマンドを使用するときは移動したりライティングしたりはしないからです。
<BR>
<P>
whereパラメータは以下のようにモディファイするバーテックスの一部分を指定します。
<BR>
<P>
<B> G_MWO_POINT_RGBA</B>
<P>
バーテックスのカラーを変更します。valパラメータは上位バイトから下位バ
イトへ順にRED, GREEN, BLUE, ALPHAの4byteで解釈されます。
<P>
<B> G_MWO_POINT_ST</B>
<P>
(バーテックスのテクスチャ座標)s, t値を変更します。上位16bitがs座標値、
下位16bitがt座標値となります。どちらの座標もS10.5数値となります。
<P>
<B> G_MWO_POINT_XYSCREEN</B>
<P>
バーテックスのスクリーン座標を変更します。上位16bitがX座標値、下位
16bitがY座標値となります。どちらの座標値もS13.2数値で、スクリーンの
左上が0, 0となり、正のX値で右に、正のY値で下方向になります。
<P>
<B> G_MWO_POINT_ZSCREEN</B>
<P>
バーテックスのスクリーンZ座標を変更します。全32bit値が新しいスクリー
ンZ値となります。それは16.16数値で、そのレンジは0x00000000〜
0x03ff0000です。<BR>
<P>
<B>注意<BR>
</B>
<P>
ライティングは<b>gSPModifyVertex</b>コマンドの後は動作しませんので、G_MWO_POINT_RGBAを使用したバーテックスカラーのモディファイは実際にアウトプットされるカラーのモディファイとなり、法線値のモディファイではありません。
<BR>
<P>
<b>gSPModifyVertex</b>コマンドで供給されたs, t座標は(<a href="../gsp/gSPTexture.htm">gSPTexture(3P)</a>コマンドからの)テクスチャスケールによってスケーリングされませんので、それらは転送する前にプレスケーリングしておいてください。例えば、テクスチャスケールに1/2(0x8000)を使用したい場合は、<a href="../gsp/gSPVertex.htm">gSPVertex(3P)</a>コマンドに使用するときの値の半分の値を<b>gSPModifyVertex</b>コマンドで使用してください。
<BR>
<P>
<B>例<BR>
</B>
<P>
異なるテクスチャとテクスチャ座標の2つのトライアングルに共有されるバーテックスの場合、以下のように記述します。
<BR>
<P>
/* <a href="../gsp/gSPVertex.htm">gSPVertexでバーテックスをロードします。</a> */
<P>
gSPVertex(...);<BR>
<P>
/* <a href="../gdp/gDPLoadTextureBlock.htm">トライアングル1のテクスチャのロード</a> */
<P>
gDPLoadTextureBlock(...);<BR>
<P>
/* <a href="../gsp/gSP1Triangle.htm">バーテックス#3を使ってトライアングル1を描画します。</a> */
<P>
gSP1Triangle(glistp++, 1,2,3,0);<BR>
<P>
/* <b>バーテックス#3の値をS=3.0, T=2.5に変更します。</b> */
<P>
gSPModifyVertex(glistp++, 3, G_MWO_POINT_ST, 0x00600050);<BR>
<P>
/* <a href="../gdp/gDPLoadTextureBlock.htm">トライアングル2のテクスチャをロードします。</a> */
<P>
gDPLoadTextureBlock(...);<BR>
<P>
/* <a href="../gsp/gSP1Triangle.htm">バーテックス#3を使ってトライアングル2を描画します。</a> */
<P>
gSP1Triangle(glistp++, 1,2,3,0);<BR>
<P>
<B>参照<BR>
</B>
<P>
<a href="../gsp/gSPVertex.htm">gSPVertex(3P)</a>, <a href="../gsp/gSPTexture.htm">gSPTexture(3P)</a>, <a href="../gsp/gSP1Triangle.htm">gSP1Triangle(3P)</a>,<BR>
<BR>
<p>
<hr size=1>
<img src="../Images/f3dex.gif">
<p>
<blink><b>F3DEXマイクロコード群で追加、変更された機能</b></blink>
<p>
<pre><font size=4>
gSPModifyVertex(Gfx *gdl, unsigned int vtx, unsigned int where, unsigned int val);
gsSPModifyVertex( unsigned int vtx, unsigned int where, unsigned int val);
</font></pre>
<p>
<blockquote>
頂点キャッシュの増加により、vtxの範囲が変更になりました。具体的には<a href="../gsp/gSPVertex.htm">gSPVertex</a>におけるv0の範囲と同じです。
</blockquote>
</BODY>
</HTML>