m3x3 – vs
Multipliziert einen 3-Komponenten-Vektor mit einer 3x3-Matrix.
Syntax
| m3x3 dst, src0, src1 |
|---|
Hierbei gilt:
- dst ist das Zielregister. Das Ergebnis ist ein 3-Komponenten-Vektor.
- src0 ist ein Quellregister, das einen 3-Komponenten-Vektor darstellt.
- src1 ist ein Quellregister, das eine 3x3-Matrix darstellt, die dem ersten von drei aufeinanderfolgenden Registern entspricht.
Bemerkungen
| Vertex-Shaderversionen | 1_1 | 2 _ 0 | 2 _ x | 2 _ sw | 3 _ 0 | 3 _ sw |
|---|---|---|---|---|---|---|
| m3x3 | x | x | x | x | x | x |
Die xyz-Maske ist für das Zielregister erforderlich. Die Modifizierer Negate und swizzle sind für src0 zulässig, aber nicht für src1.
Das folgende Codefragment zeigt die ausgeführten Vorgänge.
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);
Der Eingabevektor befindet sich im Register src0. Die 3x3-Eingabematrix befindet sich im Register src1 und die nächsten beiden höheren Register, wie in der folgenden Erweiterung gezeigt. Ein 3D-Ergebnis wird erzeugt, ohne dass das andere Element des Zielregisters (dest.w) davon betroffen ist.
Dieser Vorgang wird häufig zum Transformieren normaler Vektoren während Beleuchtungsberechnungen verwendet. Diese Anweisung wird wie unten gezeigt als Punktproduktepaar implementiert.
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