• Keine Ergebnisse gefunden

Ubungen zu Computergraphik II - Blatt 3 ¨

N/A
N/A
Protected

Academic year: 2021

Aktie "Ubungen zu Computergraphik II - Blatt 3 ¨"

Copied!
1
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Prof. G. Zachmann

D. Mohr

TU Clausthal Institut f¨ur Informatik

20. Mai 2010

Sommersemester 2010

Ubungen zu Computergraphik II - Blatt 3 ¨

Abgabe am Donnerstag, den 03. 06. 2010, 10:15 Uhr

Aufgabe 1 (Shader, 10 Punkte )

Auf der Vorlesungshomepage finden Sie das Frameworkshader_2pass. Sie k¨onnen Szenen im Obj-Format laden und anzeigen. Ziel dieser Aufgabe ist es, die durch OpenGL dargestellte Szene in Echtzeit zu filtern.

Da man f¨ur das Filtering zu jedem Fragment die benachbarten Fragmente einlesen muss, ist ein 2-Pass Verfahren n¨otig.

Im ersten Renderpass wird die Szene in ein sogenanntes Framebuffer-Objekt (FBO). gerendert. Ein FBO kann man sich vereinfacht als einen Bereich im Texturspeicher der Graphikkarte vorstellen. Im zweiten Renderpass wird das FBO als Textur eingebunden. Im Fragmentshader haben Sie nun ¨uber die Textur Zugriff auf die gerenderte Szene. Um zu gew¨ahrleisten, dass die komplette Textur verarbeitet wird, wird ein bildschirmf¨ullendes Rechteck gezeichnet, welches die Fragmentshaderaufrufe “anwirft” (ein Shader- aufruf pro Texel). Die Textur-Aufl¨osung entspricht in unserem Framework genau der Aufl¨osung des mit glViewport()festgelegten OpenGL-Zeichenfensters.

a) Schreiben Sie einen Fragmentshader, welcher einen FilterkernelK der Gr¨osse 3×3 auf die Textur T anwendet und die Fragmentfarbe entsprechend setzt, d.h.

FragColor(x, y) =

1

X

i=−1 1

X

j=−1

K(i, j)T(x−i, y−j) (1)

Nehmen Siedefault.frag als Ger¨ust f¨ur Ihren Shader. Der Kernel selbst soll in Form einer 3×3− Matrix als Uniform-Variable an den Shader ¨ubergeben werden. Hierzu m¨ussen Sie auch die Funktionen FilterShader::initGLSL()undFilterShader::paint()entsprechend erweitern.

b) Erweitern Sie den Shader so, dass zwischen dem urspr¨unglichen und dem gefilterten Bild interpoliert werden kann. Verwenden Sie hierzu die vordefinierte Uniform-VariableinterpValue.

Testen Sie folgende Kernel:

1 4

0 1 0

1 −4 1

0 1 0

161

1 2 1 2 4 2 1 2 1

Laplace Gauss

Gerne d¨urfen Sie noch weitere (sinnvolle) Filterkernel ausprobieren.

Aufgabe 2 (Shader Bonusaufgabe, 3 Punkte)

Erweitern Sie Aufgabe 1 dahingehen, dass die Matrix, die den Filterkernel beschreibt, in der GUI des Programms eingegeben werden kann. Die Ver¨anderung soll sich sofort auf die OpenGL-Szene auswirken.

1

Referenzen

ÄHNLICHE DOKUMENTE

b) Geben Sie einen Algorithmus zum Rendern einer beliebigen Szene aus Dreiecken an, der einen Overdraw von 1 f¨ ur alle Pixel erreichen.. Aufgabe 2 (Z-Buffer: Wireframe-Darstellung

j = 1.01 eine Abstufung von Intensit¨ atswerten ergibt, die man als Mensch nicht mehr als “Stufen” wahrnehmen kann (d.h., diese Abst¨ ande liegen gerade unter der sog.

Zeigen Sie, dass auch bei Verwendung der Fl¨ achenformel (auf Folie 11 des Kapitels “Baryzentrische Koordinaten”) wenigstens eine der 3 baryzentrischen Koordinaten eines Punktes

Setzen Sie nun die Texturkoordinaten, so daß die Textur in z-Richtung (= v-Richtung der Textur) f¨ unfmal wiederholt wird. Setzen Sie zun¨ achst beide Texturfilter auf GL_NEAREST..

In dieser Aufgabe sollen Sie den Algorithmus von Pineda so erweitern, dass ein nicht-konvexes einfaches Polygon rasterisiert werden kann. Verwenden Sie dazu die aus der

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 Funktion

b) Gegeben sind die baryzentrischen Koordinaten (α, β, γ) des Dreiecks 4ABC (Abb. Hierbei bedeutet − kleiner und + gr¨ osser

a) Entwickeln Sie eine Transformationsfolge, die ein geometrisches Objekt an einer beliebigen Ebene im Raum reflektiert. Die Ebene sei gegeben durch einen Punkt P in dieser Ebene