gSPModifyVertex.htm 5.67 KB
<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 &quot;gbi.h&quot;
<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>