Programmierpraktikum 3D Computer Grafik

Ähnliche Dokumente
Programmierpraktikum 3D Computer Grafik

3D Programmierpraktikum: Szenegraphen und Texturierung

Programmierpraktikum 3D Computer Grafik

3D Programmierpraktikum: OpenGL Shading Language (GLSL)

Computergrafik 1 Übung

Programmierpraktikum 3D Computer Grafik

Programmierpraktikum 3D Computer Grafik

Programmierpraktikum 3D Computer Grafik

Übung: Computergrafik 1

(7) Normal Mapping. Vorlesung Computergraphik II S. Müller. Dank an Stefan Rilling U N I V E R S I T Ä T KOBLENZ LANDAU

Computergraphik Grundlagen

Angkor - Geländevisualisierung

Szenengraphen. Codruţa Cosma. Universität Ulm Sommersemester 2005

3D-Modellierungsprogramme

Übungsstunde 8 zu Computergrafik 1

Texture Mapping Beispiel. Universität Frankfurt

Programmierpraktikum 3D Computer Grafik

UV Texturen (UV Mapping)

Übungsstunde 7 zu Computergrafik 1

Texture Mapping. Texturen

Kapitel 1: Die ersten Schritte 1

Computergrafik SS 2010 Henning Wenke. Kapitel 21: OpenGL 3.1 (Fortsetzung)

GPU Programmierung 6. Juli 2004 M. Christen, T. Egartner, P. Zanoni

Die Elemente einer Szene werden in einer Graphstruktur gespeichert

Computergrafik Universität Osnabrück, Henning Wenke,

C A R L V O N O S S I E T Z K Y. Texture-Mapping. Johannes Diemke. Übung im Modul OpenGL mit Java Wintersemester 2010/2011

Algorithmen und Datenstrukturen

Computergrafik Universität Osnabrück, Henning Wenke,

Folge 19 - Bäume Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

Stud.-Nummer: Datenstrukturen & Algorithmen Seite 1

3D Programmierpraktikum: Schattenberechnung in Echtzeit

Computergrafik 2008 Oliver Vornberger. Kapitel 19: Texturing

3D Programmierpraktikum: Geometrische Transformationen, Materialien und Beleuchtung

Programmierung 2 Studiengang MI / WI

Verkettete Datenstrukturen: Bäume

Christina Nell. 3D-Computergrafik

Einführung in die Programmierung für NF MI. Übung 07

Datenstrukturen und Algorithmen (SS 2013)

Einführung in OpenGL. Einführung in OpenGL

Abstrakter Datentyp (ADT): Besteht aus einer Menge von Objekten, sowie Operationen, die auf diesen Objekten wirken.

Grundlagen Polymorphismus Eigenschaften virtueller Klassen Mehrfachvererbung bei ROOT. Mehrfache Vererbung. Daniel Beneckenstein. 21.

Universität Augsburg, Institut für Informatik Sommersemester 2001 Prof. Dr. Martin Ester 08. Oktober Klausur II

Übungsblatt 10: Klausurvorbereitung

ALP II Dynamische Datenmengen

Organisatorisches. drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50

7.1 Polygon Offset. Anwendung - Darstellung von Polygonen als Teil von Oberflächen - Beispiel: Gradlinien auf der Erde - Schwierigkeit:

Programmierpraktikum 3D Computer Grafik

Shader. Computer Graphics: Shader

Graphen Jiri Spale, Algorithmen und Datenstrukturen - Graphen 1

Überblick. Rekursive Methoden. Backtracking. Memorization. Einfache rekursive Datenstrukturen. Aufzählen, Untermengen, Permutationen, Bitmengen

18. Natürliche Suchbäume

Aufgabe 2: Zweifacher de Casteljau

3D Programmierpraktikum: Einführung in C++ - Teil 1

7.4 Tesselierung von Polygonen

Algorithmen und Datenstrukturen

Programmieren in Java -Eingangstest-

Logische Datenstrukturen

Informatik II Prüfungsvorbereitungskurs

7. Dynamische Datenstrukturen Bäume. Informatik II für Verkehrsingenieure

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

Virtuelle Realität Scenegraphs (Game Engines)

Display-Listen, Blending, Antialiasing, Nebel. Display-Listen

Objektorientierte graphische Programmierung

Graphalgorithmen Minimale Spannbäume. Kruskal: Minimaler Spannbaum

Einführung in die API OpenGL

Kapitel 1: Die ersten Schritte Thema: Programmieren Seite: 1

Probelektion zum Thema. Shadow Rendering. Shadow Maps Shadow Filtering

OpenGL auf Mac OS X und ios

OpenGL und die Fixed-Function-Pipeline

Computergrafik 1 Übung

Fragen zur OOP in Java

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Übungsklausur Programmieren / Algorithmen und Datenstrukturen 1

Organisatorisches. Neue Übungsblätter: Nur mehr elektronisch? Abgabe Di, , 14 Uhr bis Do, , 8Uhr

3. Die Datenstruktur Graph

Javakurs für Anfänger

(6) Fortgeschrittene GPU- Programmierung

Abteilung Bild- und Signalverarbeitung Prof. Dr. Gerik Scheuermann. Tutorial - CGViewer

Informatik Abitur Bayern 2017 / II - Lösung

Übung 1: Object Inspector

7. Übung Informatik II - Objektorientierte Programmierung

Vererbung. Generalisierung und Spezialisierung Vererbung und Polymorphismus

Mapra: C++ Teil 4. Felix Gruber. 6. Mai IGPM, RWTH Aachen. Felix Gruber (IGPM, RWTH Aachen) Mapra: C++ Teil 4 6.

9. Natürliche Suchbäume

Advanced Computer Graphics 1. Übung

Programmierpraktikum 3D Computer Grafik

Einführung in die Programmierung 1

Programmierpraktikum 3D Computer Grafik

3. Übung zur Vorlesung Planare Graphen

Javakurs für Anfänger

Name: Seite 1. Beantworten Sie die Fragen in den Aufgaben 1 und 2 mit einer kurzen, prägnanten Antwort.

Das ausführbare Programm Bsp1.cfg, Bsp1.dof, Bsp1.dpr, Bsp1.res Projektdateien für Delphi 7 Prak.pas

C for Graphics Benjamin Rommel Seminar 'Paralleles Rechnen auf Grafikkarten' Sommersemester 2009 Betreuer: Julian M.

Kapitel 21: OpenGl 1

Klassen können bekanntlich aus zwei Komponententypen bestehen, nämlich Attributen und Methoden.

Transkript:

Dipl.Inf. Otmar Hilliges Programmierpraktikum 3D Computer Grafik Szenegraphen, Texturen und Displaylisten.

Agenda Organisatorisches Das Konzept der Szenegraphen Grundlagen Beispiel eines Szenegraphen Transformationen zwischen Knoten Texturierung Allgemeine Vorgehensweise UV-Koordinaten Texturierung in OpenGL DisplayLists

Organisatorisches Gruppen von 2 (max. 3) Studenten Anforderungen an das Projekt: Alle Konzepte der Veranstaltung sind enthalten (insb. Bump-Mapping, Height- Mapping) Das Programm MUSS kompilier- und lauffähig sein Wöchentliche Besprechung mit einer Präsentation der Gruppe Anschließend wird diskutiert Präsentation der Projektidee am 6.Juni Grundsätzliche Spielidee Zeitplan & Meilensteine Risikoeinschätzung & Risikomanagement Aufgabenverteilung Ständige Dokumentation des Projektes https://wiki.medien.ifi.lmu.de/main/3dprogpraktsose2007 https://wiki.medien.ifi.lmu.de/twiki/twikiregistration

Szenegraphen 23.05.2007 # 4

Das Konzept der Szenegraphen Enthält die logische und räumliche Anordnung der darzustellenden Szene Objekt-orientierte Datenstruktur: Directed Acyclic Graph (DAG) Baum (Wurzel enthält gesamte Szene) Besteht aus Objekten und Transformationen Jedes Objekt kann selbst ein Baum sein Vorteil: Transformation eines Objekts beeinflusst auch alle Kind-Objekte (Zusammenhängende) Objekte können als ganzes bewegt werden. Horizontale State-Separation

Das Konzept der Szenegraphen Beispiel: ROOT T Teekanne T Gedeck O Teekanne G Gedeck T Teetasse T Löffel T Zucker O Teetasse O Löffel O Zucker

Das Konzept der Szenegraphen Die Transformationsknoten beinhalten die Transformationsmatrizen bezgl. des übergeordneten Knotens Beziehung von Teekanne zum Löffel: T gesucht = T 1, L Teekanne T Gedeck T Löffel T 1, L x T x = T x T 1, L x = I

Das Konzept der Szenegraphen Objektkoordinaten: Koordinaten eines Objekts bezgl. des eigenen Koordinatensystems Beispiel: Vektoren der Teetasse (ohne Transformation vom Ursprung) Weltkoordinaten: Koordinaten eines Objekts bezgl. des Ursprungs des Universums Ursprung = Wurzel des Szenegraphen

Szenegraphbibliotheken Es gibt eine Vielzahl von Szenegraph-Bibliotheken Die meisten basieren auf OpenGL erlauben aber ein höheres Abstraktionslevel (Objekte statt Punkte + Kanten) SGI Performer Open Inventor Java 3D OpenSG OpenSceneGraph VRML 23.05.2007 # 9

Texture-Mapping in OpenGL 23.05.2007 # 10

Texturierung Allgemeine Vorgehensweise: Üblicherweise klare Trennung von Programmierer und Grafiker Der Programmierer erstellt Dummy-Texturen und legt diese korrekt auf die einzelnen Polygone Der Grafiker ersetzt die Texturen mit neuen, wobei er sich nicht um die korrekte Ausrichtung kümmern muss

Texturierung Beispiele für Dummy-Texturen:

Texturierung Das Prinzip der UV-Koordinaten: Texturen sind Flächen (2D) Jeder Punkt eines Polygons erhält zusätzlich zu seinen 3 Koordinaten noch die zwei Texturkoordinaten In OpenGL erhalten nur die Eckpunkte UV-Koordinaten. Dazwischen: Interpolation Die Textur hat die Längeneinheit 1 in x- und y-richtung, auch wenn sie nicht quadratisch ist.

Texturierung Beispiel für UV-Koordinaten:

Texturierung Beispiel für UV-Koordinaten:

Texturierung Texturierung in OpenGL: Verwenden der Klasse Texture: Der Konstruktor lädt automatisch die Bitmap und erzeugt drei verschieden gefilterte Texturen: Texture(char* file); Zugriff auf die jeweilige Textur erfolgt über das public Element tex[int filter]: Texture* texture; texture = new Texture( hello.bmp ); glbindtexture(gl_texture_2d, texture->tex[0]); // filter = 0, 1 or 2 delete texture;

Texturierung Laden mehrerer Texturen geschieht durch mehrere Objekte der Klasse Texture OpenGL vergibt eindeutige IDs für jede geladene Textur (wird alles in der Textur-Klasse erledigt) Ein- bzw. Ausschalten der Texturierung: void glenable(gl_texture_2d); // turn on texturing void gldisable(gl_texture_2d); // turn off texturing

Texturierung Nun muss die Textur gewählt werden, die auf die folgenden Polygone gezeichnet werden soll: void glbindtexture(gl_texture_2d, GLuint texture); Die Textur-ID erhält man von der zugehörigen Textur-Klasse: Texture* texture = new Texture( hello.bmp ); int filter = 1; glbindtexture(gl_texture_2d, texture->tex[filter]); delete texture;

Texturierung Texturen bleiben solange gültig, bis die Texturierung abgeschaltet wird oder eine neue Textur gewählt wird Setzen der UV-Koordinaten (vor jedem neuen Vertex): void gltexcoord2f(glfloat u, GLfloat v);

Texturierung Setzen der UV-Koordinaten: Texture* texture = new Texture( hello.bmp ); int filter = 1; void display() { glbindtexture(gl_texture_2d, texture->tex[filter]); glbegin(gl_quads); glnormal3f(0.0, 1.0, 0.0); gltexcoord2f(1.0, 0.0); glvertex3f( 1.0, 1.0, -1.0); gltexcoord2f(0.0, 0.0); glvertex3f(-1.0, 1.0, -1.0); gltexcoord2f(0.0, 1.0); glvertex3f(-1.0, 1.0, 1.0); gltexcoord2f(1.0, 1.0); glvertex3f( 1.0, 1.0, 1.0); glend(); }

Displaylists 23.05.2007 # 21

DisplayLists Sollen viele gleiche Objekte gezeichnet werden (z.b. 100 Asteroiden in einem Spiel), muss der Rechner jedesmal neu zeichnen DisplayLists ermöglichen das kompilieren von einem Objekt Kompilierte Objekte werden komplett im Speicher gehalten und können beliebig oft gezeichnet werden

DisplayLists Erzeugen von Listen: GLuint glgenlists(glsizei range); Beginnen eines Objekts: void glnewlist(gluint list, GLenum mode); // list = Identifikator der Liste // mode = GL_COMPILE Beenden eines Objekts: void glendlist(); Abrufen einer Liste: void glcalllist(gluint list);

DisplayLists Beispiel (Erzeugen): GLuint list; list = glgenlists(1); glnewlist(boxes, GL_COMPILE); glbegin(gl_quads); glend(); glendlist(); glnormal3f(0.0, 1.0, 0.0); gltexcoord2f(1.0, 0.0); glvertex3f(1.0, 1.0, -1.0); gltexcoord2f(0.0, 0.0); glvertex3f(-1.0, 1.0, -1.0); gltexcoord2f(0.0, 1.0); glvertex3f(-1.0, 1.0, 1.0); gltexcoord2f(1.0, 1.0); glvertex3f(1.0, 1.0, 1.0);

DisplayLists Beispiel (Abrufen): GLuint list; void display() { } // do some transformations glcalllist(list); // do some transformations glcalllist(list);