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:
- Nur Lichter deren Reichweite völlig oder teilweise
innerhalb des View-Frustums liegt sowie das Sonnenlicht werden
bei dieser Funktion berücksichtigt.
- Wird diese Funktion während des Renderns, d. h. in einem View-Material-Renderevent
aufgerufen, wird das Frustum des gegewärtigen Views zum Bestimmen
des nächstliegenden Lichts verwendet. Andernfalls wird das light_view-View-Frustum benutzt. Achtung: das
Übergeben des Views als Parameter hat keine Auswirkung auf das
Bestimmen des nächstliegenden Lichts!
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