Programmierparadigmen in der Computergrafik Dr. Thomas Wieland thomas@drwieland.de 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 Sichtbares Bild auf Monitor, Drucker etc. 25. März 2002 Programmierparadigmen in der Computergrafik 7 Stufen des Rendering! Rendering: Umwandlung vom Polygon- Modell 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 Früher: Heute:! 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 25. März 2002 Programmierparadigmen in der Computergrafik 9 Programmierparadigmen Deklarative Programmierung! 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 Skript- Programmierung Z.B. SVG, VRML In kommerziellen Produkten wie 3DStudio Max oder truespace Prozedurale Programmierung Objektorientierte Programmierung In Standard-APIs wie OpenGL Z.B. Direct3D (zum Teil) oder Java3D 25. März 2002 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 3D- Szenen)! 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! Vorteile: Leichter erlernbar, mächtige Befehle! Nachteil: Weniger Möglichkeiten! Beispiele: Java3D, Open Inventor 25. März 2002 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! Werden manchmal in den Standard aufgenommen 25. März 2002 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 Bild Pixel auspacken Pixel packen Pixeloperationen Bildrasterung Texturspeicher Fragmentoperationen Frame Buffer Kanten auspacken Kantenoperationen Geometrie 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! Plattform für hochperformante Grafikoperationen in Echtzeit! Feingranulare Funktionen ("low-level")! Schnittstellen basieren auf COM (Component Objekt Model)! 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! MIDL-Compiler erzeugt daraus Proxy-Code und Typelibs 25. März 2002 Programmierparadigmen in der Computergrafik 24 12
Einordnung von Direct3D Win32-Anwendungen D3D Retained Mode GDI DirectDraw 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! Automatisches Rendering! Ereigniserzeugung (Kollisionserkennung)! Flexible Behandlung von Eingabegeräten 25. März 2002 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! Z.B. als "augmented reality"! Nutzung neuer Darstellungsmöglichkeiten! 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