Microsoft DirectX 8.0 (Visual Basic) |
入力ベクトルと 4 × 4 行列の積を計算する。
m4x4 rDest, vSrc0, mSrc1
SetDestReg(); SetSrcReg(0); SetSrcReg(1, 4); m_TmpReg.x = m_Source[0].x * m_Source[1].x + m_Source[0].y * m_Source[1].y + m_Source[0].z * m_Source[1].z + m_Source[0].w * m_Source[1].w; m_TmpReg.y = m_Source[0].x * m_Source[2].x + m_Source[0].y * m_Source[2].y + m_Source[0].z * m_Source[2].z + m_Source[0].w * m_Source[2].w; m_TmpReg.z = m_Source[0].x * m_Source[3].x + m_Source[0].y * m_Source[3].y + m_Source[0].z * m_Source[3].z + m_Source[0].w * m_Source[3].w; m_TmpReg.w = m_Source[0].x * m_Source[4].x + m_Source[0].y * m_Source[4].y + m_Source[0].z * m_Source[4].z + m_Source[0].w * m_Source[4].w; WriteResult();
次の例は m4x4 命令の使い方を示している。
m4x4 r5, v[0], c[3]
内容
dp4 r5.x, v[0], c[3] dp4 r5.y, v[0], c[4] dp4 r5.z, v[0], c[5] dp4 r5.w, v[0], c[6]
したがって、このマクロは、命令カウントから 4 つの命令スロットを使用する。
入力ベクトルは vSrc0 であり、入力の 4 × 4 行列は mSrc1 および同じレジスタ ファイル内でこれに続く 3 つのレジスタである。
この処理は、一般に、射影行列による位置座標のトランスフォームに使われる。このマクロ命令は、一連の内積として実装される。