18.07.2014 Aufrufe

Übungen zu den Lehrveranstaltungen 710.003 Computergrafik 1 ...

Übungen zu den Lehrveranstaltungen 710.003 Computergrafik 1 ...

Übungen zu den Lehrveranstaltungen 710.003 Computergrafik 1 ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Abbildung 20: Achsen des Worldspace (x, y, z) und z-Achse aus Kamerasicht (SightV ector)<br />

Es existiert bereits eine verschachtelte for-Schleife, die für Sie die Pixel des Ausgabebildes durchläuft.<br />

Die aktuelle Pixelposition wird durch das Paar (pixel_x, pixel_y) beschrieben. Konvertieren Sie also<br />

die horizontale Pixelposition pixel_x, im Bereich zwischen 0 und dim_x, <strong>zu</strong> einem horizontalen Abstand<br />

viewplane x mit einem Wert zwischen −1/aspect und 1/aspect, und speichern Sie das Ergebnis als<br />

Fließkommazahl. Die vertikale Pixelposition pixel_y soll <strong>zu</strong> einem Wert viewplane y zwischen 1 und −1<br />

konvertiert wer<strong>den</strong>. Beachten Sie bei bei<strong>den</strong>, dass der Strahl durch <strong>den</strong> Mittelpunkt der Pixel geschossen<br />

wer<strong>den</strong> soll!<br />

Wenn sie diese Werte viewplane x und viewplane y für <strong>den</strong> aktuellen Pixel berechnet haben, muss nur<br />

mehr der Strahl erstellt wer<strong>den</strong>. Verwen<strong>den</strong> sie dafür eine float3 und die nachfolgende Formel<br />

ray = viewplane x · x + viewplane y · y + f_z (17)<br />

Das Ergebnis muss noch normalisiert wer<strong>den</strong>, da die verwendeten Formeln <strong>zu</strong>r Schnittberechnung sonst<br />

ungültig sind. Rufen Sie danach die Methode shootRay mit der Startposition camera.eye, dem berechneten<br />

Strahl, der Objektliste shapes, der Lichtquelle light und dem Farbwert pixel_color auf.<br />

Wenn die Methode true retourniert, wurde ein Objekt getroffen und dessen Farbwert ist in pixel_color<br />

gespeichert. Sie können daraufhin einen Pixelwert R8G8B8A8 mit der berechneten pixel_color erstellen.<br />

Die Pixel können mit output_image_(pixel_x, pixel_y) addressiert wer<strong>den</strong>.<br />

Schnitt mit Dreiecken (3 Punkte) Überschreiben Sie die Methode findIntersectionPoints der<br />

Klasse Triangle, um die Kontrolle der Schnittpunkte für Dreiecke <strong>zu</strong> aktivieren. Als erstes muss der<br />

Schnittpunkt mit der Ebene gefun<strong>den</strong> wer<strong>den</strong>, die von dem <strong>zu</strong> testen<strong>den</strong> Dreieck aufgespannt wird. Benutzen<br />

Sie da<strong>zu</strong> die Methode MathUtils::rayPlaneIntersect. Als Parameter müssen der Startpunkt<br />

und der Vektor des Rays, sowie die Instanzattribute face_.plane_D und face_.normal_vector<br />

übergeben wer<strong>den</strong>. Bei einem normalisierten Ray ist der Returnwert s der Funktion die Distanz zwischen<br />

Schnittpunkt auf der Ebene und Startpunkt. Sollte diese Distanz

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!