m3x3 – ps
Multipliziert einen 3-Komponenten-Vektor mit einer 3x3-Matrix.
Syntax
m3x3 dst, src0, src1 |
---|
where
- dst ist das Zielregister. Ergebnis ist ein Vektor mit drei Komponenten.
- src0 ist ein Quellregister, das einen Vektor mit drei Komponenten darstellt.
- src1 ist ein Quellregister, das eine 3x3-Matrix darstellt, die dem ersten von 3 aufeinanderfolgenden Registern entspricht.
Bemerkungen
Pixel-Shaderversionen | 1_1 | 1_2 | 1_3 | 1_4 | 2_0 | 2_x | 2_sw | 3_0 | 3_sw |
---|---|---|---|---|---|---|---|---|---|
m3x3 | x | x | x | x | x |
Die xyz-Maske ist für das Zielregister erforderlich. Negate- und Swizzle-Modifizierer sind für src0, aber nicht für src1 zulässig.
Der folgende Codeausschnitt 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 Eingabematrix 3x3 befindet sich im Register src1 und die nächsten beiden höheren Register, wie in der folgenden Erweiterung gezeigt. Es wird ein 3D-Ergebnis erzeugt, sodass das andere Element des Zielregisters (dest.w) nicht betroffen ist.
Dieser Vorgang wird häufig für die Transformation normaler Vektoren während der Beleuchtungsberechnungen verwendet. Diese Anweisung wird als Satz von Punktprodukten implementiert, wie unten gezeigt.
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
Zugehörige Themen