§0 Überblick, Einführung in OpenGL 0.1 Überblickdannen/HTW_Vis_2005/Kapitel00.pdf · - OpenGL...

Post on 06-Feb-2018

223 views 1 download

Transcript of §0 Überblick, Einführung in OpenGL 0.1 Überblickdannen/HTW_Vis_2005/Kapitel00.pdf · - OpenGL...

§0-1

§0 Überblick, Einführung in OpenGL

Visualisierung mit C++ / OpenGL - SS 2005

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 2005

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 2005

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 2005

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 istgenau dann kontextsensitiv, wenn

- sie vorgegebene Kontexte berücksichtigt und

- flexibel auf sich dynamisch ändernde Situationenproaktiv reagiert.

§0-5

§0 Überblick, Einführung in OpenGL

Visualisierung mit C++ / OpenGL - SS 2005

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 2005

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 2005

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 2005

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 2005

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 2005

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 2005

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 2005

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 2005

0.1 Überblick

Anwendungsbeispiel MacVis: Visual Prototyping

§0-14

§0 Überblick, Einführung in OpenGL

Visualisierung mit C++ / OpenGL - SS 2005

0.1 Überblick

Anwendungsbeispiel MacVis: Volumen-Rekonstruktion aus CT-Datensätzen

§0-15

§0 Überblick, Einführung in OpenGL

Visualisierung mit C++ / OpenGL - SS 2005

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

Grundlagen Kontextsensitive Visualisierung MacVisMacVis Virtual Try-On Zusammenfassung

( ) 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-16

§0 Überblick, Einführung in OpenGL

Visualisierung mit C++ / OpenGL - SS 2005

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 2005

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 2005

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 2005

0.1 Überblick

Anwendungsbeispiel: VirtualTryOn – Virtueller Bekleidungskatalog- Morphing-Technik

- Segmentierung des Kleidungsstückes- Bestimmung einer geeigneten

Parametrisierung 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 2005

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 2005

0.1 Überblick

Anwendungsbeispiel: VirtualTryOn – Virtueller BekleidungskatalogErgebnisse

§0-22

§0 Überblick, Einführung in OpenGL

Visualisierung mit C++ / OpenGL - SS 2005

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 2005

0.1 Überblick

Anwendungsbeispiel: Mobile Visualisierung - Technik

Server

Datenbank

PLS-Datenbank

Mess- undProzessdaten

Dokumente

Pläne

Fotos

Videos

3D-Objekte

Benutzer-Anfrage

DynamischeDarstellung

DB-Anfr

age

DB-AnfrageResultat

Result

at

Clients

Visualisierungsagenten

Legende:

§0-24

§0 Überblick, Einführung in OpenGL

Visualisierung mit C++ / OpenGL - SS 2005

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 2005

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 2005

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 2005

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. 1.3)

- 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 2005

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, Windows NT, 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 2005

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 2005

0.2 Einführung in OpenGL

OpenGL: Grundlage für viele Anwendungen

- Viele high-level API’s 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 2005

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 2005

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 2005

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 2005

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 2005

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 2005

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 2005

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 2005

0.2 Einführung in OpenGL

Aufgabe:

- Legen Sie in VisualStudio ein erstes Projekt an, ü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, upX, upZ);

Experimentieren Sie mit verschiedenen Sichten auf die Szene.

§0-39

§0 Überblick, Einführung in OpenGL

Visualisierung mit C++ / OpenGL - SS 2005

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 (2. Auflage), Edward Angel, Addison-Wesley, 2004, ISBN 0321237625.

OpenGL 1.4 Programming Guide (3. Auflage), OpenGL ARB, Addison-Wesley, 2003, ISBN 032117348.

The OpenGL Utility Toolkit (GLUT) Programming Interface API Version 3, Mark J. Kilgard, Silicon Graphics, Inc. November 13, 1996