vecLightPos[8]

Positionen der 8 wichtigsten dynamischen Lichter einschließlich eines virtuellen dynamischen Lichts, welches die Sonne repräsentiert. Die Reichweiten (lightrange) der Lichter sind in der Komponente vecLightPos.w gespeichert. Ist ein Licht nicht aktiv, ist die Reichweite Null. light is not active.

vecLightViewPos[8]

Positionen der 8 wichtigsten dynamischen Lichter wie oben, jedoch in View-Koordinaten anstelle von Welt-Koordinaten.

vecLightColor[8]

RGB-Werte der 8 wichtigsten dynamischen Lichter.

vecLightDir[8]

Normalisierte Richtungsvektoren der 8 wichtigsten dynamischen Lichter. Ist ein Licht nicht ausgerichtet, beispielsweise wenn es nicht die Sonne ist und sein Flag SPOTLIGHT ist nicht gesetzt, sind sämtliche Komponenten dieses Vektors 0. Ansonsten eird die w-Komponente auf die Reichweite des Lichts gesetzt.

Typ:

float4

Bemerkungen:

Beispiel:

/// Use dynamic lights in a vertex shader
  float4 vecLightPos[8];
  float4 vecLightColor[8];
  ...
// return the dynamic light on the surface
  float4 DoPointLight(float3 P, float3 N, int i)
  {
// calculate the light ray pointing from the light to the surface
    float3 D = (float3)vecLightPos[i]-P;
// calculate the angle between surface and light ray
    float NdotL = dot(N,normalize(D));
// modulate the light by the surface angle
    float4 Color = vecLightColor[i] * NdotL;

// calculate the light attenuation factor
    float fac = 0.f;
    if (NdotL >= 0.f && vecLightPos[i].w > 0.f)
    {
// get the distance factor
      float LD = length(D)/vecLightPos[i].w;
      if (LD < 1.f)
        fac = 1.f - LD;
    }
    return Color * fac;
  }

  VS_OUT TerrainLight_VS (
    float4 inPos : POSITION,
    float3 inNormal : NORMAL)
  {
    VS_OUT Out;

// transform the vector position to screen coordinates
    Out.Pos = mul(inPos,matWorldViewProj);

// Terrains don't need to rotate the normal, but it must be normalized
    float3 N = normalize(inNormal);
    float3 P = mul(inPos,matWorld);

// Add 6 dynamic lights (maximum for vs 1.1)
    Out.Color = float4(0.f,0.f,0.f,0.f);
    for (int i=0; i<6; i++)
      Out.Color += DoPointLight(P,N,i);
    ...
    return Out;
  }

Siehe auch:

Material, Shader, vordefinierte Shadervariablen

► Aktuelle Version Online