PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Raytracing/Brechung/massive Objekte


AlSvartr
2006-08-29, 10:44:41
Ich hab da so ein kleines Problemchen, über das ich mir den Kopf zerbreche und ich komme einfach zu keiner Lösung. Ich bastelte ein wenig an meinem Raytracer herum und implementierte dann endlich auch mal Transparenz und Brechung. Nun hat sich aber bei Letzterem ein Problem ergeben:

Wenn ein Strahl ein Objekt zum ersten mal schneidet und dieses Objekt ist transparent, klar, dann gelangt der Strahl ins Objekt und wird dabei gebrochen. Wenn er das Objekt ein zweites mal schneidet, ist er wieder draußen usw. ... nun habe ich aber das Problem, dass sich Objekte auch überschneiden können. Wie kann ich jetzt in sinnvoller Weise ermitteln, in welches Objekt ich gelange, wenn ich aus einem anderen herauskomme? Immerhin benötige ich diese Information (bzw. den zum Objekt gehörigen Brechungsindex), um die korrekte Brechung zu berechnen. Aber um zu ermitteln, welches Objekt ich schneide, müsste ich doch wiederum auch schon den Brechungsindex kennen, weil ich wissen will, in welche Richtung der Strahl geht und es ja davon abhängig ist, welches Objekt er schneidet.

Hm!

Bin ich einfach nur zu blöd und stehe völlig auf dem Schlauch, während eine völlig logische und einfache Lösung existiert oder ist es wirklich ne Ecke komplizierter? Wenn mir da jemand helfen könnte, wäre ich wirklich sehr dankbar :)

Trap
2006-08-29, 12:34:52
Brechungsindex kann man doch genauso handhaben wie Farbe von festen Objekten, oder?
Man muss nur zusätzlich speichern welcher Brechungsindex für den Strahl bis vor dem Auftreffen gilt, dann guckt man beim Auftreffen nach welcher Brechungsindex fürs neue Objekt gilt, ändert Richtung und alten Brechungsindex vom Strahl und macht weiter.

Neomi
2006-08-29, 12:48:24
Wenn du erst in Objekt A eintrittst, dann in B eintrittst, dann A verläßt und danach B, dann gibt es ein prinzipielles Problem.

Du könntest davon ausgehen, dich in dem Objekt zu befinden, welches zuletzt betreten wurde. Dann würdest du beim Verlassen von A einfach davon ausgehen, daß du noch in B bist, beim Übergang von B zu B gäbe es dann keine erneute Brechung. Du könntest auch davon ausgehen, dich im Objekt zu befinden, welches verlassen wird, aber es hat alles seine Nachteile. Du willst halt eine Situation auflösen, die es eigentlich gar nicht geben darf.

Die sicherste Lösung wäre wohl, wenn sich ein Strahl in mehreren Objekten gleichzeitig befinden kann. Wenn A einen Brechungsindex von 1.5 hat und B 2.0, dann solltest du für das Schnittvolumen einen von 1.75 (eben der Durchschnitt aller beteiligten Materialien) ermitteln. Ist ein klein wenig mehr Aufwand, aber bietet das sauberste Ergebnis. Der Weg eines Strahls ist dann deckungsgleich in beide Richtungen, falls keine Totalreflektion vorkommt und dünne Zwischenschichten verhalten sich etwa so wie ein sauberer Übergang zwischen zwei Materialien. Eine Grundvoraussetzung ist natürlich, daß es nur geschlossene Objekte gibt.

ScottManDeath
2006-08-29, 17:33:02
Oder Du gibst jedem Objekt eine Priorität und hast für den Strahl einen Stack an Objekten die der Strahl durchläuft. Der Brechungsindex ist dann der des Objekts mit höchster Priorität.

AlSvartr
2006-08-31, 11:33:05
Danke schonmal an alle..klar ist die Sache irgendwie unrealistisch, stimmt schon..aber mich würde interessieren, wie damit so in den gängigen Programmen umgegangen wird. Ich werd vielleicht nachher nochmal n bisschen dran basteln, um ne akzeptable Lösung draus zu machen :) ...