Raytracer: Lichtberechnung

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

darth

Betreff: Raytracer: Lichtberechnung

BeitragMi, Okt 18, 2006 14:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
ich habe einen raytracer geschrieben. nun möchte ich, dass die farben auch schön dem licht angepasst sind :/
aber ich weiss nicht so genau welchen modus ich da wählen soll...
die formelsammlung sagt: I=I0*cos(phi) (lichststärke=urspr. lichtstärke (1) *cos(winkel) des einprallenden lichtes)

ich habe schon 3 sachen ausprobiert:
1. ich setze das licht in die kamera, und schneide dann den ray mit der normalen der ebene und berechne den schnittwinkel, der wird dann oben in der formel eingesetzt.

2. ich sende das licht aus dem unendlichen mit dem vektor (0/0/1), diesen lichtstrahl schneide ich mit der normalen der ebene, schnittwinkel in formel einsetzen.

3. das licht kommt aus dem unendlichen (vektor 001), trifft auf die ebene, wird reflektiert (einfall = ausfall) dieses ausfallende licht wird mit dem ray (strahl der cam) geschnitten und der schnittwinkel in der formel eingesetzt.

bei allen drei kommen nicht so wirklich geniale ergebnisse heraus (die ergebnisse sind gut... aber nicht optimal),
nun ist die frage:
welche möglichkeit soll ich nehmen?
soll ich was ganz anderes machen?
soll ich noch einen lichtstärkefaktor (hinten kleiner, damit hinten dunkler als vorne) einfügen?

looking forward to get help Smile
thx
Diese Signatur ist leer.
 

Dreamora

BeitragMi, Okt 18, 2006 15:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Am besten einfach die normale Gleichung für Diffuses Licht benutzen:

color_diff = crossproduct(dotproduct(vecN, vecL) * light_diff,material_diff)
und danach noch den Wert clampen, also farbweise mod so das er nur noch von 0 bis maximum gehen kann.

cross und dot product sind glaub klar, die normalen Vektoroperationen

vecN: Normalenvektor auf der Oberfläche am entsprechenden Punkt
vecL: Einheitsvektor der auf das Licht zeigt
light_diff: Diffuse Farbe der Lichtquelle
material_diff: Diffuse Farbe des Materials am entsprechenden Punkt
color_diff: Resultierende Diffuse Farbe am entsprechenden Punkt

Das hat gewisse ähnlichkeit mit deiner Lösung, da da aufgrund der Operationen vektoriel der Cosinus drin ist. Sieht so aber schöner aus und läuft normalerweise auch um einiges schneller.

Anzumerken ist, dass dies nur 1/3 der Lichtgleichung für einen Punkt ist, denn das spekuläre Licht und auch das Umgebungslicht fehlen da drin (alle 3 Lichtwerte werden aufsummiert)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

darth

Betreff: ..

BeitragDo, Okt 19, 2006 21:15
Antworten mit Zitat
Benutzer-Profile anzeigen
hi,
was dot und crossproduct sind ist mir klar... was mir nicht klar ist, weshalb du ein kreuzprodukt mit einem winkel (das dotprodukt) und einer lichtfarbe machen möchtest :/
kreuzprodukt zweier vektoren bildet die normale dieser beiden...
aber ein bisschen hats geholfen Smile durch diese formel wurde ich an ein altes buch erinnert, das ich vor zeiten mal in einer bibliotheke gesehen hatte, und die hatten es noch :O
darin steht geschrieben:
Zitat:
Kommen wir nun zur Berechnung des Beleuchtungswinkels. Er ergibt sich aus dem Skalarprudukt des Normalenvektors und dem einfallenden Lichtstrahl zu Ne*Le. Das "e" im Index soll andeuten, dass die Vektoren normiert sind, also die Länge 1 haben. Der Lichtstrahl L ist dabei einfach der Vektor zwischen dem Schnittpunkt S und der Position der Lichtquelle. [blablabla]
Intensität = Ne*Le/|L| * constante (const ist vernachlässigbar denk ich)

dies angewendet gibt relativ schöne ergebnisse Smile
danke für deine hilfe.

PS: ich wollte eigentlich ein ergebnisbild zeigen (es ist im archiv) aber irgendwas will, dass ich mich selbst downloade (eine datei namens "darth") ... dunno why :/
Diese Signatur ist leer.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group