Freigeben über


m4x3 – ps

Multipliziert einen 4-Komponenten-Vektor mit einer 4x3-Matrix.

Syntax

m4x3 dst, src0, src1

 

where

  • dst ist das Zielregister. 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

Pixelshaderversionen 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
m4x3 x x x x x

 

Die xyz-Maske ist für das Zielregister erforderlich. Negate- und Swizzle-Modifizierer sind für src0 zulässig, aber nicht für src1.

Der folgende Codeausschnitt 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 verwendet, um einen Positionsvektor durch eine Matrix zu transformieren, die keine projektive Wirkung hat, z. B. bei Modellraumtransformationen. Diese Anweisung wird wie unten gezeigt als Eine Reihe 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 negieren-Modifizierer sind für das src1-Register ungültig. Das dst- und src0-Register können nicht identisch sein.

Pixelshaderanweisungen