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