Programmierparadigmen in der Computergrafik

Werbung
Programmierparadigmen in
der Computergrafik
Dr. Thomas Wieland
[email protected]
FH Coburg, 25. März 2002
Gliederung
!
!
!
Einführung
Deklarative Programmierung
Standard-APIs
!
!
!
!
OpenGL
DirectX
Java3D
Zusammenfassung
25. März 2002
Programmierparadigmen in der Computergrafik
2
1
Einführung
Was ist Computergrafik?
!
!
Ziel: Erzeugung eines künstlichen Bildes auf
Basis einer Beschreibung oder eines
Algorithmus
Unterschiede zu
!
!
Bildverarbeitung: Manipulation eines
vorhandenen Bildes (meist Kameraaufnahmen)
Bildanalyse: inhaltliches Erkennen von
Bildbestandteilen
25. März 2002
Programmierparadigmen in der Computergrafik
4
2
Anwendungsgebiete der
Computergrafik
"
"
"
"
"
"
"
"
"
Wissenschaft
Technik
Animationen
Filme
CAD
Medizin
Spiele
Simulation
Architektur
25. März 2002
Programmierparadigmen in der Computergrafik
5
Programmierung von Computergrafik
!
Schritt 1: Festlegung der Objekte
!
!
!
!
!
!
3D-Formen werden durch Polygon-Oberflächen (bzw.
Dreiecke) definiert
Polygone sind durch ihre Eckpunkte bestimmt
Schritt 2: Festlegung eines Blickpunkts (Position des
Betrachters) und der Projektion
Schritt 3: Festlegung der Lichtquelle: Punktlichtquelle,
gerichtete Lichtquelle, Umgebungslicht etc.
Schritt 4: Festlegung der Eigenschaften der
Oberflächen der Objekte
Schritt 5: "Rendering" der Szene
25. März 2002
Programmierparadigmen in der Computergrafik
6
3
Die Grafik-Pipeline
!
!
Pipeline: Umwandlung der Bildbeschreibung
ins fertige Bild
Stufen:
Modellierung
Konstruktion von
grafischen Objekten
Rendering
Erzeugung von Bilddaten
(geräteunabhängig)
Ausgabe
25. März 2002
Sichtbares Bild auf
Monitor, Drucker etc.
Programmierparadigmen in der Computergrafik
7
Stufen des Rendering
!
!
Rendering: Umwandlung vom PolygonModell zum Pixel-Bild
Stufen:
1. Transformationen (Geometrische
Manipulationen)
2. Clipping (Abschneiden an Grenzflächen)
3. Projektion 3D nach 2D
4. Entfernen nicht sichtbarer Flächen
5. Schattierung, Helligkeit, Farbe
6. Umsetzung in Rasterpunkte
25. März 2002
Programmierparadigmen in der Computergrafik
8
4
Wandel der Computergrafik
Heute:
Früher:
!
!
!
!
Proprietäre Grafik-Pakete
dominierten die Industrie
Jeder Programmierer und
Dozent verwendete
eigenes API
Viele Algorithmen mussten
selbst implementiert
werden
Computergrafik war nur
"Eingeweihten" vorbehalten
25. März 2002
!
!
!
!
!
Offene, freie Software
Wenige standardisierte APIs
(OpenGL, DirectX)
Mächtige Grafikformate für
deklarative Programmierung
(SVG, VRML)
Algorithmen bereits in
Hardware integriert
Computergrafik dank
Spielkonsolen allen vertraut,
mit leistungsfähiger Software
leicht selbst herstellbar
Programmierparadigmen in der Computergrafik
9
Programmierparadigmen
Deklarative
Programmierung
Z.B. SVG, VRML
Prozedurale
Programmierung
In Standard-APIs wie OpenGL
25. März 2002
SkriptProgrammierung
In kommerziellen Produkten wie
3DStudio Max oder trueSpace
Objektorientierte
Programmierung
Z.B. Direct3D (zum Teil)
oder Java3D
Programmierparadigmen in der Computergrafik
10
5
Deklarative Grafik-Programmierung
Scalable Vector Graphics SVG
!
!
XML-Sprache für 2D-Vektorgrafiken, definiert vom
W3C, für Verbreitung im Web
Kann als XML bearbeitet werden, z.B.
!
!
!
!
!
mit XSL transformieren
über DOM manipulieren
über Apache Batik SVG Toolkit in Java programmieren
Umfasst Vektordarstellungen, Animationen,
eingebettete Schriften, Transparenz, Filtereffekte und
Farbmanagement
Auch JavaScript-Verarbeitung und Hyperlinks werden
unterstützt
25. März 2002
Programmierparadigmen in der Computergrafik
12
6
Beispiel für SVG
<svg width="600" height="300">
<g transform="translate(10 10)">
<g style="stroke:none; fill:lime;" >
<path d="M 0.0 112 L 20 124 L 40 129 L 60 126 L 80
120 L 100 111 L 120 104 L 140 101 L 164 106 L 170 103 L
173 80 L 178 60 L 185 39 L 200 30 L 220 30 L 240 40 L 260
61 L 280 69 L 290 68 L 288 77 L 272 85 L 250 85 L 230 85
L 215 88 L 211 95 L 215 110 L 228 120 L 241 130 L 251
149 L 252 164 L 242 181 L 221 189 L 200 191 L 180 193 L
160 192 L 140 190 L 120 190 L 100 188 L 80 182 L 61 179 L
42 171 L 30 159 L 13 140 L 00 112 Z"/>
</g>
</g>
</svg>
25. März 2002
Programmierparadigmen in der Computergrafik
13
Virtual Reality Modelling Language
!
!
Sprache für 3D-Grafiken (dynamische 3DSzenen)
Kann über das WWW verbreitet werden
!
!
!
!
!
3D fürs Internet
Benötigt einen eigenen Viewer
HTML nachempfunden
VRML-Dateien können mittels einem Editor,
einem Grafikprogramm mit Export-Funktion
oder einem Konverter erstellt werden
X3D entspricht VRML in XML
25. März 2002
Programmierparadigmen in der Computergrafik
14
7
Eigenschaften von VRML
!
!
VRML-Dateien sind Textdateien (UTF8)
VRML-Objekte werden durch "Knoten" in der
Datei definiert
!
!
!
Geometrie (z.B. Würfel, Kegel, Kugel)
Materialien, Oberflächen, Transformationen etc.
Weiterhin möglich:
!
!
!
Hyperlinks zu anderen URLs
Einbinden von externen Bildern
Interaktivität und Dynamik durch JavaScript
25. März 2002
Programmierparadigmen in der Computergrafik
15
Beispiele für VRML
#VRML V2.0 utf8
Shape {
geometry Cylinder {
radius 0.1
height 3.0}
appearance Appearance {
material Material { diffuseColor 0.1 0.1 0.9 }
}
}
Transform {
translation 0 2.5 0
children [
Shape {
geometry Sphere { radius 1 }
appearance Appearance {
material Material { diffuseColor 1 0 0 }
}
}
]
}
25. März 2002
Programmierparadigmen in der Computergrafik
16
8
Standard-APIs
Standard-APIs
!
API: Application Programming Interface
!
!
Programmierschnittstelle für Anwendungsentwickler
Zwei Varianten:
!
Hardwarenah, sehr fein detailliert
!
!
!
!
Vorteil: Direkter Zugriff auf alle Grafikmöglichkeiten
Nachteil: Schwierige und umfangreiche Programmierung
Beispiele: OpenGL, DirectX
Abstrakt, gröber
!
!
!
25. März 2002
Vorteile: Leichter erlernbar, mächtige Befehle
Nachteil: Weniger Möglichkeiten
Beispiele: Java3D, Open Inventor
Programmierparadigmen in der Computergrafik
18
9
OpenGL
!
Weit verbreitete Programmierschnittstelle,
besonders für 3D-Grafik
!
!
!
!
Erstmals 1992 vorgestellt
Wird von allen wichtigen Plattformen (Unix, Linux,
Windows, Mac, OS/2 usw.) unterstützt
Ein Architekturkomitee legt die Spezifikation fest
Implementierungen können eigene Erweiterungen
bereitstellen
!
25. März 2002
Werden manchmal in den Standard aufgenommen
Programmierparadigmen in der Computergrafik
19
Funktionsgruppen in OpenGL
!
!
!
!
!
!
Objektfunktionen: Definieren von dreidimensionalen
polygonalen Objekten
Attributfunktionen: Festlegen von Eigenschaften der
Objekte
Blickfunktionen: Festlegen des Betrachtungsmodus
Transformationsfunktionen: Modifizieren von
Objekten, z.B. Verschieben, Drehen, Skalieren
Eingabefunktionen
Kontrollfunktionen: Initialisierung, Rückgriff auf das
Fenstersystem
25. März 2002
Programmierparadigmen in der Computergrafik
20
10
OpenGL-Blockdiagramm
Pixel
auspacken
Pixeloperationen
Bildrasterung
Bild
Geometrie
Kanten
auspacken
Texturspeicher
Kantenoperationen
Fragmentoperationen
Frame Buffer
Pixel
packen
Polygonrasterung
Quelle: SGI
25. März 2002
Programmierparadigmen in der Computergrafik
21
OpenGL-Beispielprogramm
25. März 2002
Programmierparadigmen in der Computergrafik
22
11
DirectX®
!
!
Sammlung von Multimedia-APIs für Windows von
Microsoft, aktuell Version 8
Enthält für Grafik: DirectDraw® und Direct3D®
!
!
!
Schnittstellen basieren auf COM (Component Objekt
Model)
!
!
!
Plattform für hochperformante Grafikoperationen in Echtzeit
Feingranulare Funktionen ("low-level")
Zugriff aus C++ meist in Makros gekapselt
Zugriff aus VisualBasic bzw. C# einfacher
DirectX ist hardware-unabhängig
!
!
Nutzt Hardware-Beschleunigung in Grafikkarten und
Prozessoren (z.B. MMX, 3DNow!)
Verwendet ansonsten Software-Emulation
25. März 2002
Programmierparadigmen in der Computergrafik
23
Microsoft COM
!
Abstraktes Objektmodell
!
!
!
Definiert einen Standard für die Interaktion von binären
Komponenten (auch "ActiveX" genannt)
Ist programmiersprachenunabhängig, aber nicht wirklich
objekt-orientiert!
Schnittstellen fassen Methoden zusammen
!
!
Objekte sind nur über ihre Schnittstellen erreichbar
Jede Schnittstelle ist von IUnknown abgeleitet
!
!
Enthält u.a. Mechanismus für Objektlebenszeit
Schnittstellen werden in der Interface Description Language
(IDL) spezifiert
!
25. März 2002
MIDL-Compiler erzeugt daraus Proxy-Code und Typelibs
Programmierparadigmen in der Computergrafik
24
12
Einordnung von Direct3D
Win32-Anwendungen
D3D Retained Mode
DirectDraw
GDI
Direct3D
Immediate
Mode
Software Emulation
Windows DDI
DirectDraw/Direct3D HAL
Grafik-Hardware
25. März 2002
Programmierparadigmen in der Computergrafik
25
Direct3D Beispielprogramm
25. März 2002
Programmierparadigmen in der Computergrafik
26
13
Grafikprogrammierung in Java
Sun Java 2 Plattform
25. März 2002
Programmierparadigmen in der Computergrafik
28
14
Java3D
!
Plattformunabhängiges, abstraktes API ("high-level")
zur 3D-Programmierung in Java (J2SE)
!
!
!
Verfügbar für Windows, Solaris, AIX, HP-UX, Linux und IRIX
Bildet Abstraktionsschicht über Standard-APIs, d.h. benutzt
selbst OpenGL, DirectX etc.
Hohe Leistungsfähigkeit
!
!
!
!
!
Hohe Performanz
Umfangreiche 3D-Funktionalität
Objektorientiertes Paradigma
Unterstützung verschiedener Dateiformate
Unabhängige asynchrone Komponenten
!
!
!
25. März 2002
Automatisches Rendering
Ereigniserzeugung (Kollisionserkennung)
Flexible Behandlung von Eingabegeräten
Programmierparadigmen in der Computergrafik
29
Der Szenengraph
!
Spezifiziert die Grafik in ihren
Elementen
!
!
!
!
!
!
Objekte
Gruppierung
Verhalten (Call-backs)
Hierarchischer Aufbau
Anwendung konstruiert den
Szenengraph, API übernimmt das
Rendering
Enthält in Java3D:
!
!
"View"-Zweig für Blickrichtung etc.
"Content"-Zweig für Formen,
Beleuchtung usw.
25. März 2002
Programmierparadigmen in der Computergrafik
30
15
Java3D-Beispielprogramm
25. März 2002
Programmierparadigmen in der Computergrafik
31
Java Game API for Mobile Phones
!
!
Java-Schnittstelle für Spiele und Grafikanwendungen
auf Mobiltelefonen (J2ME/CLDC+MIDP)
Unterstützt u.a.
!
!
!
!
!
!
Sprites
Zeichenfunktionen
Bildmanipulationen
Gekachelte Hintergründe
Schnelle Funktionen durch native C-Implementierung
mit dünner Java-Schnittstellen-Schicht
Standardisiert im Java Community Process (JSR-118)
25. März 2002
Programmierparadigmen in der Computergrafik
32
16
Siemens Java Game API
25. März 2002
Programmierparadigmen in der Computergrafik
33
Zusammenfassung
17
Fazit
!
!
!
!
!
Computergrafik wird allgegenwärtig
Deklarative Grafikformate wie SVG oder VRML/X3D
werden immer leistungsfähiger
Programmierung von Computergrafik wird heute durch
Standard-APIs wie OpenGL oder DirectX bestimmt
Abstrakte Programmierschnittstellen wie in Java3D
erlauben die Konzentration auf die Anwendung, weg
von der reinen Grafikprogrammierung
Theoretische Grundkenntnisse sind immer noch nötig,
werden aber nicht mehr so oft gebraucht
!
"Arbeitsteilung" zwischen Grafikprogrammierer und
Anwendungsentwickler
25. März 2002
Programmierparadigmen in der Computergrafik
35
Wissenschaftliche Herausforderungen
!
Verbindung von Foto/Video und
Computergrafik
!
!
Nutzung neuer Darstellungsmöglichkeiten
!
!
!
Z.B. als "augmented reality"
Z.B. Holografie, 3d-Eindruck ohne Hilfsmittel
Effiziente Grafikverfahren für kleine Geräte
(Webpads, PDAs, Smart Phones)
"Hochsprachen" für Grafikprogrammierung
!
Grafik als Bestandteil der Software-Architektur
25. März 2002
Programmierparadigmen in der Computergrafik
36
18
Danke für Ihre Aufmerksamkeit
Fragen oder Anmerkungen?
25. März 2002
Programmierparadigmen in der Computergrafik
37
19
Herunterladen