Dr. Raphael Wimmer Sommersemester 2024
Anstelle einer klassischen Vorlesung mit Übung gibt es:
Sie erhalten von mir:
“Aufwendiger Kurs, aber sehr praktisch weswegen es auch Spaß macht und die Zeit die man dafür aufwendet auch schnell verfliegt.”
“Interessante Vorlesung, die mir neue Themen und Anwendungsmöglichkeiten beigebracht hat. Die Einführungen in die OpenGL und OpenCV waren spannend und mir davor nur vom hören bekannt. Die Studienleistungen ließen sich auch gut bearbeiten. Waren am Anfang etwas überfordernd (da es bei mir kaum/kein Vorwissen gab), aber ließen sich meistens doch ganz gut durcharbeiten.”
“Sehr interessante Vorlesung, die viel praktisches Wissen mit sich bringt”
“Sehr interessant, aber man muss am Ball bleiben”
“Die Studienleistungen waren sehr interessant und anspruchsvoll, haben aber auch Spaß gemacht. Hab mir teilweise etwas schwer getan, auch weil mir die Erfahrung mit Python gefehlt hat. [...] Ansonsten sehr interessante und coole Veranstaltung, bei der man auch viel selber herumprobieren durfte (v.a. bei Studienleistungen) und gut erklärte Beispiele bekommen hat.”
Klassische frontale Vorlesung zum Einstieg.
Themen heute:
Danach eine Übung mit:
(kommt noch)
Material:
Es gibt drei verbreitete Möglichkeiten, Python-Module zu installieren:
apt
unter Debian/Ubuntu Linux)pip
- Pythons Paketmanagerconda
- Paketmanagement der Anaconda-DistributionUm für jede Anwendung separate Module zu installieren: virtual environments
apt install python3-matplotlib
pip3 install matplotlib
pip3 install -r requirements.txt
: Textdatei mit Paketnamen und ggf. Versionen.conda
: package manager für Anaconda (Intro).env
anlegen: python3 -m venv .env
source .env/bin/activate
(deaktivieren durch Beenden der Shell)conda create --name myenv
/ conda activate myenv
Entwickeln Sie eine Anwendung filtertool, mit der man (destruktiv) Bilder bearbeiten kann. Bilder liegen als RGB- oder Graustufenbild vor und können mit Pillow eingelesen und geschrieben werden. Ansonsten sollen alle Bildoperationen selbst geschrieben werden.
Abgabe: Di, 14. Mai 2024, 23:59 Uhr (5 Bonuspunkte - pro angefangener weiterer Woche 1 Punkt weniger)
Verpflichtende Features:
python3 filtertool.py --threshold 90 --blur 3 --edges image.jpg
)Wahlpflichtfeatures (3 Features):
python3 app.py --mode simple -a file.txt
Mehrere Möglichkeiten in Python:
sys.argv[]
parsen)Entwickeln Sie eine Zeichenanwendung mini-draw.py, mit der man Vektorgrafiken erstellen und bearbeiten kann. Die Funktionsweise soll gängigen Vektorgrafikprogrammen wie z.B. Inkscape ähneln. Die Anwendung soll einen tkinter.Canvas verwenden, in dem über die create_rect()-Methode einzelne Pixel gesetzt werden. Alle weiteren Zeichenoperationen sollen auf dieser Basis implementiert werden. Abgabe: Di, 18.6. 2024 (5 Bonuspunkte - pro angefangener weiterer Woche 1 Punkt weniger)
(Wenn nichts vorgegeben ist, einfach eine sinnvolle Lösung wählen)
p
die Distanz zur Objektkante zurück:“”
> 0, wenn er außerhalb des Objekts liegt
-
Beispiel Kreis: circle(point, radius) → distancetoorigin(point) - radius
min(sdf1, sdf2)
max(sdf1, sdf2)
max(sdf1, -sdf2)
Eure Aufgabe jetzt zu zweit:
circle(p, radius)
, die für einen Pixel p
im Bild überprüft, ob er im Kreis mit Mittelpunkt (0,0) und Radius r
liegt.circle()
und union/difference/intersection zeichnet
glClear(GL_COLOR_BUFFER_BIT) glColor3f(1.0, 1.0, 1.0) glLoadIdentity() gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0) glScalef(1.0, 2.0, 1.0) glRotatef(45, 0, 1, 0) glBegin(GL_QUADS) glVertex3f(0.0, 0.0, 0.0) glVertex3f(0.0, 1.0, 0.0) glVertex3f(0.0, 1.0, 1.0) glVertex3f(0.0, 0.0, 1.0) glEnd() glFlush()
→ Jupyter-Notebook simple_cube_immediate_mode.ipynb
f(p) => length(p-q) - r
void mainImage( out vec4 fragColor, in vec2 fragCoord )
(= fragment shader)vec2 fragCoord
)vec4 fragColor
, RGBA)vec3
)glPosition
gesetzt wird.gemeinsame Analyse von https://github.com/nvalis/DemoTool/
Entwickeln Sie eine Anwendung, die eine 3D-Welt basierend auf Meshes darstellt. Sie können zur Implementierung den OpenGL Immediate Mode oder das DemoTool verwenden.
Entwickeln Sie einen Shader in ShaderToy, der eine hübsche Animation erzeugt
Wahlpflichtfeatures: keine
Erweitern Sie das Raytracing-Notebook um eines der folgenden Features:
https://graphit.ur.de/w/images/thumb/Tafel-smaller.jpg/1170px-Tafel-smaller.jpg
(Wenn nichts vorgegeben ist, einfach eine sinnvolle Lösung wählen)