gSPVertex.htm 3.63 KB
<HTML>

<HEAD>

<TITLE>HTML 文書</TITLE>

<META NAME="GENERATOR" CONTENT="Internet Assistant for Microsoft Word 2.0j">
</HEAD>

<BODY>

<P>
<A NAME="_Toc366998495"></A><B><FONT FACE="Arial">gSPVertex(3P)
<BR>
</FONT></B>
<P>
<B>関数名<BR>
</B>
<P>
gSPVertex, gsSPVertex
<P>
→ オンチップバーテックスキャッシュ内に頂点をロードします。
<BR>

<P>
<B>構文<BR>
</B>
<P>
 #include &quot;gbi.h&quot;
<P>
 typedef struct {
<P>
  short ob[3]; /* x, y, z */
<P>
  unsigned short flag;
<P>
  short tc[2]; /* テクスチャ座標 */
<P>
  unsigned char cn[4]; /* カラー &amp; アルファ */
<P>
  } Vtx_t;
<P>
 typedef struct {
<P>
  short ob[3]; /* x, y, z */
<P>
  unsigned short flag;
<P>
  short tc[2]; /* テクスチャ座標 */
<P>
  signed char n[3]; /* ノーマル */
<P>
  unsigned char a; /* アルファ  */
<P>
  } Vtx_tn;
<P>
 typedef union {
<P>
  Vtx_t v; /* カラーに対してこれを使用する  */
<P>
  Vtx_tn n; /* ノーマルに対してこれを使用する */
<P>
  long long int force_structure_alignment;
<P>
  } Vtx;
<P>
 gSPVertex(Gfx *gdl, Vtx *v, unsigned int n, unsigned int v0)
<P>
 gsSPVertex(Vtx *v, unsigned int n, unsigned int v0)<BR>

<P>
<B>パラメータ<BR>
</B>
<P>
 <B>*gbl</B> グラフィクスディスプレイリストポインタ
<P>
 <B>v</B> バーテックスリストポインタ(セグメントアドレス)
<P>
 <B>n</B> verticesの数
<P>
 <B>v0</B> バーテックスバッファにおけるインデックスv0(0~15)でバーテックスをロード
 します。<BR>

<P>
<B>説明<BR>
</B>
<P>
 このコマンドは、ポリゴンを生成するコマンドであるgSP1Triangle(3P)によって使用される頂点をRSP内の内部バーテックスバッファにロードします。このバーテックスキャッシュは16のバーテックスまで格納し、バーテックスのローディングはキャッシュ中のどのエントリ(インデックス)からでも開始することができます。バーテックス座標(x,y,z)は符号付き2の補数16bit整数でコード化されます。テクスチャ座標(s,t)はs10.5形式でコード化されます。バーテックスはカラーあるいは法線(シェーディング用)のどちらかを持っています。これらの値はそれぞれ8bitです。カラー及びアルファ値はそれぞれ符号無し8bit値(0~255)として取り扱われます。法線は符号付き8bit値(-128~127)として取り扱われます。そのため、使用する共用体の適切なメンバー(.v.
or .n.)は、カラーあるいは法線のどちらを使用しているかに依存します。
<P>
法線座標範囲は-1.0から1.0までです。つまり-1.0値は-128で、1.0値は128で表現します。しかしながら符号付き8bitの精度ですので、正確には正の最大値は127となり、1.0値を正確に表すことはできません。そのため、0.992が最大の正の数となります。(目的を考えますと、十分であると思われます。)
<P>
Vtxストラクチャのフラグ値flagは現在は意味を持ちません。
<P>
(x,y,z)は4×4プロジェクション及びモデルビューマトリクスで変換されます。(s,t)は、gSPTexture(3P)で定義されたスケールを使用して変換されます。
<BR>

<P>
<B><BR>
</B>
<P>
 バーテックスキャッシュエントリ2,3,4をロードするためには以下のように記述してください。
<P>
 gSPVertex(glistp++, v, 3, 2);<BR>
<br>
<p>
<b>注意</b><br>
<p>
 RSPジオメトリ変換エンジンはバーテックスリスト、トライアングルリストアーキテクチャを使用するので、非常に強力です。一つのシンプルなトライアングルコマンドは最大のパフォーマンスを持っています。
<p>
<hr size=1>
<img src="../Images/f3dex.gif">
<p>
<blink><b>F3DEXマイクロコード群で追加、変更された機能</b></blink>
<p>
<pre><font size=4>
gSPVertex(Gfx *pkt, Vtx *v, u32 n, u32 v0)
gsSPVertex(         Vtx *v, u32 n, u32 v0)
</font></pre>
<p>
<blockquote>
 頂点キャッシュのサイズの変更により、n及びv0の値の範囲が変更になりました。ただし、一度にロードできる頂点の数は32以下ですので、それ以上の頂点をロードするには2回以上に分ける必要があります。
<p>
<img src="V_cache_size.gif">
<p>
 (*)33頂点以上ロードしたいときは、<b>gSPVertex<b>を複数回使用すること。
</blockquote>

</BODY>

</HTML>