Freigeben über


m4x4 – vs

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

Syntax

m4x4 dst, src0, src1

 

where

  • dst ist das Zielregister. Ergebnis ist ein 4-Komponenten-Vektor.
  • src0 ist ein Quellregister, das einen 4-Komponenten-Vektor darstellt.
  • src1 ist ein Quellregister, das eine 4x4-Matrix darstellt, die dem ersten von vier aufeinanderfolgenden Registern entspricht.

Bemerkungen

Vertexshaderversionen 1_1 2_0 2_x 2_sw 3_0 3_sw
m4x4 x x x x x x

 

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

Swizzle- und Negierungsmodifizierer sind für das src0-Register ungültig. Die Register dest und src0 können nicht identisch sein.

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);
dest.w = (src0.x * src4.x) + (src0.y * src4.y) + (src0.z * src4.z) + 
        (src0.w * src4.w);

Der Eingabevektor befindet sich im Register src0. Die 4x4-Eingabematrix befindet sich im Register src1, und die nächsthöheren Register, wie in der folgenden Erweiterung gezeigt.

Dieser Vorgang wird häufig zum Transformieren einer Position durch eine Projektionsmatrix verwendet. Diese Anweisung wird wie hier gezeigt als eine Reihe von Punktprodukten implementiert.

m4x4   r0.xyzw, r1, c0    will be expanded to:

dp4   r0.x, r1, c0
dp4   r0.y, r1, c1
dp4   r0.z, r1, c2
dp4   r0.w, r1, c3

Anweisungen zum Vertex-Shader