PDA

View Full Version : [LÖSUNG] - Ergebnis Phong Interp. Phong Shading


riboflavin
10-10-2007, 15:31
Hallo!

Beim Bsp.: Aufgabe2 (Test weiß ich nicht mehr, aber auf alle fälle von den neuen angaben einer)

mit den angaben:

A(-2,0,0)
B(1,0,0)
C(0,4,0)....

hab ich rausbekommen:

ca. 1,055 Intensiätswert im Punkt P*

vielleicht wills wer vergleichen bitte!

glubschi
11-10-2007, 12:45
kann vllt. jemand hier den rechenweg erklären? :confused:

riboflavin
11-10-2007, 13:00
hi!

hab leider grad nit sooo viel zeit aber in kurzschreibweise hier...

zuerst rechnest du dir von den gegebenen vektoren die normalvektoren aus.
also betrag ausrechnen und dann jede komponente durch betrag dividieren.

dann interpolierst nach formel Seite 595 10-56 den vektor zwischen D und A und zwischen C und B... (jeweils auf höhe des sterns)

danach musst du diese beiden vektoren wieder normalisieren...

dann interpolierst du mit selber vorgehensweise den Vektor auf position * indem du die eben berechneten vektoren interpolierst.
...wieder normalisieren

dann hast du den normalvektor auf punkt * ...

jetzt gibts da die schöne Formel der Phong Schattierung (die mit dem Halfwayvektor)... das steht alles wunderbar im buch drinnen --> dann einfach mittels gegebenen werten die Intensität ausrechnen.

es is quasi so wie bei gouraud interpolation nur halt mit vektoren und nit mit den intensitäten. (repitutoriumsfolien)

i hoff der rechenweg stimmt so. vielleicht kann das noch wer bestätigen.

mfg :wave:

jay
15-10-2007, 02:43
hmm.. wie interpoliere ich 2 normalvektoren?
steht wahrscheinlich eh schon irgendwo im forum.. hab aber auf die schnelle nix gefunden und bin schon ziemlich müde.. :awake:

glubschi
15-10-2007, 10:29
hallo. nach formel 10-56 auf seite 595 im buch... (sorry, wenn ich jetzt zu faul bin alles abzutippen...)

edit. hab grad gesehen, dass das im oberen post eh scho steht.. ist dazu was unklar?

jay
15-10-2007, 11:24
ah ok.. hab ich anscheinend gestern übersehn..
das problem ist nur, dass ich das buch (noch) nicht hab ;)
werd aber auf der uni nochmal gelegenheit haben einen blick reinzuwerfen.

riboflavin
15-10-2007, 11:27
für die prüfung solltest aber eh ein buch haben!

thebigMuh
15-10-2007, 12:35
Ich hab's einmal nachgerechnet, mir kommt was völlig anderes raus. Nachzuprüfen wo wir auseinanderdriften ist ohne deinen Rechenweg nicht möglich, drum post ich Mal meinen:

Die 4 normalisierten Normalen:

A = (-1, 0, 0), B = (1, 0, 0), C = (0, 1, 0), D = (0, 0, 1)

Interpolation in Y Richtung:

N1 = 2/6 * A + 4/6 * D = (-0,4472; 0; 0,8944)

N2 = 3/9 * B + 6/9 * C = (0,4472; 0,8944; 0)

Interpolation in X Richtung:

N = 2/7 * N2 + 5/7 * N1 = (-0,2688; 0,3578; 0,8944)

Beleuchtung:

I = Idiff + Ispec

Idiff = N.L * kd * IL

Ispec = (N.H)^n * kd * IL

Idiff:

L = (-2/3, 2/3, 1/3)

N.L = 0,7155

Idiff = 0,4293

Ispec:

(Vorsicht - V muß invertiert werden, wir brauchen ja die Richtung vom beleuchteten Punkt zur Kamera, und nicht von der Kamera zum beleuchteten Punkt!)

H = (L + V)/|L+V|

H = (-0,4082; 0,4082; 0,8165)

N.H = 0,9859

Ispec = 0,8503

I = Idiff + Ispec = 1,2796

Ciao, muh!

glubschi
15-10-2007, 12:46
normalisieren tust eh indem du einfach für jede komponente diese durch ihren betrag dividierst, oder? :confused:hab angst, dass ich das falsch gemacht hab bisher.

ok.. ich für mich hab den C Normalvektor falsch normalisiert.. daher kommt bei mir was falsches raus.

thebigMuh
15-10-2007, 12:59
Jo, normalisiert wird durch Dividieren durch den Betrag.

normalize(X) = X / norm(X)

Ciao, muh!

riboflavin
15-10-2007, 12:59
Interpolation in X Richtung:

N = 2/7 * N2 + 5/7 * N1 = (-0,2688; 0,3578; 0,8944) --> dein ergebnis

ich hab:

5/7 * -0,447 + 2/7 * 0,447 = -0,191 für N* xWert
...keine ahnung wie du gerechnet hast dass das rauskommt bei dir...

2.
du hast v negiert: das stimmt schon, nur in den lösungsfolien des instituts haben sie das nicht gemacht. --> deshalb ich auch nicht.

thebigMuh
15-10-2007, 13:03
1.) Du mußt schon noch einmal normalisieren, nachdem du über X interpoliert hast! -0,1915 ist schon richtig interpoliert, aber das ist noch nicht normalisiert.

2.) Ich würde fragen ob sie sich ganz, gaaanz, sicher sind, wenn das beim Test kommt. Wenn man direkt mit dem V von der Angabe in die Beleuchtungsformel reingeht, kann man eigentlich gleich aufhören, denn das würde bedeuten, daß man die Rückseite vom Polygon anschaut :P

Ciao, muh!

glubschi
15-10-2007, 13:05
dh . ich nehm die normalisierten normalvektoren, interpolier sie über die kanten, damit ich E und F krieg, normalisiere E und F und mit den normalisierten E und F interpoliere ich, damit ich * krieg und * tu ich dann nochmal normalisieren. ist das richtig so?

@V: lt. buch, seite 567: "V is the unit vector pointing to the viewer from the selected surface position." in den bsp wird der blickvektor ohne weiter angaben gemacht... ist die frage, wohin der laut angabe zeigt.. vom punkt zum viewer oder vom viewer zum punkt.

thebigMuh
15-10-2007, 13:12
1.) Ja genau richtig. Viel interpolieren, und nach jedem Interpolieren noch normalisieren. Freude!

2.) Der Normalvektor N, den wir uns ausrechnen, zeigt in die entgegengesetzte Richtung von V, unserer Blickrichtung. Daher hab ich Mal angenommen, daß ich V invertieren muß, um den Vektor vom berechneten Punkt zum Betrachter zu bekommen.

Ciao, muh!

riboflavin
15-10-2007, 13:17
jo das is richtig so!!!

@ muh!:

ja ich werd fragen beim test oder du oder sonst wer :-D
wie negierst du den vektor --> einfach vorzeichen der komponenten wechseln?

glubschi
15-10-2007, 13:18
ad 2.) und wie ists dann richtig? :confused: kenn mich schön langsam nimmer aus :S net, dass ich was falsch mache..
muss ich den blickvektor nun wirklich invertieren, quasi V ist der invertierte blickvektor oder ist der blickvektor gleich V? *angstkrieg*

riboflavin
15-10-2007, 13:18
zu meinem ergebnis: hab von einem vektor den y wert falsch gehabt, ansonsten genauso wie du!(bis auf invertieren) thanx

thebigMuh
15-10-2007, 13:23
Frag einfach, glubschi. Wenn er dir eine Antwort gibt, dann rechne einfach stur nach dem was er dir gesagt hat. Wenn er meint "Das musst du schon selbst wissen", dann schau nach ob V.N positiv oder negativ ist. Wenns positiv ist, dann nimm direkt V, wenns negativ ist, dann invertier erst.

Ciao, muh!

glubschi
15-10-2007, 13:26
danke....

thebigMuh
15-10-2007, 13:29
Auch wenn du's falsch machst, muß er schon einen sehr fiesen Tag haben um dir einen ganzen Punkt dafür abzuziehen, also keine Sorge ;)

Ciao, muh!

glubschi
15-10-2007, 13:32
hmm... na ich hoffs mal... ich hoff, dass die nicht nach dem motto gehen "wenns endergebnis nicht stimmt, gibts keinen punkt"....

thebigMuh
15-10-2007, 13:35
Nein, absolut nicht. Darum jeden Zwischenschritt hinschreiben.

Ciao, muh!

riboflavin
15-10-2007, 13:38
wie invertieren? dumme frage ich weiß

thebigMuh
15-10-2007, 13:43
Keine Frage ist dumm.

neg(V) => V(neg(x); neg(y); neg(z))

Einfach jede Komponente negieren.

Ciao, muh!

glubschi
15-10-2007, 14:49
was mir noch grad kommt.. für die berechnung von H verwend ich auch das normalisierte N und das normalisierte V oder? und H normalisier ich dann wieder zur Berechnung von Ispec.

thebigMuh
15-10-2007, 15:00
Für H brauchst du L (der normalisierte Vektor vom Punkt zur Lichtquelle) und V (der normalisierte Vektor vom Punkt zum Betrachter). Einfach addieren, und dann das Ergebnis noch Mal normalisieren. Also H = normalize(normalize(L) + normalize(V)).

Ciao, muh!

glubschi
15-10-2007, 15:02
ok danke.. dann hats eh gepasst... :) so langsam verunsichert mich alles.. :(