§0-1
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.1 Überblick
Bereiche der Visualisierung
- Flow-Vis
- Software-Vis
- Tensorfield-Vis
- Bio-Medical-Vis
- Mobile Vis
- Geospatial-Vis
- Architectural Vis
- Vol-Vis
- InfoVis
- Comparative Vis
§0-2
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
Simulationsdaten
Startwerte, Randbedingungen
(mathematisches) Modell
numerische Simulation
Messdaten
Simulation
Visualization
Rendering
Visualisierungsdaten
Datenfilterung / -reduktion
Mapping:
mathematisches Modell
Visualisierungsmodell
Simulationsdaten
Bilddaten
Diskretisierung
Sichtdefinition
Transformation
Projektion
Rasterisierung
Visualisierungsdaten
0.1 Überblick
Visualisierungs-Pipeline
§0-3
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.1 Überblick
Anwendungs-Beispiel: „Kontext-sensitive Visualisierung“
(Jun. Prof. Dr. Achim Ebert)
State-of-the-Art bei Visualisierungssystemen:
- Systemdesign
- Große monolithische Systeme
- Für spezielle Verwendungszwecke entwickelt
- Softwareentwicklung
- Anwendung und Visualisierungssystem eng gekoppelt
- Programmierung sehr aufwendig
- Flexibilität
- Plattformabhängigkeit
- Manuelle Einstellung der Systemparameter
- Keine dynamische Anpassung
§0-4
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.1 Überblick
Anwendungs-Beispiel: „Kontext-sensitive Visualisierung“
- Definition: kontextsensitiv
- kontextbezogen, kontextadaptiv
- „auf den aktuellen Zusammenhang – den Kontext – bezogen”
- Definition: kontextsensitive Visualisierung
- Eine Visualisierung bzw. eine Visualisierungsapplikation ist genau dann kontextsensitiv, wenn
- sie vorgegebene Kontexte berücksichtigt und
- flexibel auf sich dynamisch ändernde Situationen proaktiv reagiert.
§0-5
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.1 Überblick
Kontext-sensitive Visualisierung - Szenarien
- Benutzerkontext
- Individualität und Personalisierung
- Benutzermodell: individuelle Benutzereigenschaften
§0-6
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.1 Überblick
Kontext-sensitive Visualisierung - Szenarien
- Benutzerkontext
- Situationskontext
- Aktuelle Situation des Benutzers
- Orts- und Umgebungsmerkmale
- Visualisierungsanwendungen:
- Location-based services
- Mobile Visualisierung
§0-7
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.1 Überblick
Kontext-sensitive Visualisierung - Szenarien
- Benutzerkontext
- Situationskontext
- System- und Interaktionskontext
- Systemkontext: Möglichkeiten der Rechnerumgebung
- Plattformunabhängigkeit
- Interaktionkontext: sich dynamisch ändernde Werte
- Flexibilität des Visualisierungsprozesses
- Parameterwahl: Framerate vs. Qualität
§0-8
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.1 Überblick
Kontext-sensitive Visualisierung - Szenarien
- Benutzerkontext
- Situationskontext
- System- und Interaktionskontext
- Darstellungskontext
- Ausgabemedium (Art, Größe, Auflösung)
- Thematik: Wie stelle ich etwas dar?
§0-9
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.1 Überblick
Kontext-sensitive Visualisierung - Szenarien
- Benutzerkontext
- Situationskontext
- System- und Interaktionskontext
- Darstellungskontext
- Datenkontext
- Wünsche und Vorgaben des Benutzers
- Parameter i.d.R. nicht im Voraus bekannt
- Thematik: Was stelle ich dar?
§0-10
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.1 Überblick
Kontext-sensitive Visualisierung – Agentengesteuerte Visualisierungspipeline
UserDemands
Interaction
SystemPlatform
SystemValues
Data structures /Geometry /Colors /Textures
Measurements /Empirical Data
Model /Simulation
Resolution
MaterialsRenderingGeometry
LightsAnti-
Aliasing
Visualization
Reader FilterVisualizationAlgorithms
§0-11
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.1 Überblick
Anwendungsbeispiel MacVis: Multi Agent- and Component-based Visualization
PERFORMANCE AGENT
READERMARCHING
CUBELEVEL OF
DETAILTEXTURECOORDS
RENDERER
USER DEMANDS ENVIRONMENT
LEGEND
REACTIVE AGENT
PROACTIVE AGENT
DATA GENERATION DATA CONVERSION DATA VISUALIZATION
CONTROL LOOP
REACTIVE AGENTKNOWLEDGE BASE
ENVIRONMENTKNOWLEDGE BASE
§0-12
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.1 Überblick
Anwendungsbeispiel MacVis: CT-Datensatz eines menschlichen Kopfes
- 94 Schichtaufnahmen
- Abstand: 1.5 mm
- Auflösung: 2562 Pixel
- Pixelabstand: 0.8 mm
- Farbtiefe: 12 Bit
- Marching-Cubes-Algorithmus
- Berechnung von Konturflächen
- Approximation durch Dreiecksnetze
- Im Beispiel: ca. 150.000 Dreiecke (beste Qualitätsstufe)
- Level of Detail
§0-13
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.1 Überblick
Einschub: Marching-Cubes Algorithmus
- Berechnung von Konturflächen
- Erweitert Marching-Squares auf 3D
- Marching Squares:
- Wähle Zelle
- Bestimme Zustand der Zelle -> Bitvektor
- Lookup-Table -> Verlauf der Konturlinie
- Berechne Schnittpunkte mit Kanten der Zelle:
- Weiter mit benachbarter Zelle
i jS 1 V V mit i
j i
C f (V )
f (V ) f (V )
15
0 1 2
3 4 5
6 7 8
9 10 11
12 13 14
§0-14
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.1 Überblick
Anwendungsbeispiel MacVis: Visual Prototyping
§0-15
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.1 Überblick
Anwendungsbeispiel MacVis: Volumen-Rekonstruktion aus CT-Datensätzen
§0-16
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.1 Überblick
Anwendungsbeispiel: VirtualTryOn – Virtueller Bekleidungskatalog
- Vision
- Interaktiver Bekleidungskatalog mit Kunden als 3D-Modell
- Konfektionsware und Maßkonfektion
- Visuelle Passformkontrolle
§0-17
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.1 Überblick
Anwendungsbeispiel: VirtualTryOn – Virtueller Bekleidungskatalog
- VITUS 3D Body-Scanner
- 360°-Scanner; Scanvolumen: 1.2m x 0.8m x 2.1m
- Laserklasse: 1 (augensicher)
- Scandauer: 10 - 20 Sekunden
- Auflösung: 1 - 2 mm
- Optional: hochauflösende Farbtexturen
- Automatische Bestimmungindividueller Körpermaße
- Virtueller Kunde
- Scan-Objekt + Maße + Featurepunkte
§0-18
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.1 Überblick
Anwendungsbeispiel: VirtualTryOn – Virtueller Bekleidungskatalog
- Kleidungssimulation
- extrem zeitaufwendig
- Eingabe: 3D-Scan des Kleidungsstücks
- Morphing-Agent
- Regelsystem- Basis: bekleidungstechnische Größentabellen
- Exakte Maßvorgaben
- Lokalität: Änderung von Einzelmaßen (z.B. Ärmellänge)
- Kopplung von Maßänderungen (-> Konfektionsgrößen)
- Shape-Deformation, Morphing zwischen Größen
§0-19
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.1 Überblick
Anwendungsbeispiel: VirtualTryOn – Virtueller Bekleidungskatalog
- Morphing-Technik
- Segmentierung des Kleidungsstückes
- Bestimmung einer geeignetenParametrisierung für jedes Segment
- Deformation- Änderung der lokalen
Eckpunkt-Koordinaten bzgl. zugehöriger Parametrisierung
- Gesamt-Morph- Additive lokale Deformationen
zylindrisch
sphärisch
zylindrisch
zylindrisch
zylindrisch
§0-20
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.1 Überblick
Anwendungsbeispiel: VirtualTryOn – Virtueller Bekleidungskatalog
- Virtuelle Anprobe
- Positionierung
- Vorpositionierung: Featurepunkte aus Scanprozess
- „Haltungskorrektur” zur genauen Positionierung
§0-21
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.1 Überblick
Anwendungsbeispiel: VirtualTryOn – Virtueller Bekleidungskatalog
Ergebnisse
§0-22
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.1 Überblick
Anwendungsbeispiel: Mobile Visualisierung
- Inhalte
- Framework für ein flexibles, mobilesInformationsvisualisierungssystem
- Optimale visuelle Aufbereitung der Information
- Objekt- und/oder aufgabenorientierte Visualisierung
- Integration von 3D-Visualisierung auf allen Plattformen
- Einsatz modernster mobiler Geräte und Übertragungstechnologien
- Demonstrator
- Effiziente Informationsvermittlung und betriebliche Leistungssteigerung im Bereich von Abwasseranlagen
- Resultat: Transparentere sowie ökonomisch und ökologisch optimierte Prozesse in der Siedlungswasserwirtschaft
§0-23
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.1 Überblick
Anwendungsbeispiel: Mobile Visualisierung - Technik
Server
D atenbank
PLS-D atenbank
M ess- undProzessdaten
D okum ente
P läne
Fotos
Videos
3D -O bjekte
Benutzer-Anfrage
D ynam ischeD arste llung
DB-Anfra
ge
DB-AnfrageResu lta t
Resu ltat
C lients
Visualis ierungsagenten
Legende:
§0-24
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.1 Überblick
Anwendungsbeispiel: Mobile Visualisierung - Anwendungen
- Prozessüberwachung und -visualisierung
- Controlling und Benchmarking
- Reparatur und Wartung
- Aus- und Weiterbildung
- Notfall/Unfall
§0-25
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.2 Einführung in OpenGL
OpenGL: Einführung/Standard
- OpenGL (Open Graphics Library) ist ein Standard für 3D Rendering und 3D Hardware-Beschleunigung
- OpenGL läuft unter Windows, MacOS, Linux, Unix, …
- Website: http://opengl.org
- Das OpenGL Architectural Review Board – ARB – bestimmt den Standard
§0-26
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.2 Einführung in OpenGL
OpenGL: Eigenschaften
- Hohe Qualität und leistungsfähig
- Anwendungen in
– CAD/CAM/CAE
– Spiele
– Medizin
– VR
– Film / Fernsehen
§0-27
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.2 Einführung in OpenGL
OpenGL: Vorteile für Entwickler
- Industriestandard, gratis
- Neutral und plattformübergreifend
- Stabil, kompatibel zu früheren Versionen
- Zuverlässig und portierbar, unabhängig von
Betriebs- und Window-System
- Entwickelt sich weiter, (aktuell: Vers. 2.1)
- Skalierbar: Home PC bis Supercomputer
- Ausgereiftes API, das low-level Details kapselt
- Ausführliche Dokumentation erhältlich
§0-28
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.2 Einführung in OpenGL
OpenGL: Software Entwicklung
- OpenGL ist reich an Primitiven für
– Geometrie und Bild, Display-Listen, Transformationen, Beleuchtung, Texturen, Anti-aliasing, Blending, …
- Anbindung an C, C++, Fortran, Ada, Java, (Lisp) ausgehend von einheitlicher Spezifikation.
- Läuft unter den Betriebssystemen UNIX, Linux, MacOs, Windows 95/98/2000/NT/XP, Linux, Python, BeOS
- Läuft unter X-Windows (X11), Win32
- Unterstützt 2D und 3D
§0-29
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.2 Einführung in OpenGL
OpenGL: Hardwarebeschleunigung
- Je nach Grafik-Karte werden gewisse Befehle
– von reiner Software
– von der Hardware
– oder von Soft- und Hardware gemischt ausgeführt
- Flexible Implementierung für low-cost PC bis hin
zu Grosscomputern
- Kartenspezifische Erweiterungen sind ebenfalls
möglich
§0-30
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.2 Einführung in OpenGL
OpenGL: Grundlage für viele Anwendungen
- Viele high-level APIs bauen auf OpenGL auf:
– Open Inventor, IRIS Performer, OpenGL Optimizer, OpenSceneGraph
- Applikationen die auf OpenGL basieren:
– Maya
– 3D Studio Max
– WorldToolKit, WorldUp
– CosmoWorld
– Games like Unreal, Quake2, …
– …
§0-31
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.2 Einführung in OpenGL
OpenGL: ARB
- Das OpenGL Architecture Review Board (ARB),
wacht über den Standard
- Dem Konsortium das 1992 gegründet wurde,
gehören Firmen wie IBM, Intel, HP, Microsoft,
Silicon Graphics, Evans & Sutherlands, …, an
- OpenGL wird laufend weiterentwickelt
- Endverbraucher, Softwareverkäufer, und OpenGL
API Programmierer zahlen keine Lizenzgebühren,
(nur Hardware Hersteller)
§0-32
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.2 Einführung in OpenGL
OpenGL: Grundlagen
- API für Rendering in den Bildschirmspeicher,
unterstüzt keine Peripherie wie Window, Maus, Tastatur, …
– Wir verwenden hierzu GLUT
- Primitive (Punkt, Linie, Polygone, Pixel Rechteck)
unterliegen den jeweils aktiven Modi, die über
Prozeduraufrufe gesetzt werden können.
- OpenGL ist ein low-level API für 3D und 2D
Grafik, das das Rendering und weniger das
Modellieren von komplexen Objekten unterstüzt.
§0-33
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.2 Einführung in OpenGL
OpenGL: Grundlagen
- GL verwendet ein Client-Server Modell:
Client: Programm, das das API verwendet.
Server: Übernimmt das Rendering.
- OpenGL als Status-Maschine:
Client state
Server state
§0-34
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.2 Einführung in OpenGL
OpenGL: Syntax
- void glVertex3f(GLfloat x, GLfloat y, GLfloat z)
- void glNormal3dv(GLdouble arg[3])
- Rtype glName{e 1234}{e bsifd ub us ui}
– ([args,] T arg1, …, T argN [, args])
§0-35
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.2 Einführung in OpenGL
OpenGL: Hello World
#include <GL/glut.h>
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (250, 250);
glutInitWindowPosition (100, 100);
glutCreateWindow ("hello");
init ();
glutDisplayFunc(display);
glutMainLoop();
return 0; /* ANSI C requires main to return int. */
}
§0-36
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.2 Einführung in OpenGL
OpenGL: Hello World
void init (void) {
/* select clearing color */
glClearColor (0.0, 0.0, 0.0, 0.0);
/* initialize viewing values */
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
}
§0-37
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.2 Einführung in OpenGL
OpenGL: Hello Worldvoid display(void) {
glClear (GL_COLOR_BUFFER_BIT); /* clear all pixels */
/* draw polygon with corners at (0.25, 0.25, 0.0) and (0.75, 0.75, 0.0) */
glColor3f (1.0, 1.0, 1.0);
glBegin(GL_POLYGON);
glVertex3f (0.25, 0.25, 0.0);
glVertex3f (0.75, 0.25, 0.0);
glVertex3f (0.75, 0.75, 0.0);
glVertex3f (0.25, 0.75, 0.0);
glEnd();
/* don't wait! start processing buffered OpenGL routines */
glFlush ();
}
§0-38
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.2 Einführung in OpenGL
Aufgabe:
- Übersetzen Sie das oben gegebene Beispielprogramm und führen Sie es aus.
- Fügen Sie der Szene ein gelbes Dreieck mit den Ecken (0.25, 0.75, 0.0) (0.75, 0.75, 0.0) und (0.75, 0.75, 0.3) hinzu.
- Statt einer orthogonalen Parallelprojektion können Sie auch eine perspektivische Projektion benutzen. Ersetzen Sie dazu im Code die „glOrtho“-Anweisung durch folgende Anweisungen:gluPerspective(fieldOfView, aspect, near, far); gluLookAt(eyeX, exeY, eyeZ, centerX, centerY, centerZ,
upX, upY, upZ);
Experimentieren Sie mit verschiedenen Sichten auf die Szene.
§0-39
§0 Überblick, Einführung in OpenGL
Visualisierung mit C++ / OpenGL - SS 2007
0.2 Einführung in OpenGL
Literatur:
Computer Graphics with OpenGL (3. Auflage), D. Hearn, M.P. Baker. Prentice Hall, 2004. ISBN: 0130153907
OpenGL: A Primer (3. Auflage), Edward Angel, Addison-Wesley, 2007
OpenGL Programming Guide (5. Auflage), OpenGL ARB, Addison-Wesley, 2005,
The OpenGL Utility Toolkit (GLUT) Programming Interface API Version 3, Mark J. Kilgard, Silicon Graphics, Inc. November 13, 1996