Microsoft DirectX 8.0 (Visual Basic) |
入力ベクトルと 3 × 3 行列の積を計算する。
m3x3 rDest, vSrc0, mSrc1
SetDestReg(); SetSrcReg(0); SetSrcReg(1, 3); 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_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_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; WriteResult();
次の例は m3x3 命令の使い方を示している。
m3x3 r5, v0, c[3]
内容
dp3 r5.x, v0, c[3] dp3 r5.y, v0, c[4] dp3 r5.z, v0, c[5]
したがって、このマクロ命令は、命令カウントから命令スロットを 3 つ消費する。c[3]、c[4]、および c[5] の最後の w 要素はこの計算においては無視されることに注意すること。
入力ベクトルは vSrc0 であり、入力の 3 × 3 行列は mSrc1 および同じレジスタ ファイル内でこれに続く 2 つのレジスタである。
この処理は、一般に、ライティング計算の際の法線ベクトルのトランスフォームに使用される。このマクロ命令は、一連の内積として実装される。