Partager via


nrm - ps

Normalisez un vecteur 3D.

Syntaxe

nrm dst, src

 

where

  • dst est le registre de destination.
  • src est un registre source.

Notes

Versions du nuanceur de pixels 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
Nrm x x x x x

 

Cette instruction fonctionne de manière conceptuelle, comme illustré ici.

squareRootOfTheSum = (src0.x*src0.x + src0.y*src0.y + src0.z*src0.z)1/2;

dest.x = src0.x * (1 / squareRootOfTheSum);
dest.y = src0.y * (1 / squareRootOfTheSum);
dest.z = src0.z * (1 / squareRootOfTheSum);
dest.w = src0.w * (1 / squareRootOfTheSum);

Les registres dest et src ne peuvent pas être identiques. Le registre dest doit être un registre temporaire.

Cette instruction effectue l’interpolation linéaire basée sur la formule suivante.

float f = src0.x*src0.x + src0.y*src0.y + src0.z*src0.z;
if (f != 0)
    f = (float)(1/sqrt(f));
else
    f = FLT_MAX;

dest.x = src0.x*f;
dest.y = src0.y*f;
dest.z = src0.z*f;
dest.w = src0.w*f;

Instructions du nuanceur de pixels