m4x3 – im Vergleich
Multipliziert einen Vierkomponentenvektor mit einer 4x3-Matrix.
Syntax
| m4x3 dst, src0, src1 |
|---|
Hierbei gilt:
- dst ist das Zielregister. Das Ergebnis ist ein Vektor mit drei Komponenten.
- src0 ist ein Quellregister, das einen 4-Komponenten-Vektor darstellt.
- src1 ist ein Quellregister, das eine 4x3-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 |
|---|---|---|---|---|---|---|
| m4x3 | x | 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.
Das folgende Codefragment zeigt die ausgeführten Vorgänge.
dest.x = (src0.x * src1.x) + (src0.y * src1.y) + (src0.z * src1.z) + (src0.w * src1.w);
dest.y = (src0.x * src2.x) + (src0.y * src2.y) + (src0.z * src2.z) + (src0.w * src2.w);
dest.z = (src0.x * src3.x) + (src0.y * src3.y) + (src0.z * src3.z) + (src0.w * src3.w);
Der Eingabevektor befindet sich im Register src0. Die 4x3-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, sodass das andere Element des Zielregisters (dest.w) nicht betroffen ist.
Dieser Vorgang wird häufig zum Transformieren eines Positionsvektors durch eine Matrix verwendet, die keine projektiven Auswirkungen hat, z. B. bei Transformationen im Modellbereich. Diese Anweisung wird wie unten gezeigt als Paar von Punktprodukten implementiert.
m4x3 r0.xyz, r1, c0 will be expanded to:
dp4 r0.x, r1, c0
dp4 r0.y, r1, c1
dp4 r0.z, r1, c2
Swizzle- und negate-Modifizierer sind für das src1-Register ungültig. Das Register dst und src0 kann nicht identisch sein.