Raytracing Programmieren (Verdeckungsberechnung)?
Hallo.
Ich habe einen 3D Renderer inklusive .OBJ Parser in Processing (Java) programmiert.
Leider überschneiden sich alle Polygone, sodass das Ergebnis wie folgt aussieht.
Hat jemand einen Ansatz für eine Verdeckungsberechnungsfunktion nach Raytracing-Prinzip?
Code:
https://github.com/Dario404/3D-projection/blob/main/projection.pde
Link zum 3D-Modell:
1 Antwort
Nach Raytracing ist komplizierter.
Aber ein prinzipiell einfacher Ansatz wäre:
Beim Rendern eines Bildes schaust du, ob am entsprechendem Pixel bereits ein Wert gesetzt ist und verblendest diesen mit dem neuem Wert.
Oder aber es wird ein Depth-Buffer verwendet der nur Element zeichnet, welches am nähesten an der Kamera ist.
Gemäß Doku kannst du das selbst aktivieren bzw. deaktivieren:
https://processing.org/reference/hint_.html
ENABLE_DEPTH_SORT: Garantiert, dass die Elemente in der richtigen reihenfolge gerendert werden.
ENABLE_DEPTH_TEST: Der oben geschilderte Depth-Test mittels depth-Buffer. Anzumerken sei, dass dabei die Elemente womöglich in falscher Reihenfolge gezeichnet werden, aber ein Element mit niedrigerer Tiefe als das vorherige überdeckt eben das vorherige.
Wohlgemerkt musst du natürlich deinen Punkten entsprechend eine Tiefe, sprich eine 3D-Kordinate geben.
Blending kannst du mittels blendColor und blendMode einstellen.
Wenn du Raytracen willst musst du das selber schreiben, das bietet Processing nicht an. Wobei es aber wohl Leute gibt, die bereits einen Raytracer für Processing geschrieben haben.