Computergraphik I Die Graphik-Pipeline &

Größe: px
Ab Seite anzeigen:

Download "Computergraphik I Die Graphik-Pipeline &"

Transkript

1 Computergraphik I Die Graphik-Pipeline & Einführung in OpenGL 3+ G. Zachmann University of Bremen, Germany cgvr.informatik.uni-bremen.de

2 OpenGL OpenGL ist ein Software-Interface für Graphik-Hardware mit ca. 250 verschiedenen Kommandos Hardware-unabhängig, Hersteller-unabhängig Warum Open? Weiterentwicklung durch die Khronos-Gruppe - NVIDIA, ATI, IBM, Intel, SGI,. Von jedem Lizenznehmer erweiterbar (mittels Extensions) Nicht dabei (ein Feature): Handhabung von Fenstern/Windows, Benutzereingabe Der Standard im embedded Bereich (OpenGL ES) Smartphones, car infotainment, aircraft cockpits,... Viele weitere offene Standards der Khronos-Group ergänzen OpenGL Graphik-Pipeline 4

3 Geschichte vor OpenGL Standardisierungsbemühungen vor OpenGL GKS, PHIGS, Proprietäre Systeme HP: Starbase SGI: GL (Graphics Library) Gewinner: SGI mit GL in Verbindung mit sehr guter Hardware OpenGL (1992, Mark Segal & Kurt Akeley) Konkurrenz nur noch durch Microsoft (Direct3D) Graphik-Pipeline 5

4 Khronos Open Standards for Graphics and Compute Khronos 2016 G. Zachmann Computergraphik 1 WS 14 November 2017 Graphik-Pipeline 6

5 Die Grundstruktur von OpenGL-Programmen 3 Arten von Funktionen Zustand ändern Daten (z.b. Vertex-Koordinaten) übergeben Geometrie darstellen Klarer Namensraum Befehle fangen mit gl... an Konstanten mit GL_... Darauf aufbauend gibt es diverse Tools: Glm: Mathematische Funktionen (Vektoren, Matrizen,...) glew/glfw/...: Libraries zur Benutzerinteraktion, Fenstermanagement Qt: beinhaltet Kombination und noch viel mehr Graphik-Pipeline 7

6 "A Trip Down the Graphics Pipeline" Input: Geometric model: description of all objects, surfaces, Transformations Lighting model: Computational description of object and light properties, interaction (e.g., reflection) Synthetic Viewpoint (or Camera): Eye position and viewing frustum Raster Viewport (Frame Buffer): Pixel grid onto which image plane is mapped Output: Colors / Intensities suitable for framebuffer display (for example, 24 Bits RGB values at each pixel) Model-to-World Transformation Illumination (Shading) Viewing Transformation (Perspective / Orthographic) Clipping Projection (in Screen Space) Scan Conversion (Rasterization) Visibility / Display Graphik-Pipeline 8

7 Model Transformation (Model-to-World) 3D Modell wird im eigenen Koordinatensystem definiert (object space) Model Transformation positioniert die Objekte in einem allg. Koordinatensystem (world space) Model Transformation Illumination (Shading) Viewing Transformation (Perspective / Orthographic) Clipping y Projection (in Screen Space) Object spaces z World space x Scan Conversion (Rasterization) Visibility / Display Graphik-Pipeline 9

8 Illumination (Beleuchtung, Schattierung) Beleuchten von Polygonen (für Schattierung und Highlights) gemäß der Material-Eigenschaften, Oberflächeneigenschaften und Lichtquellen Lokale Beleuchtungsmodelle (kein Lichttransport von einem Obj zum anderen) Model Transformation Illumination (Shading) Viewing Transformation (Perspective / Orthographic) Clipping Projektion (in Screen Space) Scan Conversion (Rasterization) Visibility / Display Graphik-Pipeline 10

9 Viewing Transformation Umwandeln von Welt-Koord. nach Kamera-Koord. Bestimme Transformation für komplette Szene so, daß Betrachter-Position in den Ursprung verschoben wird und Blickrichtung entlang (-Z)-Achse ist y eye space Model Transformation Illumination (Shading) Viewing Transformation (Perspective / Orthographic) Clipping Projection (in Screen Space) z world space x Scan Conversion (Rasterization) Visibility / Display Graphik-Pipeline 11

10 Clipping Abschneiden der Polygone, die außerhalb des sichtbaren Bereiches liegen (view frustum) Dazu: transformiere Szene in normalisierte Koordinaten (NDC) Modell Transformation Illumination (Shading) Viewing Transformation (Perspective / Orthographic) Clipping Projektion (in Screen Space) Scan Conversion (Rasterization) eye space NDC Visibility / Display Graphik-Pipeline 12

11 Projektion Das Objekt wird nach 2D projiziert und räumlich diskretisiert (screen space) Modell Transformation NDC Screen Space Illumination (Shading) Viewing Transformation (Perspective / Orthographic) Clipping Projection (in Screen Space) Scan Conversion (Rasterization) Visibility / Display Graphik-Pipeline 13

12 Scan Conversion (Rasterisierung) Rasterisierung der Polygone in Pixel Ecken-Werte interpolieren (Farbe, Tiefenwert, ) Modell Transformation Illumination (Shading) Viewing Transformation (Perspective / Orthographic) Clipping Projektion (in Screen Space) Scan Conversion (Rasterization) Visibility / Display Graphik-Pipeline 14

13 Visibility (Sichtbarkeit) u.a. Tests Verdeckungen bestimmen Evtl. weitere Pixel-Operationen: Blending mit vorhandenem Frame-Buffer- Inhalt Maskierung (z.b. wegen Verdeckung durch andere Fenster) Farb-Transfer Modell Transformation Illumination (Shading) Viewing Transformation (Perspective / Orthographic) Clipping Projektion (in Screen Space) Scan Conversion (Rasterization) Visibility / Display Graphik-Pipeline 15

14 Definition Vertex Vertex = "Eckpunkt" = alle Attribute zur vollständigen Spezifikation eines Eckpunktes eines Primitives 3D Koordinaten (zunächst in Modelling Coords!) Farbe (evtl.) Normale (meistens) Textur-Koordinaten (u,v) user-defined attributes (soviele man möchte) Graphik-Pipeline 16

15 Definition Fragment und Pixel Achtung: unterscheide zwischen Pixel und Fragment! Pixel := eine Anzahl Bytes im Framebuffer bzw. ein Punkt auf dem Bildschirm Fragment := eine Menge von Daten (Farbe, Koordinaten, Alpha, ), die zum Einfärben eines Pixels benötigt werden M.a.W.: Ein Pixel befindet sich am Ende der Pipeline (im Framebuffer) Ein Fragment ist ein "Struct", das durch die Pipeline "wandert" und am Ende in ein Pixel gespeichert wird Graphik-Pipeline 17

16 Die GPU als "State-Machine" Man versetzt die "Maschine" in einen Zustand, der so lange besteht, bis er wieder verändert wird Beispiel: kopiere Daten in eine Vertex-Liste Effizienter, als Daten jedes Mal neu zu übergeben Zeichenkommandos State Changes GPU Graphik-Pipeline Zustand: Aktuelle Transf. Aktueller Vertex Buffer Aktuelle Textur Fragmente Graphik-Pipeline 18

17 Beispiel zur Betrachtung des Datenflußes Old mode (fixed-function, immediate): glclearcolor(1, 1, 1, 1); glclear(gl_color_buffer_bit); glloadidentity(); glortho(0, 100, 0, 100, -1, 1); glbegin(gl_polygon); glcolor3f(0, 0.5, 0); glvertex2f(11.0, 31.0); glvertex2f(37.0, 71.0); glcolor3f(0.5, 0, 0); glvertex2f(65.0, 71.0); glvertex2f(91.0, 38.0); glend(); glflush(); // white background // ignore it for now // set projection // start primitive // set color of vertex // send coords of vertex // next vertex, same color // dark red // end primitive // force completion Graphik-Pipeline 19

18 The Pipeline with Regards to Data Flow Force input to canonical format Convert to internal representation E.g., x, y to float Initialize unspecified values E.g., z = 0, w=1 Insert current modal state E.g., color to (0, 0.5, 0, 1) In our example: struct { float x,y,z,w; float r,g,b,a; float normal[3]; } vertex; struct { float x,y,z,w; // 11, 31, 0, 1 float r,g,b,a; // 0, 0.5, 0, 1 } vertex; struct { float x,y,z,w; // 37, 71, 0, 1 float r,g,b,a; // 0, 0.5, 0, 1 } vertex; Application Vertex assembly Framebuffer Display Graphik-Pipeline 20

19 Transform coordinates 4x4 matrix arithmetic Compute (per-vertex) lighting Compute texture coordinates, if procedurally defined Application Vertex assembly Vertex operations Framebuffer Display Graphik-Pipeline 21

20 Group vertices into primitives: points, lines, or triangles Old pipe: Decompose polygons to triangles Duplicate vertices in strips or fans In our example: 0 Create two triangles out of the polygon struct { vertex v0,v1,v2; } triangle; or struct { vertex v0,v1; } line; or struct { vertex v0; } point; Application Vertex assembly Vertex operations Primitive assembly Framebuffer Display Graphik-Pipeline 22

21 Clip to the window boundaries Perform back-face / front-face operations Backface culling Color assignment for 2-sided lighting In our example: nothing happens Application Vertex assembly Vertex operations Primitive assembly Primitive operations Framebuffer Display Graphik-Pipeline 23

22 Determine which pixels are included in the primitive Generate a fragment for each such pixel Calculate attributes (e.g., color) for each fragment In our example: Application Vertex assembly Vertex operations Primitive assembly Primitive operations Rasterization struct { int x,y; float depth; float r,g,b,a; } fragment; Framebuffer Display Graphik-Pipeline 24

23 Depth testing (aka z-buffering) Texture mapping Fog Scissor test Alpha test Color blending In our example: nothing to be done Result: struct { int depth; byte r,g,b,a; } pixel; Application Vertex assembly Vertex operations Primitive assembly Primitive operations Rasterization Fragment operations Framebuffer Display Graphik-Pipeline 25

24 Primitive in OpenGL Points Lines Line-Strip Line-Loop Dreiecke Band aus Dreiecken (Triangle Strip) Fächer aus Dreiecken (Triangle Fan) Graphik-Pipeline 27

25 Nicht mehr verfügbare Primitive (außer im compatibility profile): Polygone Vierecke (Quad / Quadrangle) Band aus Vierecken (Quad Strip) Graphik-Pipeline 28

26 Fixed-Function and Programmable Pipelines auf der GPU OpenGL 1: Fixed Function Pipeline Sehr sorgfältig ausbalanciert Einfachheit über Performance glbegin(gl_ ) glenable, gllight, Status Memory Host Commands glvertex Vertex Transform Cull, Clip & Project Assemble and Rasterize Primitive Fragment Processing Texture Memory Per- Fragment Operations Frame Buffer Operations Frame Buffer Display glteximage Pixel Pack & Unpack Read Back Control Graphik-Pipeline 29

27 OpenGL 2: teilweise programmierbare Pipeline (sog. Shaders) Vertex / Fragment Shader: legen offen, was sowieso schon immer da war Texturspeicher = allgemeiner Speicher für beliebige Daten glbegin(gl_ ) glenable, Status Memory Host Commands glvertex Vertex Processing Cull, Clip & Project Assemble and Rasterize Primitive Fragment Processing Per- Fragment Operations Frame Buffer Operations Frame Buffer Display glteximage Pixel Pack & Unpack Texture Memory Read Back Control Graphik-Pipeline 30

28 Der Immediate Mode Immediate Mode ("direkter Modus"): Primitive werden sofort, wenn sie festgelegt sind, an das Display geschickt (Standard) Die GPU kennt immer nur die Primitive, die aktuell durch die Pipeline laufen Weiteres Beispiel: glbegin( GL_LINES ); glcolor3f ( 1.0, 0.0, 0.0 ); glvertex3f( 0.0, 0.0, 0.0 ); glvertex3f( 1.0, 0.0, 0.0 ); glcolor3f ( 0.0, 1.0, 0.0 ); glvertex3f( 0.0, 0.0, 0.0 ); glvertex3f( 0.0, 1.0, 0.0 ); glcolor3f ( 0.0, 0.0, 1.0 ); glvertex3f( 0.0, 0.0, 0.0 ); glvertex3f( 0.0, 0.0, 1.0 ); glend(); G. Zachmann Computergraphik 1 WS 14 November 2017 Graphik-Pipeline 31

29 Der Retained Mode Retained Mode ("zurückhaltender Modus"): Primitive werden in sog. Buffer Objects gespeichert (Vertex Buffer Objects und Vertex Array Objects) VBO's können auf der GPU (Graphikkarte) gehalten werden Performance - GPU erhält noch weitere Möglichkeiten zur Optimierung Kann mehrmals mit unterschiedlichen Eigenschaften gezeichnet werden VBO's können verschieden kombiniert werden Vertex Data (VBO & VAO) Vertex Shader Primitive Setup and Rasterization Fragment Shader Framebuffer (w/ blending) Graphik-Pipeline 32

30 Weitere Features in OpenGL 3: Kontext-Profile: - Core: keine Fixed-Function-Pipeline, nur Dreiecke, keine Quads / Polygone,... - Compatibility: rückwärts-kompatibel bis OpenGL 1.0 Weitere Shader (Geometry Shader) In OpenGL 4: Noch mehr Shader (Tesselation Shader, Compute Shader) Graphik-Pipeline 33

31 Der Vertex Shader Berechnung der Position im Raum für jeden(!) Vertex (später mehr) out-variablen stellen die Verbindung zum Fragment Shader her gl_position ist eine vordefinierte out-variable, muss gesetzt werden Beispiel: #version 330 // OpenGL 3.3 oder höher uniform mat4 matrix; // Transformationsmatrix in vec3 vposition; in vec3 vcolor; // Position des Vertex // Farbe des Vertex out vec3 fcolor; // ausgehende Farbe des V. void main() { fcolor = vcolor; gl_position = matrix * vec4(vposition, 1.0); } Schnittstelle zur Host-Seite Uniforms matrix Attributes vposition vcolor Graphik-Pipeline 35

32 Der Fragment Shader Berechnet letzten Endes die Farbe für jedes ausgegebene Fragment Beispiel: #version 330 uniform float alpha; // vom Vertex Shader / Rasterizer in vec3 fcolor; // OpenGL 3.3 or higher Schnittstelle zur Host-Seite Uniforms alpha // einzige Ausgabe: die Farbe des Fragments out vec4 color; void main() { color = vec4( fcolor, alpha ); } Graphik-Pipeline 36

33 Das Shader-Programm Attribute können vom Host nur dem Vertex Shader übergeben werden Unbenutzte Variablen werden wegoptimiert Vertex Shader Uniforms matrix Attributes vposition vcolor Fragment Shader Uniforms alpha Shader Programm ID: Uniform 0: matrix 1: alpha ID: Attribute 0: vposition 1: vcolor // ID's / Handles zu den jeweiligen Variablen/Attributen GLint matrixuni = glgetuniformlocation(shprog, "matrix"); // 0 GLint alphauni = glgetuniformlocation(shprog, "alpha"); // 1 GLint vpositionattr = glgetattriblocation(shprog, "vposition"); // 0 GLint vcolorattr = glgetattriblocation(shprog, "vcolor"); // 1 GLint error = glgetattriblocation(shprog, "unknown"); // -1 Graphik-Pipeline 38

34 Prinzipielle Vorgehensweise des Renderns Shader kompilieren und zu Shader-Programm linken IDs der Attribute und Uniforms aus dem Shaderprogramm auslesen Buffer erzeugen Vertex Buffer Object (VBO): für Vertex-Attribute (Position, Farbe, Normale, Textur,...) Layout der Buffer bekannt geben: welches Attribut steht an welcher Stelle im Array "Verbindung" zwischen Attributen und Shader-Variablen (IDs) Vertex Array Object (VAO): verweist auf die VBO's Buffer mit Daten füllen Konkrete Werte an die Uniforms zuweisen Buffer Object rendern (mit aktivem Shader-Programm & VAO) Während eines Frames können Shader, VAOs, VBOs, Uniforms geändert werden Graphik-Pipeline 39

35 Generieren der Buffers Vertex Array Object Attributes 0: // generate vertex buffer object on the GPU glgenbuffers( 1, &m_vertices_buffer ); // set it as the active VBO (think "state") glbindbuffer(gl_array_buffer, m_vertices_buffer); // copy actual vertex coords into the VBO glbufferdata( GL_ARRAY_BUFFER, sizeof(vertices), (void*)vertices, GL_STATIC_DRAW ); verweist Vertex Buffer Object 1:... verweist Vertex Buffer Object GLuint my_obj; // Handle auf neues VAO glgenvertexarrays( 1, & my_obj ); // erstelle 1 Vertex Array Object glbindvertexarray( my_obj ); // setze my_obj als aktives VAO Achtung: für alle Code-Beispiele im Folgenden nehmen wir an, dass glbindvertexarray(my_obj) noch aktiv ist! Graphik-Pipeline 40

36 Beispiel (mit einem VBO pro Attribut) // Vertex positions (XYZ) float * position = { 0.0, 0.0, 0.0, // Ursprung 1.0, 0.0, 0.0, // x-achse 0.0, 0.0, 0.0, // Ursprung 0.0, 1.0, 0.0, // y-achse 0.0, 0.0, 0.0, // Ursprung 0.0, 0.0, 1.0}; // z-achse // Vertex colors (RGB) float * color = { 1.0, 0.0, 0.0, // rot 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, // grün 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, // blau 0.0, 0.0, 1.0}; glgenbuffer( 1, &position_buffer ); // create (empty) VBO glbindbuffer(gl_array_buffer, position_buffer); // use it glbufferdata(gl_array_buffer, sizeof(position), position, GL_STATIC_DRAW);... glgenbuffer( 1, &color_buffer ); // again for colors glbindbuffer(gl_array_buffer, color_buffer); glbufferdata(gl_array_buffer, sizeof(color), color, GL_STATIC_DRAW);... Graphik-Pipeline 41

37 Verbindung zwischen VBO und Shader-Variablen herstellen Shader Programm ID: Sh.-Var. 0: vposition 1: vcolor glbindbuffer( GL_ARRAY_BUFFER, position_buffer ); glbufferdata(... ); glenablevertexattribarray( vpositionattr ); glvertexattribpointer( vpositionattr, // ID of variable in shader prog 3, // # floats per attrib. GL_FLOAT, // Type GL_FALSE, // Normalized? 3*sizeof(float), // Stride length 0 // Offset in VBO (in bytes) );... Vertex Array Obj Attrib. ID : VBO 0: position_buffer Stride length = 3 * sizeof(float) p0 p1 p2 p3... 1: Graphik-Pipeline 42

38 Verbindung zwischen VBO und Shader-Variablen herstellen Shader Programm ID: Sh.-Var. 0: vposition 1: vcolor glbindbuffer( GL_ARRAY_BUFFER, color_buffer ); glbufferdata(... ); glenablevertexattribarray( vcolorattr ); glvertexattribpointer( vcolorattr, // ID of variable in shader prog 3, // # floats per attrib. GL_FLOAT, // Type GL_FALSE, // Normalized? sizeof(float[3]), // Stride length 0 // Offset in VBO (in bytes) );... Vertex Array Obj Attrib. ID : VBO 0: position_buffer 1: color_buffer p0 p1 p2 p3... c0 c1 c2 c3... v0 v1 v2 v3 Graphik-Pipeline 43

39 Rendering gldrawarrays( GL_LINES, // render mode 0, // offset in bytes 3 * 2 // # vertices ); Graphik-Pipeline 44

40 Beispiel mit interleaved Vertex Layout (nur ein VBO) struct VertexData { float position[3]; float color[3]; }; // Vertex Positionen (XYZ, RGB) VertexData * vertices = { {{0.4, -0.2, 0.2}, {1.0, 0.0, 0.0}}, // v0, rot {{-0.1, 0.8, 0.3}, {0.0, 1.0, 0.0}}, // v1, grün {{-0.2, 0.3, 0.1}, {0.0, 0.0, 1.0}}, // v2, blau {{-0.1, -0.2, 0.5},{1.0, 1.0, 1.0}}, // v3, weiß {{0.8, 0.2, 0.1}, {0.0, 0.0, 0.0}}, // v4, schwarz {{0.3, 0.4, 0.0}, {0.5, 0.5, 0.5}} // v5, grau }; Graphik-Pipeline 46

41 VBO erzeugen und füllen glgenbuffer( 1, &vertices_buffer ); glbindbuffer(gl_array_buffer, vertices_buffer ); glbufferdata(gl_array_buffer, sizeof(vertices), vertices, GL_STATIC_DRAW); p0 c0 p1 c1 p2 c2 p3 c3 p4... v0 v1 v2 v3 Graphik-Pipeline 47

42 Verbindungen herstellen Shader Program ID: Sh.-Var. 0: vposition 1: vcolor glenablevertexattribarray( vpositionattr ); glvertexattribpointer( vpositionattr, 3, // # floats per attrib. GL_FLOAT, // Type GL_FALSE, // Normalized? sizeof(vertexdata), // Stride length 0 // Offset in the VBO ); Vertex Array Obj Attrib. ID : VBO 0: vertices_buffer 1: Stride length = sizeof(vertexdata) p0 p1... v0 v1 Graphik-Pipeline 48

43 Verbindungen herstellen Shader Program ID: Sh.-Var. 0: vposition 1: vcolor Vertex Array Obj Attrib. ID : VBO 0: vertices_buffer 1: vertices_buffer glenablevertexattribarray( vcolorattr ); glvertexattribpointer( vcolorattr, 3, // # floats per attrib. GL_FLOAT, // Type of attr: float GL_FALSE, // Normalized? sizeof(vertexdata), // Stride length 3*sizeof(float) // Offset in the VBO ); vertices_buffer p0 c0 p1 c1... Offset Stride length = sizeof(vertexdata) v0 v1 Graphik-Pipeline 50

44 Rendering gldrawarrays( prim_type, 0, 3*2 ); GL_POINTS GL_LINES GL_LINE_STRIP GL_LINE_LOOP GL_TRIANGLES Graphik-Pipeline 51

45 Bemerkung Manchmal könnte es praktisch sein, eine eigene "VAO-Klasse" zu schreiben, die ein Interface ähnlich zum immediate mode hat: // Initialisierung VertexArrayObject vao = new VertexArrayObject( num_vertices ); vao->begin( GL_TRIANGLES ); vao->addvertex( 0.0, 0.0, 0.0 ); vao->addvertex( 0.5, 0.75, 0.0 ); vao->addvertex( -0.5, -0.25, 0.0 );... vao->end(); // display vao->draw(); Graphik-Pipeline 52

46 OpenGL Cheat Sheet zu VAO's & VBO's Vertex Shader glvertexattribpointer Shaderprogram enthält u.a. Liste von Uniforms // globale Werte Liste von Attributen // Werte pro Vertex Link Fragment Shader weitere... glgetuniformlocation glgetattriblocation glcreateshader glshadersource glcompileshader glcreateprogram glattachshader gllinkprogram gluseprogram Vertex Array Object glgenvertexarrays glbindvertexarray Link glenablevertexattribarray glvertexattribpointer Vertex Buffer Object glgenbuffers glbindbuffer glbufferdata Graphik-Pipeline 53

47 Microsoft Excel: Revolutionary 3D Game Engine? J Graphik-Pipeline 54

48 Qt Ab hier nur zu Ihrer Information! Ein API zur Entwicklung von Applikationen mit GUI Vorteile: Cross-platform Wird von vielen professionellen Software-Herstellern eingesetzt Enthält viele weitere, hilfreiche Funktionalität (zusätzlich zum Window- Management und Handling von User-Input) Wird von einem starken Konsortium weiterentwickelt Graphik-Pipeline 55

49 Konzept einer Qt-Applikation Merkregel: Almost everything is a widget! Widget steht für "window gadget" (= "Fenster-Ding") Widgets sind die Bausteine eines Windows oder GUIs - Z.B.: Buttons, Sliders, Graphik-Fenster, Rahmen-Fenster, Jede (!) Qt-Applikation enthält Instanzen von Widgets oder speziellen Versionen von Widgets Graphik-Pipeline 56

50 Ein einfaches QT-Programm #include <QApplication> #include <QPushButton> int main(int argc, char* argv[]) { QApplication app(argc, argv); QPushButton hello( Hallo Welt! ); hello.resize(100,30); hello.show(); return app.exec(); } Graphik-Pipeline 57

51 Signals und Slots liefern Inter-Objekt Kommunikation. Idee: - Objekte, die nichts voneinander wissen, können miteinander verbunden werden Jede von QObject abgeleitete Klasse kann Signals deklarieren, die von Funktionen der Klasse ausgestoßen (emit) werden können. Jede von QObject abgeleitete Klasse kann Slots definieren. Slots sind identisch zu Funktionen; zusätzlich können sie mit Signals "verbunden" werden. Zusätzliche Voraussetzung: - in der Klassendeklaration muss das Q_OBJECT-Makro aufgerufen werden. Die Signals und Slots von Objektinstanzen können miteinander verbunden werden. - Wird ein Signal S von Objekt A mit einem Slot T von Objekt B verbunden, und stößt Objekt A das Signal S aus, so wird Slot T von Objekt B aufgerufen. (Erinnerung: Slots sind Funktionen) Graphik-Pipeline 58

52 Beispiel: connect( button, SIGNAL(clicked()), qapp, SLOT(quit()) ); Graphik-Pipeline 59

53 Beispiel mit Signals and Slots #include <QApplication> #include <QPushButton> int main(int argc, char* argv[]) { QApplication app(argc, argv); QPushButton hello("hello World!"); hello.resize(100,30); hello.show(); QObject::connect( &hello, SIGNAL(clicked()), app, SLOT(quit()) ); return app.exec(); } Graphik-Pipeline 60

54 Kompilieren von Qt-Anwendungen Jede Plattform hat eigene Tools (Compiler, Linker, make- Programm) Qt benötigt zusätzlich Tools (moc, uic) Erstellen von Qt-Applikationen unter Linux: qmake -project generiert Projektdatei (.pro) qmake erstellt aus ihr ein Makefile make erstellt ausführbare Dateien Graphik-Pipeline 61

55 Ein einfaches Qt-Programm mit OpenGL #include <QApplication> #include <QSurfaceFormat> #include "window.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); // configure OpenGL QSurfaceFormat format; format.setversion(3, 3); // OpenGL 3.3 Core format.setprofile(qsurfaceformat::coreprofile); format.setsamples(16); // multisampling: anti-aliasing QSurfaceFormat::setDefaultFormat(format); // create window and make it visible Window window; window.show(); } return app.exec(); Graphik-Pipeline 62

56 Qt und OpenGL #include <QOpenGLFunctions_3_3_Core> #include <QOpenGLWidget> //... class GLWidget : public QOpenGLWidget, protected QOpenGLFunctions_3_3_Core { Q_OBJECT public: GLWidget(QWidget * parent = 0); ~GLWidget(); protected: void initializegl() Q_DECL_OVERRIDE; void resizegl(int w, int h) Q_DECL_OVERRIDE; void paintgl() Q_DECL_OVERRIDE; public Q_SLOTS: //... Q_SIGNALS: //... }; Graphik-Pipeline 63

57 Qt und OpenGL void GLWidget::initializeGL() { initializeopenglfunctions(); glclearcolor(1.0, 1.0, 1.0, 1.0); glenable(gl_depth_test); } // prepare shader programs, buffer, enable settings,... void GLWidget::paintGL { glclear( GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT ); }; // bind programs and buffers and draw arrays/elements till everything is fine Graphik-Pipeline 64

Seminar Game Development Game Computer Graphics. Einleitung

Seminar Game Development Game Computer Graphics. Einleitung Einleitung Gliederung OpenGL Realismus Material Beleuchtung Schatten Echtzeit Daten verringern Grafik Hardware Beispiel CryEngine 2 Kristian Keßler OpenGL Was ist OpenGL? Grafik API plattform- und programmiersprachenunabhängig

Mehr

Softwareprojekt Spieleentwicklung

Softwareprojekt Spieleentwicklung Softwareprojekt Spieleentwicklung Prototyp I (2D) Prototyp II (3D) Softwareprojekt 12.04. 19.04. 26.04. 03.05. 31.05. Meilenstein I 28.06. Meilenstein II Prof. Holger Theisel, Tobias Günther, OvGU Magdeburg

Mehr

Was ist QT? Beispiele: KDE Google Earth Mathematika

Was ist QT? Beispiele: KDE Google Earth Mathematika Einführung in QT Was ist QT? QT ist eine Klassenbibliothek für plattformübergreifende Programmierung graphischer Benutzeroberflächen QT ist für verschiedene Graphikplattformen wie X11 (Unix), Windows,

Mehr

Einführung in OpenGL. Einführung in OpenGL

Einführung in OpenGL. Einführung in OpenGL OpenGL: Einführung/Standard - OpenGL (Open Graphics Library) ist ein Standard für 3D Rendering und 3D Hardware-Beschleunigung - OpenGL läuft unter Windows, MacOS, Linux, Unix, - Website: http://opengl.org

Mehr

Probelektion zum Thema. Shadow Rendering. Shadow Maps Shadow Filtering

Probelektion zum Thema. Shadow Rendering. Shadow Maps Shadow Filtering Probelektion zum Thema Shadow Rendering Shadow Maps Shadow Filtering Renderman, 2006 CityEngine 2011 Viewport Real reconstruction in Windisch, 2013 Schatten bringen viel Realismus in eine Szene Schatten

Mehr

Grundlagen der 3D-Grafik

Grundlagen der 3D-Grafik Seminar Programmierung von Grafikkarten Grundlagen der 3D-Grafik 8.5.26 Dominik Bossdorf Christian Schulze Marco Sebastiao 1 Inhalt Grafikhardware Rendering Pipeline am Beispiel OpenGL 3D Theorie mit homogenen

Mehr

OpenGL auf Mac OS X und ios

OpenGL auf Mac OS X und ios OpenGL auf Mac OS X und ios Torsten Kammer 28.4.2011 CocoaHeads Aachen Grundlagen API für hardwarebeschleunigte 3D-Grafik Kann auch für schnelles 2D verwendet werden Grundlage von Core Image, Core Animation,

Mehr

DirectX und OpenGL. Proseminar Multimedia-Hardwareerweiterungen Michel Weimerskirch, 15. Februar 2006

DirectX und OpenGL. Proseminar Multimedia-Hardwareerweiterungen Michel Weimerskirch, 15. Februar 2006 DirectX und OpenGL Proseminar Multimedia-Hardwareerweiterungen Michel Weimerskirch, 15. Februar 2006 2 Inhalt Einleitung Übersicht DirectX und Komponenten Übersicht OpenGL Sprachlicher Aufbau OpenGL Sprachlicher

Mehr

Praktikum Computergrafik

Praktikum Computergrafik Praktikum Computergrafik Steven Schlegel Abteilung für Bild- und Signalverarbeitung Betreuer: Steven Schlegel (schlegel@informatik.uni-leipzig.de) Einführung in OpenGL und GLSL OpenGL OpenGL (Open Graphics

Mehr

Computer-Graphik I Transformationen & Viewing

Computer-Graphik I Transformationen & Viewing lausthal Motivation omputer-raphik I Transformationen & Viewing Man möchte die virtuelle 3D Welt auf einem 2D Display darstellen. Zachmann lausthal University, ermany zach@in.tu-clausthal.de. Zachmann

Mehr

Kapitel 4: Schattenberechnung

Kapitel 4: Schattenberechnung Kapitel 4: Schattenberechnung 1 Überblick: Schattenberechnung Motivation Schattenvolumen Shadow Maps Projektive Schatten 2 Motivation Wesentlich für die Wahrnehmung einer 3D-Szene Eigentlich ein globaler

Mehr

GL ShadingLanguage(GLSL)

GL ShadingLanguage(GLSL) Was ist GLSL C/Java ähnliche Hochsprache zur Erstellung von GPU-basierter Software (Shader) An die Open Graphics Library (OpenGL) gebunden Darstellung komplexer 2D- und 3D-Szenen auf Basis von Echtzeitberechnungen

Mehr

Computergrafik II. OpenGL Einführung

Computergrafik II. OpenGL Einführung Computergrafik II OpenGL Einführung OpenGL Rein prozedurales Interface Keine direkten Klassen/Objekte Verwaltung von OpenGL-Strukturen mittels Identifier Explizites funktionales Erzeugen/Löschen von Objekten

Mehr

Einführung in die Programmierung

Einführung in die Programmierung : Inhalt Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund Was ist eine GUI? Was ist QT? Erste Schritte:

Mehr

Einführung in die Programmierung Wintersemester 2011/12

Einführung in die Programmierung Wintersemester 2011/12 Einführung in die Programmierung Wintersemester 2011/12 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund : GUI-Programmierung Inhalt Was ist eine GUI? Was

Mehr

Eine Einführung Computergrafik SS14 Timo Bourdon

Eine Einführung Computergrafik SS14 Timo Bourdon Eine Einführung Computergrafik SS14 Timo Bourdon Organisatorisches Übung am Freitag den 11. Juli entfällt! Zum OpenGL-Übungsblatt OpenGL 3.0 oder höher notwendig (Shading Language 1.50 oder höher) CIP

Mehr

OpenGL. (Open Graphic Library)

OpenGL. (Open Graphic Library) OpenGL (Open Graphic Library) Agenda Was ist OpenGL eigentlich? Geschichte Vor- und Nachteile Arbeitsweise glscene OpenGL per Hand Debugging Trend Was ist OpenGL eigentlich? OpenGL ist eine Spezifikation

Mehr

Geometrische Primitive und Hidden Surface Removal

Geometrische Primitive und Hidden Surface Removal C A R L V O N O S S I E T Z K Y Geometrische Primitive und Hidden Surface Removal Johannes Diemke Übung im Modul OpenGL mit Java Wintersemester 2010/2011 Wiederholung Geometrische Primitive in OpenGL Mit

Mehr

Proseminar: Virtuelle Präsenz. Vortrag: Steve Rechtenbach

Proseminar: Virtuelle Präsenz. Vortrag: Steve Rechtenbach Proseminar: Virtuelle Präsenz Vortrag: Steve Rechtenbach Themen: 2/22 Einführung Was ist OpenGL? / Entwicklung Fakten Kleines(!) Beispiel Hello OpenGL Shader Zusammenfassung OpenGL vs Direct3D Einführung:

Mehr

Objektorientierte Programmierung mit C++ (WS 2010)

Objektorientierte Programmierung mit C++ (WS 2010) Objektorientierte Programmierung mit C++ (WS 2010) Dr. Andreas F. Borchert, Tobias Brosch Institut für Angewandte Informationsverarbeitung Universität Ulm Blatt 11: Abgabetermin 19. Januar 2011 11 Uhr

Mehr

Interaktive Simulationen Lektion 1/3: Event-Driven Design und Signals

Interaktive Simulationen Lektion 1/3: Event-Driven Design und Signals MÜNSTER Interaktive Simulationen Lektion 1/3: Event-Driven Design und Signals Prof. Dr. Christian Engwer & Andreas Buhr 16. April 2014 MÜNSTER Interaktive Simulationen 2 /22 Normales C++ Programm Programmstruktur

Mehr

Qt Programmierung Teil 1 Fenster erstellen by NBBN (http://nbbn.wordpress.com) CrashKurs-Artig. Was brauche ich? -Einige C++ Kenntnisse

Qt Programmierung Teil 1 Fenster erstellen by NBBN (http://nbbn.wordpress.com) CrashKurs-Artig. Was brauche ich? -Einige C++ Kenntnisse Qt Programmierung Teil 1 Fenster erstellen by NBBN (http://nbbn.wordpress.com) CrashKurs-Artig. Was brauche ich? -Einige C++ Kenntnisse Wie man in C++ mit Hilfe von Qt GUI-Anwendungen programmieren kann.

Mehr

Diplomarbeit. Neue Möglichkeiten durch programmierbare Shader. Unter der Leitung von: Prof. Dr.-Ing. Detlef Krömker

Diplomarbeit. Neue Möglichkeiten durch programmierbare Shader. Unter der Leitung von: Prof. Dr.-Ing. Detlef Krömker Diplomarbeit 5HDO7LPH6SHFLDO (IIHFWV Neue Möglichkeiten durch programmierbare Shader Unter der Leitung von: Prof. Dr.-Ing. Detlef Krömker Betreut von: Paul Grimm, Ralf Dörner Beginn: 01.04.02 Abgabe: 30.09.02

Mehr

Praktikum: Spieleengine im Eigenbau

Praktikum: Spieleengine im Eigenbau Seite 1/17 Praktikum Spieleengine im Eigenbau Alexander Weggerle, Tobias Bäuerle 19.10.09 http://www.saschawillems.de Praktikum: Spieleengine im Eigenbau Seite 2/17 Praktikum Spieleengine im Eigenbau Alexander

Mehr

Grafikprogrammierung (Echtzeitrendering)

Grafikprogrammierung (Echtzeitrendering) (Echtzeitrendering) erfordert Unterstützung für beide Aufgaben der Computergrafik Geometrische Modellierung Datenstrukturen für geometrische Modelle Schnittstellen für deren Kombination Bildsynthese Rendering

Mehr

Übung: Computergrafik 1

Übung: Computergrafik 1 Prof. Dr. Andreas Butz Prof. Dr. Ing. Axel Hoppe Dipl.-Medieninf. Dominikus Baur Dipl.-Medieninf. Sebastian Boring Übung: Computergrafik 1 Geometrische Primitive OpenGL Zeichenarten Kurven Primitive Übung

Mehr

Grundlagen der Spieleprogrammierung

Grundlagen der Spieleprogrammierung Grundlagen der Spieleprogrammierung Teil I: 3D-Graphik Kapitel 8: Hardware Peter Sturm Universität Trier Outline 1. Übersicht und Motivation 2. Mathematische Grundlagen 3. Das Ideal: Photorealistisch (Raytracing,

Mehr

Computer-Graphik I. Shader-Programmierung. G. Zachmann University of Bremen, Germany cgvr.informatik.uni-bremen.de

Computer-Graphik I. Shader-Programmierung. G. Zachmann University of Bremen, Germany cgvr.informatik.uni-bremen.de Computer-Graphik I Shader-Programmierung G. Zachmann University of Bremen, Germany cgvr.informatik.uni-bremen.de Eye-dome lighting: https://blog.kitware.com/eye-dome-lighting-a-non-photorealisticshading-technique/

Mehr

Einführung. GPU-Versuch. Andreas Schäfer Friedrich-Alexander-Universität Erlangen-Nürnberg

Einführung. GPU-Versuch. Andreas Schäfer Friedrich-Alexander-Universität Erlangen-Nürnberg GPU-Versuch andreas.schaefer@cs.fau.de Friedrich-Alexander-Universität Erlangen-Nürnberg Praktikum Parallele Rechnerarchitekturen SS2014 Outline 1 Einführung 2 Outlook 1 Einführung 2 Eine kurze Geschichte

Mehr

Informatik II. Giuseppe Accaputo, Felix Friedrich, Patrick Gruntz, Tobias Klenze, Max Rossmannek, David Sidler, Thilo Weghorn FS 2017

Informatik II. Giuseppe Accaputo, Felix Friedrich, Patrick Gruntz, Tobias Klenze, Max Rossmannek, David Sidler, Thilo Weghorn FS 2017 1 Informatik II Übung 6 Giuseppe Accaputo, Felix Friedrich, Patrick Gruntz, Tobias Klenze, Max Rossmannek, David Sidler, Thilo Weghorn FS 2017 Heutiges Programm 2 1 Klassen - Technisch 2 Prediscussion

Mehr

(10) Deferred Shading

(10) Deferred Shading (10) Deferred Shading Vorlesung Computergrafik II Stefan Müller Dank an Niklas Henrich, Gerrit Lochmann Wdh. 1: Framebufferobjects (FBOs) Statt in den Framebuffer direkt zu rendern, kann man Texturen attachen,

Mehr

GUI Programmierung mit Qt

GUI Programmierung mit Qt GUI Programmierung mit Qt C++ vs. JAVA Norman Wolf 22.04.05 GUI Programmierung mit Qt 1 Einleitung Qt wird von der norwegischen Firma Trolltech entwickelt Es ist kommerzielle Software, die aber von Trolltech

Mehr

Computergraphik I. Scan Conversion: Lines & Co. Einordnung in die Pipeline. G. Zachmann Clausthal University, Germany zach@tu-clausthal.

Computergraphik I. Scan Conversion: Lines & Co. Einordnung in die Pipeline. G. Zachmann Clausthal University, Germany zach@tu-clausthal. 11/4/10 lausthal omputergraphik I Scan onversion of Lines. Zachmann lausthal University, ermany zach@tu-clausthal.de Einordnung in die Pipeline Rasterisierung der Objekte in Pixel Ecken-Werte interpolieren

Mehr

Computergrafik. Michael Bender, Manfred Brill. Ein anwendungsorientiertes Lehrbuch ISBN Inhaltsverzeichnis

Computergrafik. Michael Bender, Manfred Brill. Ein anwendungsorientiertes Lehrbuch ISBN Inhaltsverzeichnis Computergrafik Michael Bender, Manfred Brill Ein anwendungsorientiertes Lehrbuch ISBN 3-446-40434-1 Inhaltsverzeichnis Weitere Informationen oder Bestellungen unter http://www.hanser.de/3-446-40434-1 sowie

Mehr

(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

(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 (7) Normal Mapping Vorlesung Computergraphik II S. Müller Dank an Stefan Rilling Einleitung Die Welt ist voller Details Viele Details treten in Form von Oberflächendetails auf S. Müller - 3 - Darstellung

Mehr

Workshop: Einführung in die 3D-Computergrafik. Julia Tolksdorf Thies Pfeiffer Christian Fröhlich Nikita Mattar

Workshop: Einführung in die 3D-Computergrafik. Julia Tolksdorf Thies Pfeiffer Christian Fröhlich Nikita Mattar Workshop: Einführung in die 3D-Computergrafik Julia Tolksdorf Thies Pfeiffer Christian Fröhlich Nikita Mattar 1 Organisatorisches Tagesablauf: Vormittags: Theoretische Grundlagen Nachmittags: Bearbeitung

Mehr

Universität Osnabrück Fachbereich Mathematik / Informatik. 5. Vorlesung ( )

Universität Osnabrück Fachbereich Mathematik / Informatik. 5. Vorlesung ( ) Universität Osnabrück Fachbereich Mathematik / Informatik 5. Vorlesung (06.05.2013) Prof. Dr. rer. nat. Oliver Vornberger Nico Marniok, B. Sc. Erik Wittkorn, B. Sc. Game Application Layer Rückblick Game

Mehr

Texture Based Direct Volume Rendering

Texture Based Direct Volume Rendering Texture Based Direct Volume Rendering Vorlesung: "Advanced Topics in Computer Graphics" cbrak@upb.de 1 Agenda 1. Einleitung Volume Rendering 1.1. Volumendatensatz 1.2. Volumenintegral 1.3. Image order

Mehr

Fortgeschrittene Kapitel: Grafische Ausgabe mit C++ Karl Gmeiner

Fortgeschrittene Kapitel: Grafische Ausgabe mit C++ Karl Gmeiner Fortgeschrittene Kapitel: Grafische Ausgabe mit C++ Karl Gmeiner 2015 1 Software-Frameworks am Beispiel von Qt 1.1 Software-Frameworks Software-Frameworks stellen Datenstrukturen, Algorithmen, Entwurfsmuster

Mehr

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

Abteilung Bild- und Signalverarbeitung Prof. Dr. Gerik Scheuermann. Tutorial - CGViewer Universität Leipzig Sommersemester 2007 Institut für Informatik Computergrafik-Vorlesung Abteilung Bild- und Signalverarbeitung Betreuer: Heike Jänicke Prof. Dr. Gerik Scheuermann Tutorial - CGViewer 1

Mehr

Computergrafik Universität Osnabrück, Henning Wenke, 2012-05-08

Computergrafik Universität Osnabrück, Henning Wenke, 2012-05-08 Computergrafik Universität Osnabrück, Henning Wenke, 2012-05-08 Noch Kapitel IV: OpenGL Zielsetzungen Hardwarenah aber unabhängig Verschiedene Anwendungsbereiche Wissenschaft, Visualisierung & Entwicklung

Mehr

Spezialprozessoren zur Übernahme Grafik-spezifischer Aufgaben, vorrangig der Bildschirmausgabe

Spezialprozessoren zur Übernahme Grafik-spezifischer Aufgaben, vorrangig der Bildschirmausgabe Grafikprozessoren Spezialprozessoren zur Übernahme Grafik-spezifischer Aufgaben, vorrangig der Bildschirmausgabe 2D: Berechnung der Bildes aus einfachen Grafikprimitiven 3D: Bildaufbau aus räumlicher Beschreibung

Mehr

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

UIKit (Cocoa Touch) Framework für ios Apps. Objective C. Model View Controller Pattern ios Rendering ios Architektur UIKit (Cocoa Touch) A composable, reusable, declarative, real-world inspired animation, and interaction system Framework für ios Apps Objective C Model View Controller Pattern

Mehr

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

Java 3D. Linien, Flächen und Objekte Axel Bartsch, Okt. 2002 Java 3D Linien, Flächen und Objekte Axel Bartsch, Okt. 2002 Virtual World Koordinaten System Grundlagen zur Definition visueller Objekte Shape3D Unterklasse der Leaf-Klasse Eigenschaften des visuellen

Mehr

General Purpose Computation on GPUs

General Purpose Computation on GPUs General Purpose Computation on GPUs Matthias Schneider, Robert Grimm Universität Erlangen-Nürnberg {matthias.schneider, robert.grimm}@informatik.stud.uni-erlangen.de M. Schneider, R. Grimm 1 Übersicht

Mehr

(9) Modernes OpenGL. Vorlesung Computergraphik III S. Müller U N I V E R S I T Ä T KOBLENZ LANDAU

(9) Modernes OpenGL. Vorlesung Computergraphik III S. Müller U N I V E R S I T Ä T KOBLENZ LANDAU (9) Modernes OpenGL Vorlesung Computergraphik III S. Müller OpenGL Shading Language (GLSL) Teil des OpenGL 2.0 Standards Syntax orientiert sich an C / C++ Funktionen Einfache Datentypen (float, int, bool)

Mehr

PeakTech Zeitprogramm erstellen über Excel - Beispiel / Timed programs with Excel Example

PeakTech Zeitprogramm erstellen über Excel - Beispiel / Timed programs with Excel Example PeakTech 6180 Zeitprogramm erstellen über Excel - Beispiel / Timed programs with Excel Example 1. Excel Datei erstellen / Create Excel file Öffnen Sie Excel und erstellen eine xls-datei unter einem beliebigen

Mehr

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

Numerik und Rechnen. Martin Heide & Dominik Holler. 12. Juni 2006 12. Juni 2006 Bibliothek für Lineare Algebra GPGPU-Programming: Low-Level High-Level Bibliothek Bibliothek für Lineare Algebra Gliederung 1 Bibliothek für Lineare Algebra 2 Skalare Bibliothek für Lineare

Mehr

Grundlagen der Spieleprogrammierung

Grundlagen der Spieleprogrammierung Grundlagen der Spieleprogrammierung Teil I: 3D-Graphik Kapitel 9: Engines, Cg und anderes Peter Sturm Universität Trier Outline 1. Übersicht und Motivation 2. Mathematische Grundlagen 3. Das Ideal: Photorealistisch

Mehr

BlendaX Grundlagen der Computergrafik

BlendaX Grundlagen der Computergrafik BlendaX Grundlagen der Computergrafik Beleuchtungsmodelle (Reflection Models) 16.11.2007 BlendaX Grundlagen der Computergrafik 1 Rendering von Polygonen Der Renderingprozess lässt sich grob in folgende

Mehr

Die Welt der Shader. Fortgeschrittene Techniken III

Die Welt der Shader. Fortgeschrittene Techniken III Die Welt der Shader Fortgeschrittene Techniken III Universität zu Köln WS 14/15 Softwaretechnologie II (Teil 1) Prof. Dr. Manfred Thaller Referent: Lukas Kley Gliederung 1. Was ist ein Shader? 2. Verschiedene

Mehr

Lichtquellen und Beleuchtung

Lichtquellen und Beleuchtung void glshademodel(glenum model) - Setzt das angegebene Shading Model (GL_FLAT oder GL_SMOOTH) 1 Lokales Beleuchtungsmodell in OpenGL für n Lichtquellen k s 2 Normalenvektoren - Modelview-Transformation

Mehr

Ansätze 4. GPU. Echtzeit- Raytracing. Polygon- Rendering. Computerspiele Sommer (c) 2013, Peter Sturm, Universität Trier 1

Ansätze 4. GPU. Echtzeit- Raytracing. Polygon- Rendering. Computerspiele Sommer (c) 2013, Peter Sturm, Universität Trier 1 4. GPU Ansätze Echtzeit- Raytracing Modell und Materialeigenschaften auf Raytracer Kontinuierliche Darstellung Polygon- Rendering CPU wählt darzustellende Polygone aus Render Pipeline (c) 2013, Peter Sturm,

Mehr

Workshop: Entwickeln mit Qt 4. Daniel Molkentin <molkentin@kde.org>

Workshop: Entwickeln mit Qt 4. Daniel Molkentin <molkentin@kde.org> Workshop: Entwickeln mit Qt 4 Daniel Molkentin Das Wichtigste zuerst! Haben Sie einen Laptop dabei? Nein? Suchen Sie sich schnell einen netten Nachbarn :) Haben Sie Qt installiert?

Mehr

Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2016

Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2016 to to May 2016 to What is Programming? All computers are stupid. All computers are deterministic. You have to tell the computer what to do. You can tell the computer in any (programming) language) you

Mehr

Praxisorientierte Einführung in C++ Lektion: "Einführung in das GUI-Toolkit Qt"

Praxisorientierte Einführung in C++ Lektion: Einführung in das GUI-Toolkit Qt Praxisorientierte Einführung in C++ Lektion: "Einführung in das GUI-Toolkit Qt" Christof Elbrechter Neuroinformatics Group, CITEC April 24, 2014 Christof Elbrechter Praxisorientierte Einführung in C++

Mehr

Plan für heute. Vorlesungstermine. CG1 & CG2 Vorlesungsthemen. Anwendungsgebiete. Warum Computer Grafik? Computergrafik 1&2 SS 2010

Plan für heute. Vorlesungstermine. CG1 & CG2 Vorlesungsthemen. Anwendungsgebiete. Warum Computer Grafik? Computergrafik 1&2 SS 2010 Plan für heute Computergrafik 1&2 SS 2010 http://www.icg.tu-graz.ac.at/courses/cgcv Organisation der Vorlesung Anwendungen der Computergrafik Konzepte der Computergrafik Display Technologies Prof. Institut

Mehr

Einführung in GLSL - OpenGL Shading Language. Athanasios Karamalis

Einführung in GLSL - OpenGL Shading Language. Athanasios Karamalis Einführung in GLSL - OpenGL Shading Language Athanasios Karamalis Allgemein zur Shader-Programmierung Vor 2001 konnte nur die sogenannte Fixed Functionality der Graphik API und Graphikkarte verwendet werden

Mehr

Integration von 3D-Visualisierungstechniken in 2D-Grafiksystemen

Integration von 3D-Visualisierungstechniken in 2D-Grafiksystemen Mitglied der Helmholtz-Gemeinschaft Inhaltsverzeichnis Integration von 3D-Visualisierungstechniken in 2D-Grafiksystemen Motivation Ergebnisse Ausblick 24. August 2012 Florian Rhiem 24. August 2012 PGI/JCNS

Mehr

Grundkurs C++ Buildsysteme Versionsverwaltung mit git

Grundkurs C++ Buildsysteme Versionsverwaltung mit git Grundkurs C++ Buildsysteme Versionsverwaltung mit git Martin Knopp 09.05.2017 Folie 1/1 GK C++: Buildsysteme, Versionsverwaltung Martin Knopp 09.05.2017 Buildsysteme Beispielhaftes Übersetzungsszenario:

Mehr

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

C for Graphics Benjamin Rommel Seminar 'Paralleles Rechnen auf Grafikkarten' Sommersemester 2009 Betreuer: Julian M. C for Graphics Benjamin Rommel 12.05.2009 Seminar 'Paralleles Rechnen auf Grafikkarten' Sommersemester 2009 Betreuer: Julian M. Kunkel 'C for Graphics', Benjamin Rommel, SS 2009 Inhaltsübersicht Gliederung

Mehr

Lehrstuhl für Datenverarbeitung. Technische Universität München. Grundkurs C++ Buildsysteme

Lehrstuhl für Datenverarbeitung. Technische Universität München. Grundkurs C++ Buildsysteme Grundkurs C++ Buildsysteme Buildsysteme Beispielhaftes Übersetzungsszenario: Verzeichnis tutorial7/ main.cpp, lcdrange.cpp, lcdrange.h *.cpp Kompilieren *.o *.h Grundkurs C++ 2 Headerdateien //blackbox.h

Mehr

Grundkurs C++ Buildsysteme Versionsverwaltung mit git

Grundkurs C++ Buildsysteme Versionsverwaltung mit git Grundkurs C++ Buildsysteme Versionsverwaltung mit git Martin Knopp & Johannes Feldmaier 20.04.2016 Folie 1/22 GK C++: Buildsysteme, Versionsverwaltung Martin Knopp & Johannes Feldmaier 20.04.2016 Buildsysteme

Mehr

Workshop: Entwickeln mit Qt 4. Daniel Molkentin <molkentin@kde.org>

Workshop: Entwickeln mit Qt 4. Daniel Molkentin <molkentin@kde.org> Workshop: Entwickeln mit Qt 4 Daniel Molkentin Das Wichtigste zuerst! Haben Sie einen Laptop dabei? Nein? Suchen Sie sich schnell einen netten Nachbarn :) Haben Sie Qt installiert?

Mehr

Computergraphik Grundlagen

Computergraphik Grundlagen Prof. Stefan Schlechtweg-Dorendorf Hochschule Anhalt (FH) Köthen Fachbereich Informatik Wintersemester 2010/2011 1 / 27 Teil II CG-Programmierung und OpenGL 2 / 27 Inhalt 1. Computergraphik-Programmierung

Mehr

Rendering Grundlagen Autodesk Maya. Grundlagen. Version 1.0-2009-04-08. 2009 Ingo Clemens brave rabbit www.braverabbit.de

Rendering Grundlagen Autodesk Maya. Grundlagen. Version 1.0-2009-04-08. 2009 Ingo Clemens brave rabbit www.braverabbit.de Rendering Grundlagen Version 1.0-2009-04-08 Allgemeine Unterschiede bei Renderern Scanline Rendering Raytrace Rendering Renderlayer Einsatz von Renderlayern Overrides Material Overrides Layer Presets Batch

Mehr

Einführung in die Programmierung mit Qt

Einführung in die Programmierung mit Qt Einführung in die Programmierung mit Qt Dr. Ralf Schüler 5.11.2009 Was ist Qt? sprich: [kju:t] Klassenbibliothek für C++ (ferner Java, Python u.a.) sehr umfangreich: GUI, Stringverarbeitung, reguläre Ausdrücke,

Mehr

Einführung in OpenGL. Thomas Kalbe 30.10.2007. Technische Universität Darmstadt. thomas.kalbe@gris.informatik.tu-darmstadt.de

Einführung in OpenGL. Thomas Kalbe 30.10.2007. Technische Universität Darmstadt. thomas.kalbe@gris.informatik.tu-darmstadt.de Einführung in OpenGL Thomas Kalbe Technische Universität Darmstadt thomas.kalbe@gris.informatik.tu-darmstadt.de 30.10.2007 3D Graphic APIs 2 / 42 API: Application Programming Interface low-level graphic

Mehr

Asteroids3D Seminar: Game Programming. Anita Dieckhoff, Pedro Flemming, Jan Ole Vollmer Betreuung: Christine Lehmann

Asteroids3D Seminar: Game Programming. Anita Dieckhoff, Pedro Flemming, Jan Ole Vollmer Betreuung: Christine Lehmann Asteroids3D Seminar: Game Programming Anita Dieckhoff, Pedro Flemming, Jan Ole Vollmer Betreuung: Christine Lehmann Gliederung 2 1. Live-Demo und Spielidee 2. Softwarearchitektur und Szenengraph Übersicht

Mehr

Programmier-Befehle - Woche 8

Programmier-Befehle - Woche 8 Datentypen Array (mehrdim.) mehrdimensionale Massenvariable eines bestimmten Typs Definition: int my arr[2][3] = { {2, 1, 6}, {8, -1, 4} }; Zugriff: my arr[1][1] = 8 * my arr[0][2]; (Die Definition kann

Mehr

Beleuchtung Schattierung Rasterung

Beleuchtung Schattierung Rasterung Beleuchtung Schattierung Rasterung Thomas Jung t.jung@htw-berlin.de Beleuchtung, Schattierung und Rasterung in allen Echtzeit-3D-Umgebungen gleich OpenGL Direct3D 3dsmax,... Letzter Bestandteil der Grafikpipeline

Mehr

RST-Labor WS06/07 GPGPU. General Purpose Computation On Graphics Processing Units. (Grafikkarten-Programmierung) Von: Marc Blunck

RST-Labor WS06/07 GPGPU. General Purpose Computation On Graphics Processing Units. (Grafikkarten-Programmierung) Von: Marc Blunck RST-Labor WS06/07 GPGPU General Purpose Computation On Graphics Processing Units (Grafikkarten-Programmierung) Von: Marc Blunck Ablauf Einführung GPGPU Die GPU GPU Architektur Die Programmierung Programme

Mehr

OpenCL. Programmiersprachen im Multicore-Zeitalter. Tim Wiersdörfer

OpenCL. Programmiersprachen im Multicore-Zeitalter. Tim Wiersdörfer OpenCL Programmiersprachen im Multicore-Zeitalter Tim Wiersdörfer Inhaltsverzeichnis 1. Was ist OpenCL 2. Entwicklung von OpenCL 3. OpenCL Modelle 1. Plattform-Modell 2. Ausführungs-Modell 3. Speicher-Modell

Mehr

Jörn Loviscach Hochschule Bremen

Jörn Loviscach Hochschule Bremen Programmierbare Hardware-Shader Jörn Loviscach Hochschule Bremen Überblick Vertex- und Pixel-Shader Anwendungsbeispiele fx-dateien Anwendungsbeispiele Zusammenfassung Puffer Vertex- und Pixel-Shader Hardware-Renderpipeline

Mehr

OpenGL ES 2.0. OpenGL ist eine Bibliothek zur Ansteuerung von Grafikhardware

OpenGL ES 2.0. OpenGL ist eine Bibliothek zur Ansteuerung von Grafikhardware Begriffsbestimmung Was ist OpenGL (Open Graphics Library) OpenGL ist eine Bibliothek zur Ansteuerung von Grafikhardware Plattform- und Programmiersprachenunabhängig Darstellung komplexer 2D- und 3D-Szenen

Mehr

Einführung in die Programmierung Wintersemester 2010/11

Einführung in die Programmierung Wintersemester 2010/11 Einführung in die Programmierung Wintersemester 2010/11 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund : GUI-Programmierung Inhalt Was ist eine GUI? Was

Mehr

Computer Graphik. Mitschrift von www.kuertz.name

Computer Graphik. Mitschrift von www.kuertz.name Computer Graphik Mitschrift von www.kuertz.name Hinweis: Dies ist kein offizielles Script, sondern nur eine private Mitschrift. Die Mitschriften sind teweilse unvollständig, falsch oder inaktuell, da sie

Mehr

Einführung in Visual Computing

Einführung in Visual Computing Einführung in Visual Computing 186.822 eine gemeinsame Lehrveranstaltung von Walter Kropatsch Bildverarbeitung Werner Purgathofer Computergraphik Robert Sablatnig Computer Vision Für wen ist diese Lehrveranstaltung?

Mehr

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

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 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 Grundlagen Graphische Primitiven werden mit Bildern versehen Eingeführt von Dr. Edwin

Mehr

Von Keerthikan T. & Siyar Kolusari 10.12.2012

Von Keerthikan T. & Siyar Kolusari 10.12.2012 M226 OBJECT ORIENTIERT PROGRAMMIEREN Project Checkers An online multi-player Java Game Von Keerthikan T. & Siyar Kolusari 10.12.2012 Inhaltsverzeichnis 1. Projektbeschreibung 3 1.1. Inhalt 3 2. Ziele

Mehr

Praxisorientierte Einführung in C++ Lektion: Einführung in das GUI-Toolkit Qt

Praxisorientierte Einführung in C++ Lektion: Einführung in das GUI-Toolkit Qt Praxisorientierte Einführung in C++ Lektion: Einführung in das GUI-Toolkit Qt Christof Elbrechter, Florian P. Schmidt Neuroinformatics Group, CITEC April 5, 2011 Christof Elbrechter Praxisorientierte Einführung

Mehr

Beleuchtung. in Computerspielen

Beleuchtung. in Computerspielen Beleuchtung in Computerspielen Motivation Überblick Licht und Schattierung Lichtquellen Lokale Beleuchtungsmodelle Schattierungsverfahren Oberflächensimulation Beispiele der CryEngine Ausblick Zusammenfassung

Mehr

(5) GPU Einführung. Vorlesung Computergraphik II Stefan Müller. Dank an Markus Geimer, Thorsten Grosch und Niklas Henrich KOBLENZ LANDAU

(5) GPU Einführung. Vorlesung Computergraphik II Stefan Müller. Dank an Markus Geimer, Thorsten Grosch und Niklas Henrich KOBLENZ LANDAU (5) GPU Einführung Vorlesung Computergraphik II Stefan Müller Dank an Markus Geimer, Thorsten Grosch und Niklas Henrich Die Rendering-Pipeline Rasterisierung (2D) Zerlege den 2D-Polygonzug in Pixel Pro

Mehr

12. Java Klassen. Klassen - Technisch. Beispiel: Erdbebendaten. Klassen - Konzeptuell

12. Java Klassen. Klassen - Technisch. Beispiel: Erdbebendaten. Klassen - Konzeptuell Klassen - Technisch Eine Klasse ist eine Einheit mit einem Namen, die Daten und Funktionalität beinhaltet 12. Java Klassen Klassen, Typen, Objekte, Deklaration, Instanzierung, Konstruktoren, Kapselung,

Mehr

Exercise 6. Compound Types and Control Flow. Informatik I für D-MAVT. M. Gross, ETH Zürich, 2017

Exercise 6. Compound Types and Control Flow. Informatik I für D-MAVT. M. Gross, ETH Zürich, 2017 Exercise 6 Compound Types and Control Flow Daniel Bogado Duffner Slides auf: Informatik I für D-MAVT bodaniel@student.ethz.ch n.ethz.ch/~bodaniel Agenda Recap/Quiz Structures Unions Enumerations Loops

Mehr

Vererbung & Schnittstellen in C#

Vererbung & Schnittstellen in C# Vererbung & Schnittstellen in C# Inhaltsübersicht - Vorüberlegung - Vererbung - Schnittstellenklassen - Zusammenfassung 1 Vorüberlegung Wozu benötigt man Vererbung überhaubt? 1.Um Zeit zu sparen! Verwendung

Mehr

Proseminar Computergrafik: OpenGL. Marcel Heckel

Proseminar Computergrafik: OpenGL. Marcel Heckel Proseminar Computergrafik: OpenGL Marcel Heckel 23.5.26 . Inhalt 1. Allgemein Was ist OpenGL Geschichte 2. Etwas 3D-Mathematik Das Koordinatensystem Vektoren Matrizen 3. Grundlegendes zu OpenGL Arbeitsweise

Mehr

Jens Konerow. Managed DirectX und C#

Jens Konerow. Managed DirectX und C# Jens Konerow Managed DirectX und C# Jens Konerow Managed DirectX und C# Einstieg und professioneller Einsatz Jens Konerow: Managed DirectX und C# Einstieg und professioneller Einsatz ISBN-10: 3-935082-17-4

Mehr

Praxisorientierte Einführung in die Computergraphik - Vorlesungsplan -

Praxisorientierte Einführung in die Computergraphik - Vorlesungsplan - Praxisorientierte Einführung in die Computergraphik - Vorlesungsplan - 1. Einführung In dieser Lektion erhalten die Teilnehmer einen Überblick über das Wissensgebiet der Computergraphik und ihrer Anwendungsgebiete.

Mehr

3D Programmierpraktikum: Szenegraphen und Texturierung

3D Programmierpraktikum: Szenegraphen und Texturierung 3D Programmierpraktikum: Szenegraphen und Praktikum 3D Programmierung Sebastian Boring, Otmar Hilliges Donnerstag, 1. Juni 2006 LMU München Medieninformatik Boring/Hilliges 3D Programmierpraktikum SS2006

Mehr

Tipps & Tricks. Eine Standardfunktionalität ist das Erstellen von Grafischen Basisobjekten auf dem Patran Viewport.

Tipps & Tricks. Eine Standardfunktionalität ist das Erstellen von Grafischen Basisobjekten auf dem Patran Viewport. Eine Standardfunktionalität ist das Erstellen von Grafischen Basisobjekten auf dem Viewport. Anders als bei Titeln bewegen sich die Grafikobjekte mit dem Modell mit. Ein im Elementschwerpunkt platzierter

Mehr

Softwareschnittstellen

Softwareschnittstellen P4.1. Gliederung Rechnerpraktikum zu Kapitel 4 Softwareschnittstellen Einleitung, Component Object Model (COM) Zugriff auf Microsoft Excel Zugriff auf MATLAB Zugriff auf CATIA Folie 1 P4.2. Einleitung

Mehr

Tube Analyzer LogViewer 2.3

Tube Analyzer LogViewer 2.3 Tube Analyzer LogViewer 2.3 User Manual Stand: 25.9.2015 Seite 1 von 11 Name Company Date Designed by WKS 28.02.2013 1 st Checker 2 nd Checker Version history Version Author Changes Date 1.0 Created 19.06.2015

Mehr

Einführung in Visual Computing

Einführung in Visual Computing Einführung in Visual Computing 186.822 eine gemeinsame Lehrveranstaltung von Werner Purgathofer Computergraphik Robert Sablatnig Computer Vision Für wen ist diese Lehrveranstaltung? Pflicht in den Bachelorstudien

Mehr

Praktikum im Bereich Praktische Informatik Echtzeitgraphik in C++ und DirectX10. computer graphics & visualization

Praktikum im Bereich Praktische Informatik Echtzeitgraphik in C++ und DirectX10. computer graphics & visualization Praktikum im Bereich Praktische Informatik Echtzeitgraphik in C++ und DirectX10 Billboards Letztes Übungsblatt: Meshes & Instancing um dem Terrain zusätzliche Details (Vegtation) hinzuzufügen. Nachteil:

Mehr

Einführung in Truevision3D

Einführung in Truevision3D Einführung in Truevision3D Einleitung: In diesem Artikel werden wir uns mit der Truevision Engine beschäftigen, ihr werdet lernen wie man in C# auf die Engine zugreift und wie man einfache 2D Ausgaben

Mehr

Grafikkarten-Architektur

Grafikkarten-Architektur > Grafikkarten-Architektur Parallele Strukturen in der GPU Name: Sebastian Albers E-Mail: s.albers@wwu.de 2 > Inhalt > CPU und GPU im Vergleich > Rendering-Pipeline > Shader > GPGPU > Nvidia Tesla-Architektur

Mehr

Praktikum IKT 3. Semester

Praktikum IKT 3. Semester Praktikum IKT 3. Semester Dr. Andreas Müller, TU Chemnitz, Fakultät für Informatik Inhaltsverzeichnis 1 1 Einführung in QT 1.1 Die QT-Bibliothek Informationen: http://www.trolltech.com Lehner, B: KDE-

Mehr

Computer Graphik (CS231) - Installation der Software

Computer Graphik (CS231) - Installation der Software UNIVERSITÄT BASEL Prof. Dr. Thomas Vetter Departement Mathematik und Informatik Spiegelgasse 1 CH 4051 Basel Tobias Maier (tobias.maier@unibas.ch) Jasenko Zivanov (jasenko.zivanov@unibas.ch) Marc Schmidlin

Mehr