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"-サイトに戻る