view_to_light (VIEW* view, var num,var mode);

Setzt zum Rendern einer Szene aus einer Lichtposition den gegebenen View auf die Position eines schattenwerfenden dynamischen Lichts. A7.64 Kopiert Licht-Daten in das hit-Strukt.

Parameter:

view - der View, der auf die Lichtposition gesetzt werden soll oder NULL.
num - die Lichtnummer von 1 = nächtses bis 8 = am weitesten entfertes.
mode - CAST = beachte nur Lichter mit einem CAST-Flag; SPOTLIGHT = beachte nur spot lights.

Rückgabewerte:

Anzahl von Lichtern, die noch zu rendern sind und sich mit dem Frustum des gegenwärtigen Views überlappen, inklusive des gegenwärtigen Lichtes (0..8).

Modifiziert:

view.x y z - auf die Lichtposition gesetzt.
view.clip_near- auf 1 gesetzt.
view.clip_far - auf die Reichweite des Lichts gesetzt.
view.pan tilt - auf die Licht-Winkel gesetzt, wenn es sich um ein Spot- oder Richtungs-Licht handelt; ansonsten unbeeinflußt.
view.genius - auf die Licht aussendende Entity gesetzt oder auf NULL, wenn es sich um ein im Level platziertes Licht handelt.
hit.x y z - auf die Lichtposition gesetzt
hit.nx ny nz - auf die Lichtrichtung gesetzt.
hit.blue green red - auf die Lichtfarbe gesetzt.
hit.entity - auf die Licht aussendende Entity gesetzt, oder NULL wenn ein Licht im Level platziert ist.
hit.model - Pointer auf das D3DLIGHT9-Strukt des Lichts.

Bemerkungen:

Geschwindigkeit:

Langsam beim ersten Aufrufen für den gegenwärtigen View; schnell in nachfolgenden Aufrufen.

Edition:

A7.20  C   LC 

Beispiel (lite-C):

// sets up to six views for rendering from a light position
// returns 0, 1, or 6 dependent on how many views are to render for this light
function shadowmap_view_setup(light_num)
{
  view_light_front.pan = -1; // for checking whether it's a spot light
  var num = view_to_light(view_light_front,light_num,CAST); // set view to the light position
  if (num == 0) return 0; // no further shadow throwing lights to render
  if (view_light_front.pan >= 0) return 1; // sun or spot light? render front view only
  view_light_front.pan = 0;
  view_to_light(view_light_right,light_num,CAST);
  view_to_light(view_light_back,light_num,CAST);
  view_to_light(view_light_left,light_num,CAST);
  view_to_light(view_light_up,light_num,CAST);
  view_to_light(view_light_down,light_num,CAST);
  return 6;
}

Siehe auch

VIEW, stage, c_scan,view_to_matrix, ent_nextlight

► Aktuelle Version Online