Grafikprogrammierung (Echtzeitrendering)



Ähnliche Dokumente
Kapitel 21: OpenGl 1

Computergrafik SS 2008 Oliver Vornberger. Kapitel 21: OpenGl

Teil V. Grundlagen der Computergrafik

Einführung in die Programmierung

Teil VIII. Grundlagen der Computergrafik

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl

Matrix42. Use Case - Sicherung und Rücksicherung persönlicher Einstellungen über Personal Backup. Version September

Delegatesund Ereignisse

Klausur in Programmieren

3D-Konstruktion Brückenpfeiler für WinTrack (H0)

S7-Hantierungsbausteine für R355, R6000 und R2700

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

Objektbasierte Entwicklung

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Graphic Coding. Klausur. 9. Februar Kurs A

:= Modellabbildung. Bildsynthese (Rendering) Bildsynthese

A. Ersetzung einer veralteten Govello-ID ( Absenderadresse )

Handbuch USB Treiber-Installation

Programmierung in C. Grundlagen. Stefan Kallerhoff

Handbuch ECDL 2003 Modul 2: Computermanagement und Dateiverwaltung Der Task-Manager

1 Vom Problem zum Programm

Kapitel 7 - Wägungen

Installationsanleitung. Ab Version

1. Allgemein Speichern und Zwischenspeichern des Designs Auswahl der zu bearbeitenden Seite Text ergänzen Textgrösse ändern 3

Einführung in die C-Programmierung

Sie können diesen Service verwenden, um fast beliebig große Dateien auch über 2 GB zu versenden.

Symbolbearbeitung mit EPLAN 5.60/5.70 DIC_***D.SYM

ecaros2 Installer procar informatik AG 1 Stand: FS 09/2012 Eschenweg Weiterstadt

Automatisierung ( Fernsteuerung ) von Excel unter Microsoft Windows Tilman Küpper (tilman.kuepper@hm.edu)

Einrichtung des DFÜ-Netzwerkes

Benutzerhandbuch - Elterliche Kontrolle

Bedienungsanleitung PC-Konfigurationssoftware des ID Inclinometers

Wie man Registrationen und Styles von Style/Registration Floppy Disketten auf die TYROS-Festplatte kopieren kann.

Lubuntu als Ersatz für Windows

FuxMedia Programm im Netzwerk einrichten am Beispiel von Windows 7

Übersicht Programmablaufsteuerung

Installation OMNIKEY 3121 USB

Grundlagen der Theoretischen Informatik, SoSe 2008

Erstellen einer Collage. Zuerst ein leeres Dokument erzeugen, auf dem alle anderen Bilder zusammengefügt werden sollen (über [Datei] > [Neu])

Einführung in die C++ Programmierung für Ingenieure

Arbeiten mit UMLed und Delphi

Anleitung. Lesezugriff auf die App CHARLY Termine unter Android Stand:

Computergrafik 1 Übung, Wintersemester Eclipse Hands-On. C++ Projektsetup mit OpenGL und GLUT unter Eclipse für Windows

ecaros-update 8.2 Update 8.2 procar informatik AG 1 Stand: DP 02/2014 Eschenweg Weiterstadt

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

UMSTELLUNG DER RÖNTGEN-SCHNITTSTELLE DÜRR-DBSWIN AUF DÜRR-VDDS

Medea3 Print-Client (m3_print)

Die Lernplattform bw21 und ihre Funktionalitäten

Bereich METIS (Texte im Internet) Zählmarkenrecherche

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

Einzel- s und unpersönliche Massen-Mails versenden

Programme im Griff Was bringt Ihnen dieses Kapitel?

ecaros2 - Accountmanager

Einführung in die Programmierung

Import und Export von Übergängern

Erhöhte Sicherheit im Microsoft Internet Explorer

Zahlen auf einen Blick

Fakultät Angewandte Informatik Lehrprofessur für Informatik

Sichere Anleitung Zertifikate / Schlüssel für Kunden der Sparkasse Germersheim-Kandel. Sichere . der

Anleitung zum Download der aktuellsten GreenStar Software für Original GreenStar System (Stand: August 2005)

Speicher in der Cloud

Downloadfehler in DEHSt-VPSMail. Workaround zum Umgang mit einem Downloadfehler

PROFIS Software Lösungen

s.beat DAP-10X White Paper USB Stromversorgung am Apple Macintosh und deren Auswirkung

Wie halte ich Ordnung auf meiner Festplatte?

Guideline. Facebook Posting. mit advertzoom Version 2.3

Einführung in die Java- Programmierung

Einführung in die Programmierung (EPR)

Einführung in TexMaker

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

ZAHLUNGSAVIS. Im Zahlungsprogrammteil automatisch erstellen

Cross-Plattform Spieleentwicklung mit der SDL

BANKETTprofi Telefonschnittstelle

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Modellierung und Programmierung 1

Testen mit JUnit. Motivation

Kapitel 3 Bilder farblich verändern - Arbeiten mit Objekten

Aktivierung von Makros in den Erfassungshilfen

So gehts Schritt-für-Schritt-Anleitung

Erstellen der Barcode-Etiketten:

Feiertage in Marvin hinterlegen

Installation des Authorware Webplayers für den Internet Explorer unter Windows Vista

teamsync Kurzanleitung

Deklarationen in C. Prof. Dr. Margarita Esponda

1. Melden Sie sich als Administrator an und wechseln Sie zum Desktop

Handbuch ECDL 2003 Basic Modul 5: Datenbank Access starten und neue Datenbank anlegen

Bitte wenden. Name: KURSARBEIT NR. 4 (10 DIFF GA) Seite 1

Algorithmen und Datenstrukturen

Programmierkurs Java

Datenbank-Verschlüsselung mit DbDefence und Webanwendungen.

affilinet_ Flash-Spezifikationen

Registration von bereits bewilligten klinischen Versuchen

690+ Bootloader Software - Upgrade -

Thermoguard. Thermoguard CIM Custom Integration Module Version 2.70

Bedienungshinweise für das Smartboard. Basisfunktionen

SCHULVERSUCH INFORMATIK IN BADEN-WÜRTTEMBERG. Gerhard Liebrich Peter-Petersen-Gymnasium Mannheim

5. Abstrakte Klassen

Daten-Synchronisation zwischen dem ZDV-Webmailer und Outlook ( ) Zentrum für Datenverarbeitung der Universität Tübingen

Info-Veranstaltung zur Erstellung von Zertifikaten

Transkript:

(Echtzeitrendering) erfordert Unterstützung für beide Aufgaben der Computergrafik Geometrische Modellierung Datenstrukturen für geometrische Modelle Schnittstellen für deren Kombination Bildsynthese Rendering bleibt vor Nutzer (Programmierer) weitgehend verborgen Aber: (oft komplexe) Parameter müssen über Schnittstelle kontrolliert werden Weit verbreitete Grafikbibliotheken für Echtzeitrendering OpenGL (plattform- und programmiersprachenunabhängig) DirectX (nur MS Windows) Werden beide Hardware-seitig von aktuellen Grafikprozessoren ( ) unterstützt Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 3 68

Einführung in OpenGL Open Graphics Library Weit verbreitet eingesetzter Industriestandard für Anwendung wie CAD, Simulation, Virtual Reality, etc. aber auch Spiele OpenGL bietet: 3D-Echtzeitrendering Primitive zur Flächenmodellierung Effiziente Bildsynthese mit weitgehender Parametrisierbarkeit Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 3 69

OpenGL ist...... programmiersprachenunabhängig: es existieren Anbindungen für zahlreiche Programmiersprachen, und für andere können solche leicht umgesetzt werden... eine funktionale Schnittstelle: bietet eine einfache Schnittstelle bestehend nur aus Funktionen, welche von den meisten Programmiersprachen angeboten werden kann (in diesem Sinne ist OpenGL explizit über C und nicht über C++ angebunden)... plattformunabhängig: es existieren Umsetzungen für zahlreiche Betriebssysteme und Hardware-Plattformen (z.b. MS Windows, MacOS, Linux und zahlreiche Unix-Derivate) Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 3 70

OpenGL ist...... zustandsbasiert: da Funktionen für die Modellierung oder das Rendering oft viele Parameter erfordern, speichert OpenGL einmal gesetzte Parameter (Farbe, Textur, Projektions- oder Modellmatrizen etc.) als Teil des aktuellen Zustands der Bibliothek erfordert mitunter Rücksetzen... matrixbasiert: verwendet Matrizen für Projektion und Modelltransformation sowie weitere Aspekte. Zustand von Matrizen kann indirekt über intuitiv verständliche Funktionen manipuliert werden, z.b. Rotation (Multiplikation der aktuellen Modelltransformationsmatrix mit einer Rotationsmatrix) oder perspektivische Projektion (Multiplikation der aktuellen Projektionsmatrix mit einer perspektivischen Projektionsmatrix) Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 3 71

OpenGL ist...... Hardware-nah: die angebotenen Funktionen sind relativ nah an der von Grafikprozessoren angebotenen Funktionalität (wegen gegenseitiger Beeinflussung) - zahlreiche abstraktere und komfortablere Schnittstellen bauen zum Teil auf OpenGL auf... erweiterbar: Anbieter von Grafikprozessoren und andere können an der Weiterentwicklung durch hinzufügen neuer Funktionen teilnehmen (informeller Erweiterungsprozess)... kein GUI-System: OpenGL bietet Grafik, aber nicht den Kontext, in dem diese dargestellt wird (z.b. Fenster, Menüs, Buttons, etc.) hiefür können plattformspezifische oder plattformunabhängige (GLUT, im folgenden verwendet) Bibliotheken verwendet werden Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 3 72

OpenGL definiert...... eigene Datentypen: zum Zweck der Plattform- und Sprachunabhängigkeit definiert OpenGL, die einfach mit dem PräfixGL beginnen (z.b.glint,glfloat, etc.), die im Fall der Sprache C pertypedef auf C-Typen abgebildet werden... Funktionen entsprechend einer festen Namenskonvention: Funktionsnamen beginnen in OpenGL mit dem Präfixgl (bzw.glu für OpenGL Utilities undglut für GLUT), nach dem eigentlichen Namen werden die Anzahl und der Typ der Parameter im Namen kodiert, z.b.glvertex3f() modelliert einen Punkt (Vertex) mit 3 Float-Parametern als Koordinaten Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 3 73

OpenGL Primitive /1 Wenige einfache Primitive basieren auf Definition durch Eckpunkte (Vertexes) Freiformkurven und -flächen müssen durch diese angenähert werden - dafür existieren Hilfsfunktionen inglu.h Die Definition eines oder mehrere Primitive muss durch die Funktionen glbegin(...) undglend() eingeschlossen sein, wobei zu Beginn des Modellierungsblocks der Primitiv-Typ als Parameter übergeben wird, zum Beispiel zum Zeichnen von Linien glbegin(gl_lines);... glend(); Dazwischen können einzelne Punkte gesetzt oder Zeichenparameter (z.b. Farbe) gesetzt werden, zum Beispiel eine rote Linie glcolor3f(1.0, 0, 0); glvertex3f(-10,-10,0); glvertex3f(10,10,0); Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 3 74

OpenGL Primitive /2 2 4 4 3 3 6 4 5 3 2 1 2 1 1 6 5 GL_POINTS GL_LINES GL_LINE_STRIP 5 2 6 5 4 3 1 4 GL_LINE_LOOP 2 3 1 GL_POLYGON Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 3 75

OpenGL Primitive /3 4 3 8 7 2 4 6 8 1 3 6 1 2 2 5 6 1 3 5 7 5 4 GL_QUADS GL_QUAD_STRIP GL_TRIANGLES 1 3 5 2 3 1 4 2 4 6 GL_TRIANGLE_STRIP 6 GL_TRIANGLE_FAN 5 Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 3 76

OpenGL in C/C++ Implementiert als C-Standardbiliothek und bei den meisten Compiler-Implementierungen enthalten gl.h bietet OpenGL-Kern glu.h zahlreiche notwendige Hilfsfunktionen zusammengfaßt als OpenGL Utility Library Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 3 77

Einführung GLUT OpenGL Utility Toolkit Bibliothek welches GUI-Kompomenten (Fenster etc.) als Kontext für OpenGL-Grafiken anbietet Ebenfalls zur Steuerung der Nutzerinteraktion über Tastatur, Maus, etc. Für C durch Inklusion vonglut.h Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 3 78

GLUT ist...... plattformunabhängig: als alternative Schnittstelle zu plattformabhängigen Anbindungen wie WGL (Windows) oder GLX (Unix) für verschiedene Sprachen, Betriebssysteme und Hardware umgesetzt GLUT-Implementierungen basieren meist auf spezifischen Schnittstellen und sind deshalb auch eher weniger performant... ereignisbasiert: spezielle Funktionen (Handler) werden implementiert und beim GLUT-System zur Laufzeit registriert (Funktion als Parameter in C), damit diese beim Auftreten eines bestimmten Ereignisses automatisch aufgerufen werden, z.b. Wann immer ein erneutes Zeichnen der Grafik notwendig wird (Redraw) Tastatur oder Mauseingabe Veränderung des Fensters (Resize, Exit,...) Ablauf eines Zeitintervalls (Timer) Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 3 79

Programmierbeispiele 1 Haus vom Nikolaus Demonstration der grundlegenden Funktionsweise von OpenGL und GLUT 2D-Grafik Arbeiten mit einfachen Grafikprimitiven 2 Rotierender Würfel Hinweise: 3D-Grafik mit Nutzerinteraktion Arbeiten mit Projektions- und Modellmatrizen Quellcode nur auszugsweise angegeben vollständiger, lauffähiger Quelltext auf der Web-Seite zur Vorlesung Übersetzung und Ausführung erfordert Installation von GLUT Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 3 80

Beispiel: Haus vom Nikolaus Zeichnet das Haus vom Nikolaus in einem Zug 2D-Grafik mit Parallelprojektion Verwendet einen Line Strip als grafisches Primitiv Demonstration der grundlegenden Funktionsweise von OpenGL und GLUT Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 3 81

Haus vom Nikolaus:main int main(int argc,char ** argv) { // Initialisierung von GLUT und Erzeugung des Fensters glutinit(&argc,argv); glutinitdisplaymode(glut_depth GLUT_RGBA GLUT_DOUBLE); glutinitwindowsize(640,640); glutcreatewindow( Das Haus vom Nikolaus... ); glenable(gl_depth_test); // Registrierung der Handler-Funktionen glutdisplayfunc(redrawhandler); glutreshapefunc(resizehandler); } // Die GLUT Haupt-Schleife des Programms glutmainloop(); return 0; Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 3 82

Haus vom Nikolaus:main /2 Nach dem Aufruf vonglutmainloop() übernimmt GLUT die Kontrolle über das Programm/Fenster Programm erhält nur über 2 zuvor registrierte Handler Kontrolle zurück Im Fall des notwendigen Neuzeichnens: Redraw Im Fall der Änderung der FEnstergröße: Resize Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 3 83

Haus vom Nikolaus: Resize Handler void resizehandler(int w, int h) { // Setzen des Viewports glviewport(0,0,w,h); // Wechsel zur Projektionsmatrix und // Setzen auf eine einfache Orthogonalprojektion glmatrixmode(gl_projection); glloadidentity(); glortho(-22,22,-22,22,-1,1); } // Zurück zur Modellmatrix glmatrixmode(gl_modelview); Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 3 84

Haus vom Nikolaus: Resize Handler /2 Bei einem Resize muss für einen veänderten Viewport (erzeugte Rastergrafik) eine neue Projektion durchgeführt werden Umsschalten zur Modifikation der Projektionsmatrix Erstmal: Setzen als Einheitsmatrix Dann Multiplikation mit einer Orthogonalprojektionsmatrix passend zum aktuellen Viewport Modus zurücksetzen: im Folgenden wieder Veränderung der Modellmatrix Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 3 85

Haus vom Nikolaus: Redraw Handler /1 void redrawhandler() { // Zeichen-Buffer Löschen glclear(gl_depth_buffer_bit GL_COLOR_BUFFER_BIT); // Modellmatrix bleibt Identitätstransformation glloadidentity();... Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 3 86

Haus vom Nikolaus: Redraw Handler /2... // Das Haus des Nikolaus als Line Strip glbegin(gl_line_strip); glcolor3f(1,1,1); glvertex3f(-10,-10,0); glvertex3f(10,-10,0); glvertex3f(10,10,0); glvertex3f(-10,10,0); glvertex3f(-10,-10,0); glvertex3f(10,10,0); glvertex3f(0,20,0); glvertex3f(-10,10,0); glvertex3f(10,-10,0); glend(); } // Zeichen-Buffer nach vorn holen glutswapbuffers(); Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 3 87

Haus vom Nikolaus: Redraw Handler /3 OpenGL verwendet zwei Buffer (Double Buffering) Ein aktuell dargestellter Buffer Einer, auf den aktuelle Änderungen ausgeführt werden Nach der Veränderung der Grafik, werden die Buffer getauscht Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 3 88

Beispiel: Rotierender Würfel Rotierender Würfel 3D-Grafik, nur Kantenmodell Nutzerinteraktion zur Rotation um verschiedene Achsen und zum Wechsel der Projektionsmethode (perspektivisch und parallel) Demonstration der Arbeit mit Projektions- und Modellmatrizen Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 3 89

Rotierender Würfel: Globale Variablen // Globale Variablen: float frotanglex = 0.0f; float frotangley = 0.0f; float frotanglez = 0.0f; int iorthoproj = 0; int iwidth = 600; int iheight = 600; Globale Variablen als Programmzustand außerhalb der Handler-Aufrufe Rotationswinkel in 3 Achsen x, y, und z Projektionsmethode: perspektivisch wenniorthoproj == 0, parallel andernfalls Aktuelle Fenstergröße (für Projektion) Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 3 90

Rotierender Würfel: Keyboard Handler void keyboardhandler( unsigned char ukey, int x, int y ) { switch ( ukey ) case x : frotanglex += 1.0; break; case y : frotangley += 1.0; break; case z : frotanglez += 1.0; break; case o : iorthoproj = 1; break; case p : iorthoproj = 0; } glutpostredisplay(); } Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 3 91

Rotierender Würfel: Redraw Handler /1 void redrawhandler() { glmatrixmode( GL_PROJECTION ); glloadidentity(); if (iorthoproj) glortho(-2, 2, -2, 2,-10,20); else gluperspective(45.0, (float)iwidth/iheight, 1.0, 20.0); glclear( GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT ); glmatrixmode( GL_MODELVIEW ); glloadidentity(); gltranslatef( 0.0f, 0.0f, -5.0f ); glrotatef( frotanglex, 1.0f, 0.0f, 0.0f ); glrotatef( frotangley, 0.0f, 1.0f, 0.0f ); glrotatef( frotanglez, 0.0f, 0.0f, 1.0f );... Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 3 92

Rotierender Würfel: Redraw Handler /2 glbegin(gl_line_loop);... glend(); glbegin(gl_line_loop);... glend(); glbegin(gl_lines);... glend(); } glutswapbuffers(); Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 3 93

Rotierender Würfel: Redraw Handler /3 Zuerst wird in Abhängigkeit voniorthoproj die korrekte Projektionsmatrix erzeugt Im weiteren Verlauf Erzeugen der aktuellen Modelltransformationsmatrix Zuerst Einheitsmatrix Multiplikation mit Translationsmatrix: Verschiebung in das Sichtfeld um -5 in Richtung z-achse Multiplikation mit 3 Rotationsmatrizen für die Achsen x, y, z um entsprechende Winkel aus globalen Variablen Im weiteren Verlauf Zeichnen des eigentlichen Kantenmodells aus 2 Lineloops für linke und rechte Würfelfläche 4 Verbindungskanten wobei alle Koordinaten automatisch entsprechend der aktuellen Modelltransformation verändert werden Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 3 94