GeometryTransferEngine : 法線クリップのためのベクトル積

GTE_NormalClip();

この関数は、3頂点のスクリーン座標を元に、三角形の前と後ろを識別する値を計算します。 返り値が正か負かによって、前か後ろか判断することができます。 符号は頂点の順序によって変化します。

GTEの座標系:



視点は、Z軸の負の方角へあります。 視点から見て、3つの頂点が時計回り(右回り)であれば、GTE_NormalClip()は正の値を返します。

頂点順序:



[GTEのコマンド]



オペコード: 0x1400006
入力: SXY0, SXY1, SXY2
出力: MAC0

動作するサンプルコード:
typedef struct
{
 _2DVERTEX v[3];
} _2DPOLY3 ;

long GTE_NormalClip(_2DPOLY3 *p)
{
asm
("
 lwc2 C2_SXY0 , (a0)    # SXY0 = (p->v[0].y << 16) | p->v[0].x
 lwc2 C2_SXY1 ,0x4(a0)  # SXY1 = (p->v[1].y << 16) | p->v[1].x
 lwc2 C2_SXY2 ,0x8(a0)  # SXY2 = (p->v[2].y << 16) | p->v[2].x
 nop
 nop
 
 c2 0x1400006
 mfc2 v0 , C2_MAC0  # return vector product
");
}

[開く] "Coding & Hacking"-サイトに戻る




 1