OpenGL und Ray Tracing

Skid

Erfahrenes Mitglied
Hallöchen zusammen,

wie der Titel schon sagt, möchte ich ganz gerne mit Hilfe von OpenGL (bindend durch Projekt) einen Ray Tracing Algorithmus implementieren. Ich weiß allerdings nicht, wo ich dort genau anfange, beziehungsweise wo ich in OpenGL 1.1 genau dafür eingreife.

Kennt ihr vielleicht irgendwelche Referenzen die das Thema im Hinblick auf OpenGL behandeln?

Beste Grüße und vielen Dank,
SKiD.

// EDIT: Glut ist auch vorhanden!
 
Zuletzt bearbeitet:
Hallo Skid,

Mit Ray Tracing denk ich meinst dass du vor allem Picking mit der Maus? Ist das korrekt?

Grüsse
Cromon
 
Hey Cromon,

meinst du mit Picking die Auswahl von Elementen mit Hilfe der Maus aus der Szene?
Das meinte ich nicht. Ich meinte das Render mit "Ray Tracing", siehe HIER.

Beste Grüße,
SKiD.
 
Also soweit ich weiß (evtl. nicht mehr auf dem neusten Stand, aber OpenGl 1.1 ist von 1997 somit trifft dies hier zu) OpenGL und Direct3D Rastern. Beim Rastern zerschneidet man Objekte (oberflächlich) in Polygone und gibt diese über den Z-Buffer auf den Bildschirm aus.

Raytracing weißt du ja was es ist. Die Grafikkarte besitzt schnelle Geometrie Verfahren die man nutzen kann, jedoch hast du keine Unterstützung deiner geforderten Grafik API, d.h. alles selbst designen.

Grüße aus Karlsruhe
 
Zuletzt bearbeitet:
einen Ray Tracing Algorithmus implementieren. Ich weiß allerdings nicht, wo ich dort genau anfange, beziehungsweise wo ich in OpenGL 1.1 genau dafür eingreife.
Wissen zu Funktionen, Vektoren, Matrizen und Grundlagen der Physik.

Als erstes brauchst du mathematische Grundstrukturen. Für eine Strahl eignet sich gut einen Vektor zu nehmen, also schreib dir eine Klasse dazu mit allen Rechenmöglichkeiten (Operatoren).

An dieser Stelle sinnvoll erstmal ein mathematisches Zeichenprogramm zu schreiben. Wo du folgende Geometrischen Formen erstellen kannst und auf bestimmte Bedingungen prüfen: Vektor, Punkt (= Ortsvektor), Kugel, Pyramide, Quader. Also beliebig erzeugen und dann automatisch berechnen Schnittpunkt z.B.: Vektor - Ebene, Ebene - Kugel, Vektor - Pyramide.. solche Dinge.

Danach das ganze abstrakter Gestalten mit n-dimensionalen Tupel Template Klassen. 2,3,4 Diemensionen reichen: z.B.:
C:
typedef Tupel3<int> Vektor3d_i;
typedef Tupel3<float> Vektor3d_f;
typedef Tupel3<double> Vektor3d_d;

Dann nimmst du deine Vektoren als Strahlen (Schau dir an wie sich die Vorstellung der Griechen an, wie das Auge funktioniert) und erstellst dir z.B. eine Kugel und berechnest alle nächsten Schnittpunkte.

Nun solltest du dir überlegen aus welchem Basis-Objekt all deine anderen Objekte bestehen sollen. Besser gesagt in welches Basis Objekt du jede mögliche Geometrische Form am besten zerlegen kannst / UND die einfach zu berechnen ist.

Nun solltest du z.B. ein Bild erzeugen können, welches je nach Helligkeit die Entfernung des Objekte darstellt (Schwarz-Weiß)

Nun poste hier einen neuen Beitrag und hol dir Lektüre zu Schatten und Beleuchtung.
Die Schatten sind ja ganz einfach deine Verlängerten Strahlen, welche das Objekt treffen (von der Lichtquelle aus).

Dann mach dir Gedanken zu Transparenz von Objekten, Texturen / verschiedenen Material Oberflächen -> Reflexion und Spiegelung

Es sollte noch gesagt werden, das bei aktueller Rechenleistung Raytracing sich weniger für echtzeit Rendering empfielt... da müsste man sehr viel mit vorberechneten Lichtmaps... hantieren.

Gruß
 
Zuletzt bearbeitet:
Zurück