m3x3 - ps
Multiplie un vecteur à 3 composants par une matrice 3x3.
Syntaxe
m3x3 dst, src0, src1 |
---|
where
- dst est le registre de destination. Le résultat est un vecteur à 3 composants.
- src0 est un registre source représentant un vecteur à 3 composants.
- src1 est un registre source représentant une matrice 3x3, qui correspond au premier des 3 registres consécutifs.
Notes
Versions du nuanceur de pixels | 1_1 | 1_2 | 1_3 | 1_4 | 2_0 | 2_x | 2_sw | 3_0 | 3_sw |
---|---|---|---|---|---|---|---|---|---|
m3x3 | x | x | x | x | x |
Le masque xyz est requis pour le registre de destination. Les modificateurs Negate et swizzle sont autorisés pour src0, mais pas pour src1.
L’extrait de code suivant montre les opérations effectuées.
dest.x = (src0.x * src1.x) + (src0.y * src1.y) + (src0.z * src1.z);
dest.y = (src0.x * src2.x) + (src0.y * src2.y) + (src0.z * src2.z);
dest.z = (src0.x * src3.x) + (src0.y * src3.y) + (src0.z * src3.z);
Le vecteur d’entrée se trouve dans le registre src0. La matrice d’entrée 3x3 se trouve dans le registre src1, et les deux registres supérieurs suivants, comme indiqué dans l’extension ci-dessous. Un résultat 3D est produit, laissant l’autre élément du registre de destination (dest.w) non affecté.
Cette opération est couramment utilisée pour transformer des vecteurs normaux lors des calculs d’éclairage. Cette instruction est implémentée sous la forme d’un ensemble de produits par points, comme illustré ci-dessous.
m3x3 r0.xyz, r1, c0 which will be expanded to:
dp3 r0.x, r1, c0
dp3 r0.y, r1, c1
dp3 r0.z, r1, c2
Rubriques connexes