Raytracer: Lichtberechnung
Übersicht

![]() |
darthBetreff: Raytracer: Lichtberechnung |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() thx |
||
Diese Signatur ist leer. |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. |
![]() |
darthBetreff: .. |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() 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 ![]() 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. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group