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

Ähnliche Dokumente
Computergrafik SS 2010 Henning Wenke. Kapitel 21: OpenGL 3.1

Computergrafik Universität Osnabrück, Henning Wenke,

Computergrafik Universität Osnabrück, Henning Wenke,

3D Programmierpraktikum: OpenGL Shading Language (GLSL)

Advanced Computer Graphics 1. Übung

Programmierpraktikum 3D Computer Grafik

Geometrische Primitive und Hidden Surface Removal

GL ShadingLanguage(GLSL)

Parallele Algorithmen mit OpenCL. Universität Osnabrück, Henning Wenke,

Computer Graphics Shader

Computergrafik Universität Osnabrück, Henning Wenke,

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

Computergrafik Universität Osnabrück, Henning Wenke,

Advanced Computer Graphics 4. Übung

Numerik und Rechnen. Martin Heide & Dominik Holler. 12. Juni 2006

Computergrafik SS 2012 Probeklausur Universität Osnabrück Henning Wenke, M. Sc. Sascha Kolodzey, B. Sc., Nico Marniok, B. Sc.

OpenGL 3.1. Kapitel Einordnung und Motivation

Created by Michael Kirsch & Beat Rossmy

Computergrafik II. OpenGL Einführung

Parallele Algorithmen mit OpenCL. Universität Osnabrück, Henning Wenke,

Übungsblatt 10: Klausurvorbereitung

Shader. Computer Graphics: Shader

Praktikum 4: Grafiken und Ereignisse

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Einstieg in die Informatik mit Java

Relationen-Algebra und Persistenz Teil I

Relationen-Algebra und Persistenz Teil I

PROCESSING EINE ZUSAMMENFASSUNG. Created by Michael Kirsch & Beat Rossmy

Einführung in C. EDV1-04C-Einführung 1

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Programmier-Befehle - Woche 8

Konzepte objektorientierter Programmierung

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

3D Programmierpraktikum: Szenegraphen und Texturierung

Programmierpraktikum 3D Computer Grafik

Einführung in C. Alexander Batoulis. 5. Mai Fakutltät IV Technische Universität Berlin

PROCESSING STRUKTUR UND INPUT. Created by Michael Kirsch & Beat Rossmy

Der Datentyp String. Stringvariable und -vergleiche

String s1, s2; Eine Zuweisung geschieht am einfachsten direkt durch Angabe des Strings eingeschlossen in doppelte Hochkommata:

Theorie zu Übung 8 Implementierung in Java

Praktikum Computergrafik, WiSe 17/18 Übungsblatt 3

Computergrafik 1 Übung

Java Kurzreferenz Für Fortgeschrittene

Vorkurs Informatik WiSe 15/16

Technische Universität München WS 2004/2005 Fakultät für Informatik 11. Dezember 2004 Prof. Dr. Seidl

Praktikum Computergrafik

Einführung in JOGL 2.0

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Java Übung. Übung 2. Werner Gaulke. 19. April Universität Duisburg-Essen Kommedia, Übung EinPro SS06, Einführung in Java - Übung.

Rechtsbelehrung. Java und OOP Das Buch Christian Silberbauer 144

Vorkurs Informatik WiSe 16/17

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

Einführung in die Programmierung

Bru ckenkurs Programmieren

Übungen zum Bioinformatik-Tutorium. Blatt 3

Erste Java-Programme (Scopes und Rekursion)

Java Einführung Klassendefinitionen

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz

Zeiger, Arrays und Strings in C und C++

5.4 Arrays. Oft müssen viele Werte gleichen Typs gespeichert werden. Idee: Lege sie konsekutiv ab! Greife auf einzelne Werte über ihren Index zu!

UIKit (Cocoa Touch) Framework für ios Apps. Objective C. Model View Controller Pattern

Institut für Programmierung und Reaktive Systeme. Java 3. Markus Reschke

Bru ckenkurs Programmieren

Programmierpraktikum 3D Computer Grafik

Universität Osnabrück Fachbereich Mathematik / Informatik 1. Übung Prof. Dr. rer. nat. Oliver Vornberger Nico Marniok, B. Sc. Erik Wittkorn, B. Sc.

Implementieren von Klassen

II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )

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

Kapitel 13. Definition von Klassen. OOP Thomas Klinker 1

1 Klassen anlegen und Objekte erzeugen

1 Klassen anlegen und Objekte erzeugen

Methoden und Wrapperklassen

Eine Einführung Computergrafik SS14 Timo Bourdon

Objektorientierte Programmierung und Modellierung

Beispielprüfung CuP WS 2015/2016

Praktische Informatik 1

1. Referenzdatentypen: Felder und Strings. Referenz- vs. einfache Datentypen. Rückblick: Einfache Datentypen (1) 4711 r

1. Referenzdatentypen: Felder und Strings

Java 3D. Linien, Flächen und Objekte Axel Bartsch, Okt. 2002

Objekte. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 5. 1 Modulübersicht 3

C++ Teil 12. Sven Groß. 18. Jan Sven Groß (IGPM, RWTH Aachen) C++ Teil Jan / 11

Vorkurs Informatik WiSe 17/18

Listen. Prof. Dr. Christian Böhm. in Zusammenarbeit mit Gefei Zhang. WS 07/08

Programmier-Befehle - Woche 08

Grundlagen der Modellierung und Programmierung, Übung

Programmieren I + II Regeln der Code-Formatierung

Anwendung (2. Versuch:-) Entkopplung der Locks

Programmieren in Java

Repetitorium Programmieren I + II

Algorithmen und Datenstrukturen Sommersemester Übung Abgabe bis , 10:00 Uhr

Programmierpraktikum 3D Computer Grafik

Fakultät IV Elektrotechnik/Informatik

Tag 4 Repetitorium Informatik (Java)

Programmierung mit C Zeiger

Welche Informatik-Kenntnisse bringen Sie mit?

Transkript:

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

OpenGL Aufgaben der GL-Befehle Konfigurieren der Graphics Pipeline Datenübergabe an Server Steuern des Datenflusses Java OpenGL Bindings (Jogl) Anbindung an Fenstersystem Zugriff auf native GL-Funktionen Code: C-GL : Jogl : glenable(gl_depth_test); gl.glenable(gl3.gl_depth_test); 2

Spracheigenschaften und Syntax Zustandsmaschine Eigene Datentypen Funktionskonvention glclearcolor(0, 0, 0, 0); gluniform4fv(...); Vektoriell Parametertyp Argumentzahl Befehlsname Bibliothek Spezialisierung durch Konstanten glenable(int cap); Befehle beziehen sich auf: GL-State Übergebene Daten GL-Objekte, (auch) über Ids GL_DEPTH_TEST GL_CULL_FACE GL_PRIMITIVE_RESTART... 3

Display JOGL Applet Init Scene Renderer Scene Renderer OpenGL Programm Beispiel Setup Fixed Pipeline Setup Programmable Pipeline Init Application Data Transfer Data to GL Clear Framebuffer gl.glclear(...); Refresh & Transfer Scene Data Bind Data to Shader Program Draw swapbuffers(); 4

Setup Fixed Pipeline // Hintergrundfarbe setzen gl.glclearcolor(0, 0, 0, 0); // Z-Buffer aktivieren gl.glenable(gl3.gl_depth_test); // Transparenz deaktivieren gl.gldisable(gl3.gl_blend); // Culling der Flächen aktivieren gl.glenable(gl3.gl_cull_face); // Positiven Drehsinn festlegen gl.glfrontface(gl3.gl_ccw); // Abgewandte Flächen nicht zeichnen gl.glcullface(gl3.gl_back); // Informationen über Ausgabegerät glviewport(x, y, width, height); 5

Setup Programable Pipeline 1. Erzeuge Shader Object (e) // Erzeugt ein leeres (Vertex) Shader Object. int type = GL3.GL_VERTEX_SHADER int vertexshader = gl.glcreateshader(type); 2. Erzeuge Program Object 3. Aktiviere Program Object // Hinzufügen des Codes zum Shader Object int count = 1; IntBuffer length = null; String[] string = {"Sourcecode von gestern..."}; gl.glshadersource(vertexshader, count, string, length); // Übersetzen des Shaders gl.glcompileshader(vertexshader); 6

Setup Programable Pipeline (2) 1. Erzeuge Shader Object (e) 2. Erzeuge Program Object 3. Aktiviere Program Object // Erzeugt (leeres) Program Object int program = gl.glcreateprogram(); //Hinzufügen der Shader Objects int shader = vertexshader; gl.glattachshader(program, shader); shader = fragmentshader; gl.glattachshader(program, shader); // Linken des Program Objects gl.gllinkprogram(program); // Aktiviere Program Object als Teil der Pipeline gl.gluseprogram(program); 7

Init Application Data Modelle Vertex Daten Primitive / Indizierung Textur Daten Transformationsmatrizen Lichtquellen Shader Code 8

Transfer Data to OpenGL Beispiel: Per Vertex Daten // Erzeuge (leere) Buffer Objects int n = 3; java.nio.intbuffer buffers = buffernames; gl.glgenbuffers(n, buffers); // Initialisiere und aktiviere Buffer Object für // Vertex Daten int coordbuffer = buffernames.get(0); int buffer = coordbuffer; int target = GL3.GL_ARRAY_BUFFER; gl.glbindbuffer(target, buffer); // Übergib Daten int size = vertexcoords.capacity() * 4; int usage = GL3.GL_STATIC_DRAW; Buffer data = vertexcoords; target = GL3.GL_ARRAY_BUFFER; gl.glbufferdata(target, size, data, usage); 9

Bind Data to Shader in vec4 vposition;... // Aktivieren eines Buffer Objects, etwa gl.glbindbuffer(gl3.gl_array_buffer, coordbuffer); // Abfragen der Adresse der In Variable int program = programobject; String name = "vposition"; int location = gl.glgetattriblocation(program, name); // Buffer für Verwendung mit dieser Variable aktivieren int index = location; gl.glenablevertexattribarray(index); // Spezifikation des Datenformats int size = 3; int type = GL3.GL_FLOAT; boolean normalized = false; int stride = 0; int pointer = 0; gl.glvertexattribpointer(location, size, type, normalized, stride, pointer); 10

Draw // Anzahl der zu rendernden Elemente, hier: alle int count = sphere.indexcnt; // Verweis auf das erste Element int pointer = 0; // Art des Primitives int mode = GL3.GL_TRIANGLE_STRIP; // Datentyp int type = GL3.GL_UNSIGNED_INT; // Auslösen des Renderns gl.gldrawelements(mode, count, type, pointer); 11

Weitere Beispiele // Procedural Texturing Fragment Shader #version 140 const float maxiterations = 100.0; const vec3 innercolor = vec3(1.0, 0.0, 0.0); const vec3 outercolor1 = vec3(0.0, 1.0, 0.0); const vec3 outercolor2 = vec3(0.0, 0.0, 1.0); // Berechnet nur in Abhängigkeit von den Texturkoordinaten... in vec2 texcoords; //...die Farbe des Fragments out vec4 myfragcolor; void main() { float real = texcoords.x; float imag = texcoords.y; float creal = real; float cimag = imag; float r2 = 0.0; float iter; for(iter = 0.0; iter < maxiterations && r2 < 4.0; iter++) { float tempreal = real; real = (tempreal * tempreal) - ( imag * imag) + creal; } imag = 2.0 * tempreal * imag + cimag; r2 = (real * real) + (imag * imag); } vec3 color; if (r2 < 4.0) color = innercolor; else // mix ist eine GLSL-Funktion für lineare Interpolation color = mix(outercolor1, outercolor2, fract(iter * 0.05)); myfragcolor = vec4(color, 1.0); 12

Literatur Weitere Infos: Henning Wenke (hewenke@uos.de) Raum: 31/318a 13