lit – vs
Bietet teilweise Unterstützung für die Beleuchtung, indem Die Lichtkoeffizienten aus zwei Punktprodukten und einem Exponenten berechnet werden.
Syntax
| lit dst, src |
|---|
where
- dst ist das Zielregister.
- src ist ein Quellregister.
Hinweise
| Vertex-Shaderversionen | 1_1 | 2 _ 0 | 2 _ x | 2 _ sw | 3 _ 0 | 3 _ sw |
|---|---|---|---|---|---|---|
| Beleuchtet | x | x | x | x | x | x |
Es wird davon ausgegangen, dass der Quellvektor die im folgenden Pseudocode gezeigten Werte enthält.
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
Das folgende Codefragment zeigt die ausgeführten Vorgänge.
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));
}
}
Arithmetik mit geringerer Genauigkeit ist bei der Auswertung der Zielkomponente y (dest.y) akzeptabel. Eine Implementierung muss mindestens acht Bruchbits im Potenzargument unterstützen. Punktprodukte werden mit normalisierten Vektoren berechnet, und die Klammergrenzwerte liegen zwischen -128 und 128.
Der Fehler sollte einer Logp-/ vs. exp- vs-Kombination oder nicht mehr als einem signifikanten Bit für eine 8-Bit-Farbkomponente entsprechen.