Partager via


lit - vs

Fournit une prise en charge partielle de l’éclairage en calculant les coefficients d’éclairage à partir de deux produits à points et d’un exposant.

Syntaxe

lit dst, src

 

where

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

Notes

Versions du nuanceur de vertex 1_1 2_0 2_x 2_sw 3_0 3_sw
Allumé x x x x x x

 

Le vecteur source est supposé contenir les valeurs indiquées dans le pseudocode suivant.

src.x = N*L        ; The dot product between normal and direction to light
src.y = N*H        ; The dot product between normal and half vector
src.z = ignored    ; This value is ignored
src.w = exponent   ; The value must be between -128.0 and 128.0

Le fragment de code suivant montre les opérations effectuées.

dest.x = 1;
dest.y = 0;
dest.z = 0;
dest.w = 1;

float power = src.w;
const float MAXPOWER = 127.9961f;
if (power < -MAXPOWER)
    power = -MAXPOWER;          // Fits into 8.8 fixed point format
else if (power > MAXPOWER)
    power = MAXPOWER;          // Fits into 8.8 fixed point format

if (src.x > 0)
{
    dest.y = src.x;
    if (src.y > 0)
    {
        // Allowed approximation is EXP(power * LOG(src.y))
        dest.z = (float)(pow(src.y, power));
    }
}

L’arithmétique de précision réduite est acceptable dans l’évaluation du composant y de destination (dest.y). Une implémentation doit prendre en charge au moins huit bits de fraction dans l’argument power. Les produits dot sont calculés avec des vecteurs normalisés, et les limites de pince sont de -128 à 128.

L’erreur doit correspondre à une combinaison logp - vs et exp - vs , ou pas plus d’un bit significatif pour un composant de couleur 8 bits.

Instructions du nuanceur de vertex