• Keine Ergebnisse gefunden

Aufgabe1(Raytracing, 20Punkte ) AbgabeamMontag,dem04.06.2007,13:00Uhr ¨UbungenzuComputergraphikII-Blatt3

N/A
N/A
Protected

Academic year: 2021

Aktie "Aufgabe1(Raytracing, 20Punkte ) AbgabeamMontag,dem04.06.2007,13:00Uhr ¨UbungenzuComputergraphikII-Blatt3"

Copied!
1
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Prof. G. Zachmann

R. Weller

TU Clausthal Institut f¨ur Informatik

21. Mai 2007

Sommersemester 2007

Ubungen zu Computergraphik II - Blatt 3 ¨

Abgabe am Montag, dem 04. 06. 2007, 13:00 Uhr

Aufgabe 1 (Raytracing, 20 Punkte )

Implementieren Sieeineder folgenden Datenstrukturen zur Beschleunigung des Raytracings:

• Uniformes Grid (In der DateiUniformGrid.h/cpp)

• KD-Baum (In der DateiKDTree.h/cpp)

• AABB-Baum (In der DateiAABBTree.h/cpp)

• Lightbuffer (In der DateiLightBuffer.h/cpp)

Die Beschleunigungsdatenstrukturen (im Folgenden kurz BDS) werden alle von der gemeinsamen BasisklasseAcceleratorabgeleitet. Es soll jeweils der ¨uberladene Konstruktor, der Destruktor, sowie eineintersect()-Methode implementiert werden.

Innerhalb des Konstruktors soll die BDS aufgebaut werden. Dazu wird ihm die gesamte Szene in Form eines SurfaceList-Objektes ¨ubergeben. Dieses SurfaceList-Objekt enth¨alt eine Liste mit allen geometrischen Objekten der Szene. Wie Sie diese Liste traversieren, um die einzelnen geometrischen Objekte in Ihre BDS einzuf¨ugen, zeigt ein kleines Beispiel in den Konstruktoren der abgeleiteten Accelerator-Klassen. Jedes geometrische Objekt verf¨ugt zudem ¨uber eine Funktion getAABB(), die eine achsenparallele Boundingbox des Objekts zur¨uckliefert. Diese Funktionalit¨at sollte bei der Konstruktion Ihrer BDS n¨utzlich sein.

Die Methode intersect() der BDSen wird anstelle der momentan verwendeten intersect()- Methode von SurfaceList aufgerufen und soll nat¨urlich den Schnitt des Strahls mit dem vom Strahlursprung n¨achsten Objekt in Strahlrichtung berechnen. Zum Schnittest mit dem eigentlichen geometrischen Objekt und zum Bef¨ullen des TracingContextk¨onnen Sie die bereits vorhandenen intersect()-Methoden der geometrischen Objekte verwenden.

Im Destruktor soll eventuell von der BDS alloziierter Speicher wieder freigegeben werden.

Sie k¨onnen Ihre BDS im Raytracer ganz einfach durch entsprechende Wahl im neuen Auswahldialog des Raytracer-GUIs aktivieren.

Bei der Abgabe der ¨Ubungen wird in einem kleinen Wettbewerb die schnellste Datenstruktur ge- k¨urt und die Autoren erhalten einen kleinen Preis. Dazu darf auch jede Gruppe eine eigene Szene mitbringen, mit der sich dann alle anderen BDSen messen m¨ussen.

1

Referenzen

ÄHNLICHE DOKUMENTE

(Da diese Aufgabe benotigt wird, um Aufgabe 2 und/oder Aufgabe 3 losen zu konnen, kann ich Ihnen auf Anfrage per E-Mail (dm@tu-clausthal.de) eine Losung zukommen lassen.)..

Erweitern Sie das Framework dahingehend, dass das Histogram Equalization f¨ ur alle Komponenten des HSV- und RGB-Raumes berechnet wird. Hierf¨ ur m¨ ussen Sie

a) Leiten Sie das in der Vorlesung erw¨ ahnte Verfahren (Folien 34-36) zur inkrementellen Interpolation von Attributen f¨ ur Geraden her. Gehen Sie der Einfachheit halber davon aus,

In der Funktion Raytracer::render() werden die Strahlen f¨ ur die einzelnen Pixel erzeugt und mittels der Funktion Raytracer::traceRay() durch die Szene verfolgt.. Die von Ihnen zu

zu (iii): Generieren Sie in der Funktion Raytracer::render() statt lediglich eines Strahls pro Pixel mehrere Strahlen und mitteln Sie das Ergebnis. Auch hier gilt: Nat¨ urlich d¨

Per default werden in OpenGL die Farbwerte in einer Textur mit den entsprechenden Farbwerten der Fragmente multipliziert (GL_MODULATE).. Verwenden Sie die OpenGL-Routine glTexEnv um

b) Erzeugen Sie mittels eines Vertexshaders einen Morphingeffekt zwischen der Geometrie eines Ob- jektes und einer Kugel. Interpolieren Sie dazu, in Abh¨ angigkeit von der Zeit,

Implementieren Sie eine Adressverwaltung in der Programmiersprache C unter Verwendung einer verketteten Liste zur Speicherung der Adressen und geben Sie diese unter dem