PDA

View Full Version : Phong mit Glanzlicht


wolk
23-01-2003, 23:27
Aufgabenstellung:

berechnen sie dasselbe pixel nun auch unter einbeziehung eines glanzlichtes (specular reflection) . Nehmen sie ks mit 0.3 und ns mit 4 an
die Blickrichtung sei durch 0,0,1 gegeben

wie rechnet man sowas ?
wie bitte wirkt sich das auf den einen pixel aus ?

mfg wolk

12gauge
24-01-2003, 10:37
Du berechnest ja das Glanzlich für jeden Pixel anhand seines Normalvektors, den du vorher durch interpolieren der Normalvektoren der Vertices kriegst.

die Formel dafür lautet

I = k(a) * I(a) + k(d) * I(l) * (N * L) + k(s) * I(l) * (N*H)^n(s)

H = V + L / |V| + |L|

N...unit normalvector
V...unit viewingvector
L...unit lightvector
I...color

EDIT: N*L und N*H sind skalare Produkte!

moaxl
24-01-2003, 12:08
seas Wolk,

also mal zu dem Phong mit Glanzlichtbeispiel vom 29. 01..01

- Mein Normalvektor is beim *erl is (1,8,6) (wobei ma sich da frag, wozu ma den Punkt rechts unten überhaupt braucht?)
- um jetzt den Faktor zu berechnen, mit dem ma die Farbe multiplizieren muss rechnet ma mal die Länge vom Vektor aus: sqrt(1²+8²+6²) = sqrt(101)
- wenn ma jetzt die einzelnen Koordianten vom Vektor durch dessen Länge dividiert, bekommt ja den Einheitsvektor (Länge 1)
- da das Licht Richtung z-Achse geht (0,0,1) is für uns die z Koordinate interessant, weil die angibt in welchen verhältnis sich die Normale zum Licht befindet (Lambert'sches gesetz) und das is gleichzeitig auch der cos vom Winkel zw. Licht und Normalvektor
das heißt es is für uns 6/sqrt(101)
- um jetzt die Farbe zu berechnen multiplizier ich 6/sqrt(101)*Materialkonstante(0.2)*Lichtquelle(0.7) = 0.083 (kaum beleuchtet)

das Glanzlicht selbst:
B.S. 502 unten: Ispec = k*I*(V*R)^ns
wobei V der Normalvektor ist (mit Länge 1), R der Vektor der Idealen Reflexion (also bei uns (0,0,1))
und es steht noch dabei, dass die Blickrichtung (0,0,1) ist, das heißt genau die Ideale Reflexion

das heißt V*R ist bei uns [(1,8,6)/sqrt(101)]*(0,0,1) = 0,597 (ist eh das gleiche wie oben)
und insgesamt hat man: 0.3*0.7*0.597^4 = 0.02667

die gesamte Intensitaet ist die Summe beider Intensitaeten: B.S. 504
= 0.1097

mfg
Manfred

****

bitte gleich alle Fehler die ich drin hab posten, nicht, dass jemand alles falsch von mir abschreibt, danke

wolk
24-01-2003, 12:50
seas moaxl

1. teil stimmt, obwohl gerundet nicht 0,083 sondern 0,084 rauskommt *dasmusstesein*

2. teil stimmt auch

bedanke mich recht herzlich für diese simple aber doch recht einfache darstellung/lösung des problems

mfg wolk

Cha
24-01-2003, 13:51
wird nicht R mit der Formel R = ("N * L)*N - L ausgerechnet? Oder darf man d wirklich den Vektor (0,0,1) annnehmen?? (S. 503)

wolk
24-01-2003, 14:18
das ist allerdings eine berechtige frage

laut buch schauts so aus

allerdings wenn man überlegt, dann steht R doch in der Angabe drinnen oder (war zufällig in diesem beispiel auch 0,0,1)

sollte dieser angegebene vektor nicht invertiert werden ?
lichtvektor kommt von links -> reflexion nach rechts -> angegebenen vektor invertieren ? (nur eine vermutung)

oder liege ich da falsch ?

bin für kritik offen (*fahre ins wochenende*)

moaxl
24-01-2003, 16:05
hmmm.... wen ich den Vektor invertier, dann bekomm ich doch für das Glanzlicht was negatives raus, damit würd sich ja beim summieren die Intensitaet verringern --> konn ned sei
rein logisch stimmts allerdings...
nach cha wär dann R = (0.0594, 0.3564, -0.6436), puh, und das ohne Taschenrechner?

aber irgendwie ist doch klar, wenn das licht gleich ist mit dem Winkel vom Betrachter, dann ist doch der ideale Normalvektor, der der dem Licht genau entgegengeht --> (0,0,-1)

vielleicht irgendwer eine Idee? schön langsam steh ich an

tschurlo
24-01-2003, 17:50
Darfst eh einen Taschenrechner mitnehmen es soll nur kein programmierbarer sein, der so ziemlich alles kann.

magic7
24-01-2003, 19:35
@wolk:

R steht in dieser Angabe nicht drinn, V = 0,0,1.

@cha:

Ich habe bisher überhaupt nur eine Überlegung nach Figur
14-12 im Buch gemacht: Wenn L=V dann ist der Winkel zwischen
R und V ja eigentlich gleich 2*dem Winkel zwischen L und N.
Naja, glaube mittlerweile nicht mehr, dass das stimmt
(Kuschelmaus, liest Du das?).

Ich denke, dass Dein Weg R zu berechnen, da besser ist.

Schau mir das morgen noch genauer an.

@all: Normalvektor und I = 0,084 stimmt.

Liebe Grüße
-Markus