OpenGL 2.0 Vertex Arrays

Größe: px
Ab Seite anzeigen:

Download "OpenGL 2.0 Vertex Arrays"

Transkript

1 OpenGL 2.0 Vertex Arrays Boguslaw Sylla Interaktive 3D-Computergrafik SS 2010 Hochschule RheinMain

2 Inhalt des Vortrags 1 Ein- / Ausschalten von Arrays EnableClientState, DisableClientState 2 Spezifizieren der Daten Einzelne Arrays ColorPointer, EdgeFlagPointer, FogCoordPointer, IndexPointer, NormalPointer, SecondaryColorPointer, TextCoordPointer, VertexPointer Mehrere Arrays InterleavedArrays Elementweise (ein Objekt) ArrayElement Listenweise (ein Objekt) DrawElements, DrawRangeElements Listenweise (mehrere Objekte) MultiDrawElements Direkt (ein Objekt) DrawArrays Direkt (mehrere Objekte) MultiDrawArrays 2 von 40

3 1 Ein- / Ausschalten von Arrays 1 Ein- / Ausschalten von Arrays EnableClientState, DisableClientState 2 Spezifizieren der Daten Einzelne Arrays ColorPointer, EdgeFlagPointer, FogCoordPointer, IndexPointer, NormalPointer, SecondaryColorPointer, TextCoordPointer, VertexPointer Mehrere Arrays InterleavedArrays Elementweise (ein Objekt) ArrayElement Listenweise (ein Objekt) DrawElements, DrawRangeElements Listenweise (mehrere Objekte) MultiDrawElements Direkt (ein Objekt) DrawArrays Direkt (mehrere Objekte) MultiDrawArrays 3 von 40

4 1 Ein- / Ausschalten von Arrays 1 Ein- / Ausschalten von Arrays EnableClientState, DisableClientState void glenableclientstate(glenum array) void gldisableclientstate(glenum array) Gibt an welche Daten-Felder momentan benutzt werden sollen. array := GL_COLOR_ARRAY für Farben in RGB oder RGBA, GL_EDGE_FLAG_ARRAY zum Abschalten des Zeichnens von Punkten/Kanten bei Vertexen, GL_FOG_COORDINATE_ARRAY, GL_INDEX_ARRAY, GL_NORMAL_ARRAY für Normalvektoren, GL_SECONDARY_COLOR_ARRAY, GL_TEXTURE_COORD_ARRAY und GL_VERTEX_ARRAY für Vertexe // Einschalten glenableclientstate(gl_color_array); glenableclientstate(gl_vertex_array); // Spezifizieren der Daten... // Zeichnen der Objekte... // Ausschalten gldisableclientstate(gl_color_array); gldisableclientstate(gl_vertex_array); 4 von 40

5 2 Spezifizieren der Daten 1 Ein- / Ausschalten von Arrays EnableClientState, DisableClientState 2 Spezifizieren der Daten Einzelne Arrays ColorPointer, EdgeFlagPointer, FogCoordPointer, IndexPointer, NormalPointer, SecondaryColorPointer, TextCoordPointer, VertexPointer Mehrere Arrays InterleavedArrays Elementweise (ein Objekt) ArrayElement Listenweise (ein Objekt) DrawElements, DrawRangeElements Listenweise (mehrere Objekte) MultiDrawElements Direkt (ein Objekt) DrawArrays Direkt (mehrere Objekte) MultiDrawArrays 5 von 40

6 2 Spezifizieren der Daten 2 Spezifizieren der Daten Einzelne Arrays ColorPointer, EdgeFlagPointer, FogCoordPointer, IndexPointer, NormalPointer, SecondaryColorPointer, TextCoordPointer, VertexPointer void glcolorpointer(glint size, GLenum type, GLsizei stride, const GLvoid *pointer) void gledgeflagpointer(glsizei stride, const GLvoid *pointer) void glfogcoordpointer(glenum type, GLsizei stride, const GLvoid *pointer) void glindexpointer(glenum type, GLsizei stride, const GLvoid *pointer) void glnormalpointer(glenum type, GLsizei stride, const GLvoid *pointer) void glsecondarycolorpointer(glint size, GLenum type, GLsizei stride, const GLvoid *pointer) void gltextcoordpointer(glint size, GLenum type, GLsizei stride, const GLvoid *pointer) void glvertexpointer(glint size, GLenum type, GLsizei stride, const GLvoid *pointer) Verbindet ein Daten-Feld. In dem Feld müssen sich die Daten in einheitlichem Format befinden, deren Elemente jeweils als Datenpakete verstanden werden können, z.b. je drei Elemente nacheinander für X, Y, und Z oder je vier Elemente für R, G, B und A. size := 2, 3 oder 4 ist die Anzahl der Elemente die jeweils ein Datenpaket bilden (siehe untere Tabelle) type := Datentyp der einzelnen Elemente (siehe untere Tabelle) stride := 0 (Sonderbedeutung) wenn Datenpaket an Datenpaket ohne Pausen im Array, sonst Abstand (Offset) vom ersten Element eines Datenpaketes zum ersten Element des darauf folgenden Datenpaketes *pointer := Adresse des ersten Elementes 6 von 40

7 2 Spezifizieren der Daten 2 Spezifizieren der Daten Einzelne Arrays ColorPointer, EdgeFlagPointer, FogCoordPointer, IndexPointer, NormalPointer, SecondaryColorPointer, TextCoordPointer, VertexPointer Befehle für Daten-Felder size type glcolorpointer() 3, 4 GL_BYTE, GL_UNSIGNED_BYTE, GL_SHORT, GL_UNSIGNED_SHORT, GL_INT, GL_UNSIGNED_INT, GL_FLOAT, GL_DOUBLE gledgeflagpointer() 1 GLboolean glfogcoordpointer() 1 GL_FLOAT, GL_DOUBLE glindexpointer() 1 GL_UNSIGNED_BYTE, GL_SHORT, GL_INT, GL_FLOAT, GL_DOUBLE glnormalpointer() 3 GL_BYTE, GL_SHORT, GL_INT, GL_FLOAT, GL_DOUBLE glsecondarycolorpointer() 3 GL_BYTE, GL_UNSIGNED_BYTE, GL_SHORT, GL_UNSIGNED_SHORT, G_INT, GL_UNSIGNED_INT, GL_FLOAT, GL_DOUBLE gltextcoordpointer() 1, 2, 3, 4 GL_SHORT, GL_INT, GL_FLOAT, GL_DOUBLE glvertexpointer() 2, 3, 4 GL_SHORT, GL_INT, GL_FLOAT, GL_DOUBLE 7 von 40

8 2 Spezifizieren der Daten 2 Spezifizieren der Daten Einzelne Arrays ColorPointer, EdgeFlagPointer, FogCoordPointer, IndexPointer, NormalPointer, SecondaryColorPointer, TextCoordPointer, VertexPointer /******************************************************************************* * erste Möglichkeit mit separaten Daten-Feldern ******************************************************************************/ glenableclientstate(gl_color_array); glenableclientstate(gl_vertex_array); static GLfloat color_array[] = { 1.0, 0.0, 0.0, // Rot 0.0, 1.0, 0.0, // Grün 1.0, 1.0, 0.0, // Gelb 0.0, 0.0, 1.0 }; // Blau static GLfloat vertex_array[] = { 0.0, 0.0, 0.0, 25.0, 0.0, 0.0, 25.0, 25.0, 0.0, 0.0, 25.0, 0.0 }; // z.b. für GL_QUADS glcolorpointer(3, GL_FLOAT, 0, color_array); glvertexpointer(3, GL_FLOAT, 0, vertex_array); // mach was das erste mal... 8 von 40

9 2 Spezifizieren der Daten 2 Spezifizieren der Daten Einzelne Arrays ColorPointer, EdgeFlagPointer, FogCoordPointer, IndexPointer, NormalPointer, SecondaryColorPointer, TextCoordPointer, VertexPointer /******************************************************************************* * zweite Möglichkeit mit einem Daten-Feld ******************************************************************************/ glenableclientstate(gl_color_array); glenableclientstate(gl_vertex_array); static GLfloat color_and_vertex_array[] = { 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 25.0, 0.0, 0.0, 1.0, 1.0, 0.0, 25.0, 25.0, 0.0, 0.0, 0.0, 1.0, 0.0, 25.0, 0.0 }; glcolorpointer(3, GL_FLOAT, 6*sizeof(GLfloat), &color_and_vertex_array[0]); glvertexpointer(3, GL_FLOAT, 6*sizeof(GLfloat), &color_and_vertex_array[3]); // mach was das zweite mal... 9 von 40

10 2 Spezifizieren der Daten 1 Ein- / Ausschalten von Arrays EnableClientState, DisableClientState 2 Spezifizieren der Daten Einzelne Arrays ColorPointer, EdgeFlagPointer, FogCoordPointer, IndexPointer, NormalPointer, SecondaryColorPointer, TextCoordPointer, VertexPointer Mehrere Arrays InterleavedArrays Elementweise (ein Objekt) ArrayElement Listenweise (ein Objekt) DrawElements, DrawRangeElements Listenweise (mehrere Objekte) MultiDrawElements Direkt (ein Objekt) DrawArrays Direkt (mehrere Objekte) MultiDrawArrays 10 von 40

11 2 Spezifizieren der Daten 2 Spezifizieren der Daten Mehrere Arrays InterleavedArrays void glinterleavedarrays(glenum format, GLsizei stride, void *pointer) Wird bei gemischten Daten-Feldern eingesetzt. Schaltet alle in Format angegebenen Daten-Felder-Typen ein und alle übrigen aus. Erspart des Weiteren alle gl*pointer(). Bei eingeschaltetem Multitexturing, betrifft das Kommando nur die aktive Textur. format := einer von 14 Konfigurationswerten (siehe untere Tabelle) stride := 0 (Sonderbedeutung) wenn Datenpaket an Datenpaket ohne Pausen im Array, sonst Abstand (Offset) vom ersten Element eines Datenpacketes zum ersten Element des darauf folgenden Datenpaketes *pointer := Adresse des ersten Elementes 11 von 40

12 2 Spezifizieren der Daten 2 Spezifizieren der Daten Mehrere Arrays InterleavedArrays format EF, FC, I, SC T C N V stride=0 ist wie nachfolgender Wert GL_V2F F F F F T 2*sizeof(GLfloat) GL_V3F F F F F T 3*sizeof(GLfloat) GL_C4UB_V2F F F T F T 4*sizeof(GLubyte) + 2*sizeof(GLfloat) GL_C4UB_V3F F F T F T 4*sizeof(GLubyte) + 3*sizeof(GLfloat) GL_C3F_V3F F F T F T 6*sizeof(GLfloat) GL_N3F_V3F F F F T T 6*sizeof(GLfloat) GL_C4F_N3F_V3F F F T T T 10*sizeof(GLfloat) GL_T2F_V3F F T F F T 5*sizeof(GLfloat) GL_T4F_V4F F T F F T 8*sizeof(GLfloat) GL_T2F_C4UB_V3F F T T F T 4*sizeof(GLubyte) + 5*sizeof(GLfloat) GL_T2F_C3F_V3F F T T F T 8*sizeof(GLfloat) GL_T2F_N3F_V3F F T F T T 8*sizeof(GLfloat) GL_T2F_C4F_N3F_V3F F T T T T 12*sizeof(GLfloat) GL_T4F_C4F_N3F_V4F F T T T T 15*sizeof(GLfloat) 12 von 40

13 2 Spezifizieren der Daten 2 Spezifizieren der Daten Mehrere Arrays InterleavedArrays /******************************************************************************* * dritte Möglichkeit mit einem Daten-Feld und glinterleavedarrays() ******************************************************************************/ // glenableclientstate(gl_color_array); // unnötig // glenableclientstate(gl_vertex_array); // unnötig static GLfloat color_and_vertex_array[] = { 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 25.0, 0.0, 0.0, 1.0, 1.0, 0.0, 25.0, 25.0, 0.0, 0.0, 0.0, 1.0, 0.0, 25.0, 0.0 }; glinterleavedarrays(gl_c3f_v3f, 0, color_and_vertex_array); // mach was das dritte mal von 40

14 1 Ein- / Ausschalten von Arrays EnableClientState, DisableClientState 2 Spezifizieren der Daten Einzelne Arrays ColorPointer, EdgeFlagPointer, FogCoordPointer, IndexPointer, NormalPointer, SecondaryColorPointer, TextCoordPointer, VertexPointer Mehrere Arrays InterleavedArrays Elementweise (ein Objekt) ArrayElement Listenweise (ein Objekt) DrawElements, DrawRangeElements Listenweise (mehrere Objekte) MultiDrawElements Direkt (ein Objekt) DrawArrays Direkt (mehrere Objekte) MultiDrawArrays 14 von 40

15 Elementweise (ein Objekt) ArrayElement 15 von 40

16 Elementweise (ein Objekt) ArrayElement // mach was das erste mal... // erste Möglichkeit der elementweisen Dereferenzierung mit C-Mitteln glbegin(gl_triangles); glcolor3fv(color_array + 0*3); glvertex3fv(vertex_array + 0*3); glcolor3fv(color_array + 1*3); glvertex3fv(vertex_array + 1*3); glcolor3fv(color_array + 3*3); glvertex3fv(vertex_array + 3*3); // Zeichne buntes Dreieck // 3 weil size=3 bei glcolorpointer() // 3 weil size=3 bei glvertexpointer() // 3 weil size=3 bei glcolorpointer() // 3 weil size=3 bei glvertexpointer() // 3 weil size=3 bei glcolorpointer() // 3 weil size=3 bei glvertexpointer() glend(); 16 von 40

17 Elementweise (ein Objekt) ArrayElement void glarrayelement(glint ith) Dereferenziert die Daten vom i-ten Element aus allen zur Verfügung gestellten Daten-Feldern auf einmal. Dieses Kommando sollte nur zwischen glbegin() und glend() verwendet werden, weil sonst der Status-Zeiger (ith) für alle zur Verfügung gestellten Daten-Felder gesetzt wird. Das Kommando ruft je nachdem welche Daten-Felder zur verfügung gestellt wurden (in unspezifizierter Reihenfolge) glcolor[size][type]v(), gledgeflagv(), glfogcoord[type]v(), glindex[type]v(), glnormal3[type]v(), glsecondarycolor3[type]v(), gltextcoord[size][type]v() und auf jeden Fall glvertex[size][type]v() zuletzt. Dabei gilt für size und type jeweils das was dafür bei den jeweiligen gl*pointer() angegeben wurde. ith := Nummer des Elements (in C mit 0 beginnend, Element #1=0, #2=1, #3=2 etc.) 17 von 40

18 Elementweise (ein Objekt) ArrayElement // mach was das erste mal... // zweite Möglichkeit der elementweisen Dereferenzierung mit OpenGL-Mitteln glbegin(gl_triangles); // Zeichne buntes Dreieck glarrayelement(0); glarrayelement(1); glarrayelement(3); glend(); 18 von 40

19 1 Ein- / Ausschalten von Arrays EnableClientState, DisableClientState 2 Spezifizieren der Daten Einzelne Arrays ColorPointer, EdgeFlagPointer, FogCoordPointer, IndexPointer, NormalPointer, SecondaryColorPointer, TextCoordPointer, VertexPointer Mehrere Arrays InterleavedArrays Elementweise (ein Objekt) ArrayElement Listenweise (ein Objekt) DrawElements, DrawRangeElements Listenweise (mehrere Objekte) MultiDrawElements Direkt (ein Objekt) DrawArrays Direkt (mehrere Objekte) MultiDrawArrays 19 von 40

20 Listenweise (ein Objekt) DrawElements, DrawRangeElements 20 von 40

21 Listenweise (ein Objekt) DrawElements, DrawRangeElements // nur vordere Flächen zeichnen glenable(gl_cull_face);glcullface(gl_back); glenableclientstate(gl_color_array); glenableclientstate(gl_vertex_array); static GLfloat color_array[] = {1.0, 0.0, 1.0, // Magenta 1.0, 0.0, 0.0, // Rot 1.0, 1.0, 0.0, // Gelb 1.0, 1.0, 1.0, // Weiss 0.0, 0.0, 1.0, // Blau 0.0, 0.0, 0.0, // Schwarz 0.0, 1.0, 0.0, // Grün 0.0, 1.0, 1.0 }; // Cyan static GLfloat vertex_array[] = {-25.0, -25.0, 25.0, 25.0, -25.0, 25.0, 25.0, 25.0, 25.0, -25.0, 25.0, 25.0, -25.0, -25.0, -25.0, 25.0, -25.0, -25.0, 25.0, 25.0, -25.0, -25.0, 25.0, -25.0}; // Würfel glcolorpointer(3, GL_FLOAT, 0, color_array); glvertexpointer(3, GL_FLOAT, 0, vertex_array); 21 von 40

22 Listenweise (ein Objekt) DrawElements, DrawRangeElements void gldrawelements(glenum mode, GLsizei count, GLenum type, void *indices) void gldrawrangeelements(glenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, void *indices) Fasst mehrere glarrayelement() in sich zusammen, um ein Objekt zu zeichnen. Das Kommando darf nicht zwischen glbegin() und glend() stehen, das verursacht einen error. Bei gldrawrangeelements() dürfen keine Indices außerhalb von [start, end] referenziert werden, was dabei passiert ist implementationsabhängig. mode := Angabe was gezeichnet werden soll wie bei glbegin(); GL_POINTS, GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP, GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_QUADS, GL_QUAD_STRIP oder GL_POLYGON start: = minimal vorkommendes Indice end := maximal vorkommendes Indice count := Anzahl der glarrayelement() die ausgeführt werden sollen type := Datentyp der Elemente in Daten-Feld *indices; GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT oder GL_UNSIGNED_INT *indices := Daten-Feld mit Indices die z.b. ein Polygon beschrieben int i; glbegin(mode); for(i=0; i<count; i++) glarrayelement(indices[i]); glend(); 22 von 40

23 Listenweise (ein Objekt) DrawElements, DrawRangeElements /******************************************************************************* * erste Möglichkeit mit separaten Indice-Feldern und mehreren gldrawelements() ******************************************************************************/ // mehrere Listen für Flächen (Polygone) erstellen static GLubyte vorne[] = {0, 1, 2, 3}; static GLubyte hinten[] = {5, 4, 7, 6}; static GLubyte links[] = {4, 0, 3, 7}; static GLubyte rechts[] = {1, 5, 6, 2}; static GLubyte oben[] = {3, 2, 6, 7}; static GLubyte unten[] = {4, 5, 1, 0}; // Flächen zeichnen gldrawelements(gl_quads, 4, GL_UNSIGNED_BYTE, vorne); gldrawelements(gl_quads, 4, GL_UNSIGNED_BYTE, hinten); gldrawelements(gl_quads, 4, GL_UNSIGNED_BYTE, links); gldrawelements(gl_quads, 4, GL_UNSIGNED_BYTE, rechts); gldrawelements(gl_quads, 4, GL_UNSIGNED_BYTE, oben); gldrawelements(gl_quads, 4, GL_UNSIGNED_BYTE, unten); 23 von 40

24 Listenweise (ein Objekt) DrawElements, DrawRangeElements /******************************************************************************* * zweite Möglichkeit mit einem Indice-Feld und einem gldrawelements() ******************************************************************************/ // eine Liste für Flächen (Polygone) erstellen static GLubyte alles[] = {0, 1, 2, 3, 5, 4, 7, 6, 4, 0, 3, 7, 1, 5, 6, 2, 3, 2, 6, 7, 4, 5, 1, 0}; // Flächen zeichnen gldrawelements(gl_quads, 24, GL_UNSIGNED_BYTE, alles); 24 von 40

25 1 Ein- / Ausschalten von Arrays EnableClientState, DisableClientState 2 Spezifizieren der Daten Einzelne Arrays ColorPointer, EdgeFlagPointer, FogCoordPointer, IndexPointer, NormalPointer, SecondaryColorPointer, TextCoordPointer, VertexPointer Mehrere Arrays InterleavedArrays Elementweise (ein Objekt) ArrayElement Listenweise (ein Objekt) DrawElements, DrawRangeElements Listenweise (mehrere Objekte) MultiDrawElements Direkt (ein Objekt) DrawArrays Direkt (mehrere Objekte) MultiDrawArrays 25 von 40

26 Listenweise (mehrere Objekte) MultiDrawElements 26 von 40

27 Listenweise (mehrere Objekte) MultiDrawElements // Farbe setzen GlColor3f(1.0, 0.0, 0.0); // Rot glenableclientstate(gl_vertex_array); static GLfloat vertex_array[] = {-25.0, -25.0, 25.0, 25.0, -25.0, 25.0, 25.0, 25.0, 25.0, -25.0, 25.0, 25.0, -25.0, -25.0, -25.0, 25.0, -25.0, -25.0, 25.0, 25.0, -25.0, -25.0, 25.0, -25.0}; // Würfel glvertexpointer(3, GL_FLOAT, 0, vertex_array); 27 von 40

28 Listenweise (mehrere Objekte) MultiDrawElements /******************************************************************************* * erste Möglichkeit mit separaten Indice-Feldern und mehreren gldrawelements() ******************************************************************************/ // mehrere Listen für Flächen (Polygone) erstellen static GLubyte erstes_linestrip[] = {0, 1, 2, 3}; static GLubyte zweites_linestrip[] = {5, 4, 7}; // zwei Linestrips zeichnen gldrawelements(gl_line_strip, 4, GL_UNSIGNED_BYTE, erstes_linestrip); gldrawelements(gl_line_strip, 3, GL_UNSIGNED_BYTE, zweites_linestrip); /******************************************************************************* * zweite Möglichkeit mit einem Indice-Feld und einem gldrawelements() ******************************************************************************/ // Bei diesem Beispiel mit GL_LINE_STRIP nicht möglich, da einmal 4 und einmal 3 // Indices verwendet werden und somit ein Zusammenfassen für ein // gldrawelements() nicht möglich ist. Ausserdem würden die Linestrips verbunden // werden 28 von 40

29 Listenweise (mehrere Objekte) MultiDrawElements void glmultidrawelements(glenum mode, GLsizei *count, GLenum type, void **indices, GLsizei primcount) Fasst mehrere gldrawelements() in sich zusammen, um mehrere Objekt zu zeichnen. Das Kommando darf nicht zwischen glbegin() und glend() stehen, das verursacht einen error. mode := Angabe was gezeichnet werden soll wie bei gldrawelements(); GL_POINTS, GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP, GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_QUADS, GL_QUAD_STRIP oder GL_POLYGON *count := Array dessen Elemente jeweils angeben, wie viel Indices jedes gldrawelements() bearbeiten soll type := Datentyp der Elemente in Daten-Feld *indices von gldrawelements(); GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT oder GL_UNSIGNED_INT **indices := Array von Pointern auf mehrere Indice-Felder, die pro gldrawelements() verwendet hätten sollen primcount := Anzahl der gldrawelements() die zusammengefasst werden sollen int i; for(i=0; i<primcount; i++) { if(count[i]>0) gldrawelements(mode, count[i], type, indices[i]); } 29 von 40

30 Listenweise (mehrere Objekte) MultiDrawElements /******************************************************************************* * dritte Möglichkeit mit separaten Indice-Feldern ******************************************************************************/ // mehrere Listen für Flächen (Polygone) erstellen static GLubyte erstes_linestrip[] = {0, 1, 2, 3}; static GLubyte zweites_linestrip[] = {5, 4, 7}; // weitere benötigte Angaben für glmultidrawelements() static count[] = {4, 3}; // Anzahl Elemente in jedem Indice-Feld static GLvoid *indices[2] = {erstes_linestrip, zweites_linestrip}; // zwei Linestrips zeichnen glmultidrawelements(gl_line_strip, count, GL_UNSIGNED_BYTE, indices, 2); 30 von 40

31 Listenweise (mehrere Objekte) MultiDrawElements /******************************************************************************* * vierte Möglichkeit mit einem Indice-Feld ******************************************************************************/ // eine List für Flächen (Polygone) erstellen static GLubyte alle_linestrips[] = {0, 1, 2, 3 5, 4, 7}; // weitere benötigte Angaben für glmultidrawelements() static count[] = {4, 3}; // Anzahl Elemente in jedem Indice-Feld static GLvoid *indices[2] = {alle_linestrips, alle_linestrips[4]}; // zwei Linestrips zeichnen glmultidrawelements(gl_line_strip, count, GL_UNSIGNED_BYTE, indices, 2); 31 von 40

32 1 Ein- / Ausschalten von Arrays EnableClientState, DisableClientState 2 Spezifizieren der Daten Einzelne Arrays ColorPointer, EdgeFlagPointer, FogCoordPointer, IndexPointer, NormalPointer, SecondaryColorPointer, TextCoordPointer, VertexPointer Mehrere Arrays InterleavedArrays Elementweise (ein Objekt) ArrayElement Listenweise (ein Objekt) DrawElements, DrawRangeElements Listenweise (mehrere Objekte) MultiDrawElements Direkt (ein Objekt) DrawArrays Direkt (mehrere Objekte) MultiDrawArrays 32 von 40

33 Direkt (ein Objekt) DrawArrays 33 von 40

34 Direkt (ein Objekt) DrawArrays glenableclientstate(gl_color_array); glenableclientstate(gl_vertex_array); static GLfloat color_array[] = { 1.0, 0.0, 0.0, // Rot 0.0, 1.0, 0.0, // Grün 1.0, 1.0, 0.0, // Gelb 0.0, 0.0, 1.0 }; // Blau static GLfloat vertex_array[] = { 0.0, 0.0, 0.0, 25.0, 0.0, 0.0, 25.0, 25.0, 0.0, 0.0, 25.0, 0.0 }; // z.b. für GL_QUADS glcolorpointer(3, GL_FLOAT, 0, color_array); glvertexpointer(3, GL_FLOAT, 0, vertex_array); 34 von 40

35 Direkt (ein Objekt) DrawArrays void gldrawarrays(glenum mode, GLint first, GLsizei count) Zeichnet direkt aus den Daten-Feldern ohne Indice-Listen. Das Kommando darf nicht zwischen glbegin() und glend() stehen, das verursacht einen error. mode := Angabe was gezeichnet werden soll wie bei glbegin(); GL_POINTS, GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP, GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_QUADS, GL_QUAD_STRIP oder GL_POLYGON first := erstes Element (Datenpaket) count := Anzahl der Elemente (Datenpakete) die abgearbeitet werden sollen int i; glbegin(mode); for(i=0; i<count; i++) glarrayelements(first + i); glend(); 35 von 40

36 Direkt (ein Objekt) DrawArrays /******************************************************************************* * erste Möglichkeit zwei Objekte mit zwei gldrawarrays() zu zeichnen ******************************************************************************/ // zwei Dreiecke zeichnen gldrawarrays(gl_triangles, 0, 3); gldrawarrays(gl_triangles, 1, 3); 36 von 40

37 1 Ein- / Ausschalten von Arrays EnableClientState, DisableClientState 2 Spezifizieren der Daten Einzelne Arrays ColorPointer, EdgeFlagPointer, FogCoordPointer, IndexPointer, NormalPointer, SecondaryColorPointer, TextCoordPointer, VertexPointer Mehrere Arrays InterleavedArrays Elementweise (ein Objekt) ArrayElement Listenweise (ein Objekt) DrawElements, DrawRangeElements Listenweise (mehrere Objekte) MultiDrawElements Direkt (ein Objekt) DrawArrays Direkt (mehrere Objekte) MultiDrawArrays 37 von 40

38 Direkt (mehrere Objekte) MultiDrawArrays void glmultidrawarrays(glenum mode, GLint *first, GLsizei *count, GLsizei primcount) Fasst mehrere gldrawarrays() in sich zusammen, um mehrere Objekt zu zeichnen. Das Kommando darf nicht zwischen glbegin() und glend() stehen, das verursacht einen error. mode := Angabe was gezeichnet werden soll wie bei glbegin(); GL_POINTS, GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP, GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_QUADS, GL_QUAD_STRIP oder GL_POLYGON *first := Array dessen Elemente jeweils angeben, wo sich jeweils das erste Element (Datenpaket) pro gldrawarrays() befindet *count() := Array dessen Elemente jeweils angeben, wieviele Elemente (Datenpakete) pro gldrawarrays() bearbeitet werden sollen primcount := Anzahl der gldrawarrays() die zusammengefasst werden sollen int i; for(i=0; i<primcount; i++) { if(count[i]>0) gldrawarrays(mode, first[i], count[i]); } 38 von 40

39 Direkt (mehrere Objekte) MultiDrawArrays /******************************************************************************* * zweite Möglichkeit zwei Objekte mit einem glmultidrawarrays() zu zeichnen ******************************************************************************/ // weitere benötigte Angaben für glmultidrawelements() static GLint *first[2] = {0, 1}; static GLint *count[2] = {3, 3}; // zwei Dreiecke zeichnen glmultidrawarrays(gl_triangles, first, count, 2}; 39 von 40

40 Quellen Funktionen OpenGL Programming Guide: The Official Guide to Learning OpenGL, Version 2, 5th Edition - Aug Codes Selbst erstellt Bilder Selbst erstellt 40 von 40

Ü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

Texture Mapping. Texturen

Texture Mapping. Texturen Grundlagen - Eine Textur ist ein Bild, das auf eine Oberfläche einer Geometrie aufgebracht ist - erlauben eine realistischere Darstellung von Oberflächen - können auf alle Primitive, nicht nur Polygone

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

CGVert. Projekt. 3D-Scannen. Multimarker Tracking. Triangulierung. Low-Cost Scanner P 4. Ball-Erkennung. 3D Positionsbestimmung. Kalmanfilter. CGVert.

CGVert. Projekt. 3D-Scannen. Multimarker Tracking. Triangulierung. Low-Cost Scanner P 4. Ball-Erkennung. 3D Positionsbestimmung. Kalmanfilter. CGVert. Seminar-Vortrag Projektgruppen der Vertiefung Computergrafik (Vorträge am 29.11.2006 ab 8.50Uhr) Themenauswahl Bis heute (25.10.2006) um 16.00Uhr Vortrag Am 29.11.2006 Dauer: 30min Medium Beamer und/oder

Mehr

Grafikprogrammierung mit OpenGL

Grafikprogrammierung mit OpenGL Technische Universität Dresden Dresden, August 2003 Fakultät Informatik Institut für Software- und Multimediatechnik Lehrheft Computergrafik Herausgabe: K. Hoedt W. Mascolus Fakultät Informatik Lehrheft

Mehr

Aufgaben und Lösungen

Aufgaben und Lösungen Aufgaben und Lösungen c Michael Bender, Manfred Brill Oktober 005 Sie finden in diesem Dokument alle Aufgaben und die zugehörigen Lösungen aus Michael Bender, Manfred Brill: Computergrafik. Auflage, Hanser

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

Erste Schritte in OpenGL

Erste Schritte in OpenGL Erste Schritte in OpenGL Modelierung Aus Punkten werden geometrische Körper Komplexe Objeckte werden aus meheren einfachen Objeckten erstellt Dazu müssen Vertexes (Punkte) im virtuellen Raum angefordnet

Mehr

Eine Einführung in OpenGL

Eine Einführung in OpenGL Eine Einführung in OpenGL Inhaltsverzeichnis 1 Übersicht 2 1.1 Was ist OpenGL?........................... 2 1.2 Was leistet OpenGL?......................... 2 2 Erste Schritte mit OpenGL 3 2.1 Grundstrukturen...........................

Mehr

Grafikprogrammierung mit OpenGL I

Grafikprogrammierung mit OpenGL I Grafikprogrammierung mit OpenGL I Proseminar Computergrafik Sommersemester 2 TU Dresden Johannes Völker Matrikelnummer: 3478976 [email protected] Dozent: Wilfried Mascolus Lehrstuhl für Computergraphik

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

Grundlagen von Corel Draw

Grundlagen von Corel Draw Grundlagen von Corel Draw Allgemeines Corel Draw ist ein so genanntes Vektorgrafik-Programm. Der Vorteil von Vektorgrafiken besteht darin, dass die Qualität auch beim Vergrößern im Gegensatz zu Bitmap-Bildern

Mehr

Einführung OpenGL und GLUT WPF Spiele, Simulation und dynamische Systeme

Einführung OpenGL und GLUT WPF Spiele, Simulation und dynamische Systeme Einführung OpenGL und GLUT WPF Spiele, Simulation und dynamische Systeme bei Prof. Dr. Wolfgang Konen erstellt von: Sebastian Skalec, 11038991 Christian Fehmer, 11042419 Fachhochschule Köln Campus Gummersbach

Mehr

Zeiger, Arrays und Strings in C und C++

Zeiger, Arrays und Strings in C und C++ Zeiger, Arrays und Strings in C und C++ 1 Zeiger in Java und C/C++ Zeigervariable (kurz: Zeiger, engl.: pointer): eine Variable, die als Wert eine Speicheradresse enthält Java: Zeiger werden implizit für

Mehr

Kurzeinführung in OpenGL(ES)

Kurzeinführung in OpenGL(ES) Kurzeinführung in OpenGL(ES) Matthias Braun [email protected] Institut für Programmstrukturen und Datenorganisation Lehrstuhl für Programmierparadigmen Wintersemester 2009/10 Wintersemester 2009/10

Mehr

OpenGL 3.1. Kapitel Einordnung und Motivation

OpenGL 3.1. Kapitel Einordnung und Motivation Kapitel 21 OpenGL 3.1 21.1 Einordnung und Motivation In der Rastergrafik, deren Grundlagen in den Kapiteln 13 bis 19 behandelt wurden, wird Materie als Geometrie modelliert und zusätzlich werden deren

Mehr

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

Das ausführbare Programm Bsp1.cfg, Bsp1.dof, Bsp1.dpr, Bsp1.res Projektdateien für Delphi 7 Prak.pas Fakultät Informatik, Professur Computergraphik und Visualisierung 1 1 EINFÜHRUNG Zu diesem Praktikum wird ein vorbereitetes Delphi-Projekt zur Verfügung gestellt. Es ist so aufgebaut, dass man wichtige

Mehr

Java programmieren mit JavaKara. Eine Zusammenfassung in Beispielen

Java programmieren mit JavaKara. Eine Zusammenfassung in Beispielen Java programmieren mit JavaKara Eine Zusammenfassung in Beispielen Kleeblätter in einer Zeile zählen @Override public void mymainprogram() { int anzahlkleeblaetter = 0; for (int x = 0; x < world.getsizex();

Mehr

Java Einführung Klassendefinitionen

Java Einführung Klassendefinitionen Java Einführung Klassendefinitionen Inhalt dieser Einheit Java-Syntax Klassen definieren Objekte instanziieren Instanzvariable deklarieren Klassenvariable deklarieren 2 Klassen definieren In der Problemanalyse

Mehr

Datentypen: Enum, Array, Struct, Union

Datentypen: Enum, Array, Struct, Union Datentypen: Enum, Array, Struct, Union C-Kurs 2013, 2. Tutorium Freitagsrunde http://wiki.freitagsrunde.org 10. September 2013 This work is licensed under the Creative Commons Attribution-ShareAlike 3.0

Mehr

Internationaler Studiengang Medieninformatik

Internationaler Studiengang Medieninformatik HTW Berlin Prof. Dr. Kai Uwe Barthel Nachname: Vorname: Codename: Matr. Nr: Internationaler Studiengang Medieninformatik Grundlagen digitaler Medien Sitzplatz: Punkte: Note: Nachklausur WS09/10 26. 3.

Mehr

Zeiger in C und C++ Zeiger in Java und C/C++

Zeiger in C und C++ Zeiger in Java und C/C++ 1 Zeiger in Java und C/C++ Zeigervariable (kurz: Zeiger, engl.: pointer): eine Variable, die als Wert eine Speicheradresse enthält Java: Zeiger werden implizit für Referenztypen (Klassen und Arrays) verwendet,

Mehr

Modellierung und Programmierung 1

Modellierung und Programmierung 1 Modellierung und Programmierung 1 Prof. Dr. Sonja Prohaska Computational EvoDevo Group Institut für Informatik Universität Leipzig 19. November 2015 Gültigkeitsbereich (Scope) von Variablen { int m; {

Mehr

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny Grundlagen der Informatik Prof. Dr. Stefan Enderle NTA Isny 2 Datenstrukturen 2.1 Einführung Syntax: Definition einer formalen Grammatik, um Regeln einer formalen Sprache (Programmiersprache) festzulegen.

Mehr

Praktikum Computergrafik

Praktikum Computergrafik Praktikum Computergrafik Steven Schlegel Abteilung für Bild- und Signalverarbeitung Betreuer: Steven Schlegel ([email protected]) Einführung in OpenGL und GLSL OpenGL OpenGL (Open Graphics

Mehr

KAPITEL 4: Bildbearbeitung Kopiervorlagen und Arbeitsblätter

KAPITEL 4: Bildbearbeitung Kopiervorlagen und Arbeitsblätter Kopiervorlagen und Arbeitsblätter 4. Bildbearbeitung Farben 1. Aufgabe a) Wofür steht RGB? R: G: B : b) Wofür steht CMYK? C: M: Y : K : 2. Aufgabe Mit 8 Bit können Farben dargestellt werden. 16,7 Millionen

Mehr

C# - Einführung in die Programmiersprache Arrays, Enumeration und Collections. Leibniz Universität IT Services Anja Aue

C# - Einführung in die Programmiersprache Arrays, Enumeration und Collections. Leibniz Universität IT Services Anja Aue C# - Einführung in die Programmiersprache Arrays, Enumeration und Collections Leibniz Universität IT Services Anja Aue Arrays... speichern mehrere Werte vom gleichen Datentyp. fassen zusammenhängende Werte

Mehr

2. Semester, 2. Prüfung, Lösung

2. Semester, 2. Prüfung, Lösung 2. Semester, 2. Prüfung, Lösung Name Die gesamte Prüfung bezieht sich auf die Programmierung in C++! Prüfungsdauer: 90 Minuten Mit Kugelschreiber oder Tinte schreiben Lösungen können direkt auf die Aufgabenblätter

Mehr

Programmieren mit OpenGL und GLUT

Programmieren mit OpenGL und GLUT Programmieren mit OpenGL und GLUT Prof. Dr. Manfred Brill Oktober 2003 Inhaltsverzeichnis 1 OpenGL 1 1.1 Bibliotheken und Header-Dateien.... 1 1.2 OpenGL Datentypen... 2 2 GLUT 3 2.1 Ein typisches GLUT-Hauptprogramm........

Mehr

Access 2010 Programmierung Schleifen

Access 2010 Programmierung Schleifen Access 2010 Programmierung Schleifen Gehe nach links oder rechts Gehe solange geradeaus... Beispiel für Schleifen In einem Formular gibt der Benutzer für den Farbanteil Rot einen Unter- und Obergrenze

Mehr

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny 9. Zeiger Arbeitsspeicher / Adressen Der Arbeitsspeicher des Computers (RAM) besteht aus einem Feld von Speicherzellen, beginnend bei Adresse

Mehr

Graphic Coding. Klausur. 9. Februar 2007. Kurs A

Graphic Coding. Klausur. 9. Februar 2007. Kurs A Graphic Coding Klausur 9. Februar 2007 Kurs A Name: Matrikelnummer: Hinweise - Es sind keine Hilfsmaterialien erlaubt. (Keine Bücher, Taschenrechner, Handys) - Sie haben zwei Stunden Zeit. - Insgesamt

Mehr

C++ Teil 6. Sven Groß. 27. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 14

C++ Teil 6. Sven Groß. 27. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 14 C++ Teil 6 Sven Groß 27. Mai 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 6 27. Mai 2016 1 / 14 Themen der letzten Vorlesung Musterlösung A2 Wdh.: Zeiger und Felder Kopieren von Feldern Dynamische Speicherverwaltung

Mehr

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java: Technische Informatik für Ingenieure (TIfI) WS 2005/2006, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Datenstrukturen 9. Datenstrukturen Daten zusammenfassen

Mehr

OpenGL vs. Direct3D Ein 3D-API Vergleich

OpenGL vs. Direct3D Ein 3D-API Vergleich OpenGL vs. Direct3D Ein 3D-API Vergleich 3D-APIs (Application Programming Interface)sind Software-Schnittstellen, um über einen Standard auf die Hardware des Rechners zugreifen zu koennen. Direct3D von

Mehr

Grundzüge der Wirtschaftsinformatik WS 2002/03. Wiederholung Java. Programmierzyklus. Heiko Rossnagel Problem

Grundzüge der Wirtschaftsinformatik WS 2002/03. Wiederholung Java. Programmierzyklus. Heiko Rossnagel  Problem Grundzüge der Wirtschaftsinformatik WS 2002/03 Wiederholung Java Heiko Rossnagel www.m-lehrstuhl.de accelerate.com Grundzüge der Wirtschaftsinformatik WS 2002/03 1 Programmierzyklus Problem Formulierung

Mehr

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

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag Ludwig-Maximilians-Universität München WS 2015/16 Institut für Informatik Übungsblatt 9 Prof. Dr. R. Hennicker, A. Klarl Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung:

Mehr

C++ Teil 5. Sven Groß. 13. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 18

C++ Teil 5. Sven Groß. 13. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 18 C++ Teil 5 Sven Groß 13. Mai 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 13. Mai 2016 1 / 18 Themen der letzten Vorlesung Funktionen Funktionsüberladung, Signatur Rekursion const-deklaration Referenzen

Mehr

Protokoll. Farben und Spektren. Thomas Altendorfer 9956153

Protokoll. Farben und Spektren. Thomas Altendorfer 9956153 Protokoll Farben und Spektren Thomas Altendorfer 9956153 1 Inhaltsverzeichnis Einleitung Ziele, Vorwissen 3 Theoretische Grundlagen 3-6 Versuche 1.) 3 D Würfel 7 2.) Additive Farbmischung 8 3.) Haus 9

Mehr

Kurzanleitung - Anwendung des NÖ-Atlas. Erfassen von Forststraßen und Bestandesflächen

Kurzanleitung - Anwendung des NÖ-Atlas. Erfassen von Forststraßen und Bestandesflächen Kurzanleitung - Anwendung des NÖ-Atlas Erfassen von Forststraßen und Bestandesflächen Noe Atlas - EINSTIEG Einstieg. Einstieg unter www.noe.gv.at. Auf NÖ-Karten im rechten oberen Feld klicken Noe Atlas

Mehr

3D Programmierpraktikum: Schattenberechnung in Echtzeit

3D Programmierpraktikum: Schattenberechnung in Echtzeit 3D Programmierpraktikum: Schattenberechnung in Echtzeit Praktikum 3D Programmierung Sebastian Boring, Otmar Hilliges Donnerstag, 20. Juli 2006 LMU München Medieninformatik Boring/Hilliges 3D Programmierpraktikum

Mehr

Verwenden von Farben. Drucker und CMYK. Bildschirme und RGB. Farblaserdrucker Phaser 7750

Verwenden von Farben. Drucker und CMYK. Bildschirme und RGB. Farblaserdrucker Phaser 7750 Verwenden von Farben Dieses Thema hat folgenden Inhalt: Drucker und CMYK auf Seite 2-38 Bildschirme und RGB auf Seite 2-38 Bildverarbeitung auf Seite 2-39 Einstellen der Farben mit der TekColor-Farbkorrektur

Mehr

Praxis der Programmierung

Praxis der Programmierung Dynamische Datentypen Institut für Informatik und Computational Science Universität Potsdam Henning Bordihn Einige Folien gehen auf A. Terzibaschian zurück. 1 Dynamische Datentypen 2 Dynamische Datentypen

Mehr

FARBTIEFE / KANÄLE 1 5

FARBTIEFE / KANÄLE 1 5 1 5 FARBTIEFE Die Farbtiefe gibt an, wieviel bit an Informationen pro Pixel gespeichert werden. Je mehr bits gespeichert werden, desto mehr verschiedene Farbabstufungen können dargestellt werden. Farbtiefe

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

Programmierung mit C Zeiger

Programmierung mit C Zeiger Programmierung mit C Zeiger Zeiger (Pointer)... ist eine Variable, die die Adresse eines Speicherbereichs enthält. Der Speicherbereich kann... kann den Wert einer Variablen enthalten oder... dynamisch

Mehr

1. Aufgabe (6 Punkte): Java-Programmierung (Arrays)

1. Aufgabe (6 Punkte): Java-Programmierung (Arrays) Der folgende Mitschrieb wurde von Prof. Alexa am 16.07.2008 als Probeklausur in der MPGI2 Vorlesung gezeigt und wurde auf http://www.basicinside.de/2008/node/94 veröffentlicht. Die Abschrift ist unter

Mehr

Was passt nicht dazu? Warum? Streiche durch! Wie nennt man diese Gegenstände mit einem Wort? Was fehlt auf diesem Bild? Zeichne das, was fehlt, ein!

Was passt nicht dazu? Warum? Streiche durch! Wie nennt man diese Gegenstände mit einem Wort? Was fehlt auf diesem Bild? Zeichne das, was fehlt, ein! Was passt nicht dazu? Warum? Streiche durch! Wie nennt man diese Gegenstände mit einem Wort? Was fehlt auf diesem Bild? Zeichne das, was fehlt, ein! Was kann in dem leeren Feld sein? Male es dazu! Was

Mehr

Einführung in OpenGL. Thomas Kalbe 30.10.2007. Technische Universität Darmstadt. [email protected]

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 [email protected] 30.10.2007 3D Graphic APIs 2 / 42 API: Application Programming Interface low-level graphic

Mehr

Abgabe: (vor 12 Uhr) Aufgabe 3.1 (P) Kontrollflussgraph. Zeichnen Sie für das folgende MiniJava-Programm den Kontrollflussgraphen.

Abgabe: (vor 12 Uhr) Aufgabe 3.1 (P) Kontrollflussgraph. Zeichnen Sie für das folgende MiniJava-Programm den Kontrollflussgraphen. TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Lehrstuhl für Sprachen und Beschreibungsstrukturen SS 2011 Einführung in die Informatik I Übungsblatt 3 Prof. Dr. Helmut Seidl, A. Lehmann, A. Herz,

Mehr

Hannover: Lebensqualität in der Südstadt

Hannover: Lebensqualität in der Südstadt Hannover: Lebensqualität in der Südstadt Schülerhandreichung zum Umgang mit Spatial Commander Ein Projektentwurf im Rahmen des Seminars Der PC Einsatz im Geographieunterricht der Leibniz Universität Hannover

Mehr

Wertebereich und Genauigkeit der Zahlendarstellung

Wertebereich und Genauigkeit der Zahlendarstellung Wertebereich und Genauigkeit der Zahlendarstellung Sowohl F als auch C kennen bei ganzen und Floating Point-Zahlen Datentypen verschiedener Genauigkeit. Bei ganzen Zahlen, die stets exakt dargestellt werden

Mehr

Grundlagen der 3D-Computergrafik Programmieren mit OpenGL

Grundlagen der 3D-Computergrafik Programmieren mit OpenGL Grundlagen der 3DComputergrafik Programmieren mit OpenGL Marc Wagner [email protected] 13. November 1998 Was ist OpenGL? OpenGL (Open Graphics Library) ist ein Softwareinterface zum

Mehr

Einführung in die Programmierung Arrays, Zeiger, Strings. Arvid Terzibaschian

Einführung in die Programmierung Arrays, Zeiger, Strings. Arvid Terzibaschian Einführung in die Programmierung Arvid Terzibaschian 1 Arrays 2 Arrays: Motivation Gegeben: monatliche Durchschnittstemperaturen der letzten 5 Jahre Gesucht: Mittelwerte für Jahre, Monate, Jahreszeiten,

Mehr

Anleitung. SEA-WAR 3D Objektmanager

Anleitung. SEA-WAR 3D Objektmanager Anleitung SEA-WAR 3D Objektmanager by SieMaSoft David Siebert [08.2005] Seite 1 von 11 Inhaltsverzeichnis 1. Wellen... 3 2. Intro... 3 3. 3D-Objekte... 3 3.1. Allgemein... 3 3.2. Steuerung... 3 3.3. Objekterstellung...

Mehr

C# im Vergleich zu Java

C# im Vergleich zu Java C# im Vergleich zu Java Serhad Ilgün Seminar Universität Dortmund SS 03 Gliederung Entstehung von C# und Java Überblick von C# und Java Unterschiede und Gemeinsamkeiten Zusammenfassung und Ausblick Entstehung

Mehr

Variablen manipulieren per JDI

Variablen manipulieren per JDI Variablen manipulieren per JDI Zusammenfassung Jede moderne Java IDE verfügt über eine mächtige und dennoch meist einfach zu bedienende Benutzeroberfläche die das finden von Fehlern in lokalen oder entfernt

Mehr

Revu Tutorial: Markup-Liste

Revu Tutorial: Markup-Liste Revu Tutorial: Markup-Liste Die Markup-Liste ist eine spezialisierte Registerkarte mit einer horizontalen Anordnung, die leistungsstarke Funktionen bereithält, um auf die Anmerkungen in einer PDF-Datei

Mehr

Vorkurs C++ Programmierung

Vorkurs C++ Programmierung Vorkurs C++ Programmierung Klassen Letzte Stunde Speicherverwaltung automatische Speicherverwaltung auf dem Stack dynamische Speicherverwaltung auf dem Heap new/new[] und delete/delete[] Speicherklassen:

Mehr

3. Aufgabe: Bitmap-Datei

3. Aufgabe: Bitmap-Datei 1 Einleitung 3. Aufgabe: Bitmap-Datei In dieser Programmieraufgabe soll eine Grafik erstellt und gespeichert werden. Es wurde das Bitmap-Format von Microsoft gewählt, da es recht einfach erstellt und von

Mehr

Klausur Fachprüfung Wirtschaftsinformatik. Name:

Klausur Fachprüfung Wirtschaftsinformatik. Name: Klausur Fachprüfung Wirtschaftsinformatik Dauer: 2 Stunden Datum: 02.10.2003 Name: Punkte True-or-False: von 15 Punkte Multiple Choice: von 15 Punkte Quickies: von 30 Punkte Shorties: von 20 Punkte Longies:

Mehr

Parallele und funktionale Programmierung Wintersemester 2015/ Übung Abgabe bis , 10:00 Uhr

Parallele und funktionale Programmierung Wintersemester 2015/ Übung Abgabe bis , 10:00 Uhr 3. Übung Abgabe bis 10.11.2015, 10:00 Uhr Aufgabe 3.1: Java-Synchronisation a) An welchen Stellen im Code kann das Schlüsselwort synchronized verwendet werden? b) Wie nennt sich die Synchronisations-Art,

Mehr

Zeiger: Der Adressoperator &

Zeiger: Der Adressoperator & Zeiger: Der Adressoperator & Variablen werden im Computer im Speicher abgelegt. Nach der Deklaration int a,b,c; double x,y,z; Sieht die Speicherbelegung etwa wie folgt aus: a b c x y z Jede Variable hat

Mehr

Graphische Datenverarbeitung und Bildverarbeitung

Graphische Datenverarbeitung und Bildverarbeitung Graphische Datenverarbeitung und Bildverarbeitung Hochschule Niederrhein Rendering-Pipeline und Modellierung Graphische DV und BV, Regina Pohle, 17. Rendering-Pipeline und Modellierung 1 Einordnung in

Mehr

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

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl Funktionen Zusammenfassung von Befehlssequenzen als aufrufbare/wiederverwendbare Funktionen in einem Programmblock mit festgelegter Schnittstelle (Signatur) Derartige prozedurale Programmierung erlaubt

Mehr

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

Technische Universität München WS 2004/2005 Fakultät für Informatik 11. Dezember 2004 Prof. Dr. Seidl Name: Vorname: Matr. Nr.: Technische Universität München WS 2004/2005 Fakultät für Informatik 11. Dezember 2004 Prof. Dr. Seidl Zwischenklausur zu Einführung in die Informatik I Hinweis: In dieser Zwischenklausur

Mehr

Lektion 3: Wiederholungen

Lektion 3: Wiederholungen Lektion 3: Wiederholungen Bearbeitet von Britta Schreiber, Jens Haeler & Atal Ashna Bei einigen der bisher behandelten Prozeduren wurden einzelne Befehle oder Befehlsfolgen mehrfach wiederholt. Beispiel:

Mehr

Programmierpraktikum 3D Computer Grafik

Programmierpraktikum 3D Computer Grafik Prof. Andreas Butz, Dipl.Inf. Otmar Hilliges Programmierpraktikum 3D Computer Grafik Dynamische Schattenberechnung Agenda Der Stencil-Puffer Der 1-bit Stencil-Puffer Der 8-bit Stencil-Puffer Volumetrische

Mehr

1. Übung zu "Numerik partieller Differentialgleichungen"

1. Übung zu Numerik partieller Differentialgleichungen 1. Übung zu "Numerik partieller Differentialgleichungen" Simon Gawlok, Eva Treiber Engineering Mathematics and Computing Lab 22. Oktober 2014 1 / 15 1 Organisatorisches 2 3 4 2 / 15 Organisatorisches Ort:

Mehr

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung M. Graefenhan 2000-12-07 Aufgabe Lösungsweg Übungen zu C Blatt 3 Musterlösung Schreiben Sie ein Programm, das die Häufigkeit von Zeichen in einem eingelesenen String feststellt. Benutzen Sie dazu ein zweidimensionales

Mehr

Algorithmen & Datenstrukturen 1. Klausur

Algorithmen & Datenstrukturen 1. Klausur Algorithmen & Datenstrukturen 1. Klausur 7. Juli 2010 Name Matrikelnummer Aufgabe mögliche Punkte erreichte Punkte 1 35 2 30 3 30 4 15 5 40 6 30 Gesamt 180 1 Seite 2 von 14 Aufgabe 1) Programm Analyse

Mehr

Verschiedene Quader mit gleichem Rauminhalt

Verschiedene Quader mit gleichem Rauminhalt Kopiervorlage 4 Verschiedene Quader mit gleichem Rauminhalt Aufgaben:. Baut aus 2 Einheitswürfeln den Quader mit der größten Oberfläche und gebt die Länge der Kanten an (ein Einheitswürfel hat die Kantenlänge

Mehr

Typ : void* aktuelle Parameter Pointer von beliebigem Typ

Typ : void* aktuelle Parameter Pointer von beliebigem Typ 2. Funktionen - Prototypvereinbarung typangabe funktionsname(parameterliste); - Funktionsdefinition typ funktionsname(parameterliste){ Anweisung - Funktionstyp -> Typ der Funktionswertes zulaessige Typangaben

Mehr

5 Programme mit Parametern

5 Programme mit Parametern 5 Programme mit Parametern In Lektion 3 haben wir gelernt, Programmen einen Namen zu geben und sie dann mit dem Namen aufzurufen, um das gewünschte Bild vom Computer zeichnen zu lassen. In Lektion 4 haben

Mehr

Java Kurzreferenz Für Fortgeschrittene

Java Kurzreferenz Für Fortgeschrittene Java Kurzreferenz Für Fortgeschrittene 1. Initialisierung von Applets: Die Methode init Wenn ein Applet gestartet wird, werden immer zwei Methoden aufgerufen. Diese heissen init und start. Um gewisse Berechnungen

Mehr

Bearbeitungszeit: 120 Minuten. Kommentare kosten Zeit; kommentieren Sie ihr Programm nur da, wo der Code alleine nicht verständlich wäre.

Bearbeitungszeit: 120 Minuten. Kommentare kosten Zeit; kommentieren Sie ihr Programm nur da, wo der Code alleine nicht verständlich wäre. Fakultät IV Elektrotechnik/Informatik Klausur Einführung in die Informatik I für Elektrotechniker Name:... Matr.-Nr.... Bearbeitungszeit: 120 Minuten Bewertung (bitte offenlassen : ) Aufgabe Punkte Erreichte

Mehr

Software-Projekt: Mensch ärgere Dich nicht. Dokumentation Softwareprojekt: Mensch ärgere Dich nicht

Software-Projekt: Mensch ärgere Dich nicht. Dokumentation Softwareprojekt: Mensch ärgere Dich nicht Dokumentation Softwareprojekt: Mensch ärgere Dich nicht Das Programm Mensch ärgere Dich nicht ermöglicht das Spielen des gleichnamigen Spieles über Netzwerke. Jeder Spieler verfügt dabei über einen Clienten,

Mehr

TEXTEFFEKTE TEXTFELDER VERWENDUNG VON TEXTFELDERN. Markieren Sie den Text, und klicken Sie in der Registerkarte Start auf das Symbol

TEXTEFFEKTE TEXTFELDER VERWENDUNG VON TEXTFELDERN. Markieren Sie den Text, und klicken Sie in der Registerkarte Start auf das Symbol TEXTEFFEKTE Markieren Sie den Text, und klicken Sie in der Registerkarte Start auf das Symbol Texteffekte. Der Katalog klappt auf, und Sie können einen Effekt auswählen. Über Kontur, Schatten, Spiegelung

Mehr

Der gelbe Weg. Gestaltungstechnik: Malen und kleben. Zeitaufwand: 4 Doppelstunden. Jahrgang: 6-8. Material:

Der gelbe Weg. Gestaltungstechnik: Malen und kleben. Zeitaufwand: 4 Doppelstunden. Jahrgang: 6-8. Material: Kurzbeschreibung: Entlang eines gelben Weges, der sich von einem zum nächsten Blatt fortsetzt, entwerfen die Schüler bunte Fantasiehäuser. Gestaltungstechnik: Malen und kleben Zeitaufwand: 4 Doppelstunden

Mehr

(4) Polygon Clipping. Vorlesung Computergrafik T. Grosch

(4) Polygon Clipping. Vorlesung Computergrafik T. Grosch (4) Polygon Clipping Vorlesung Computergrafik T. Grosch Wiederholung Letzte Woche Linien zeichnen 1001 1000 1010 B A E H 0001 0010 Linien Clipping 0000 Heute Cohen-Sutherland: Rechteckiges Clip-Polygon

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In

Mehr

Tutoraufgabe 1 (2 3 4 Bäume):

Tutoraufgabe 1 (2 3 4 Bäume): Prof. aa Dr. E. Ábrahám Datenstrukturen und Algorithmen SS Übungsblatt (Abgabe.0.0) F. Corzilius, S. Schupp, T. Ströder Allgemeine Hinweise: Die Hausaufgaben sollen in Gruppen von je bis Studierenden aus

Mehr

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

Java Kurs für Anfänger Einheit 4 Klassen und Objekte Java Kurs für Anfänger Einheit 4 Klassen und Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 13. Juni 2009 Inhaltsverzeichnis klasse

Mehr

Arrays (Felder/Vektoren)

Arrays (Felder/Vektoren) Arrays (Felder/Vektoren) Zusammenfassung mehrerer Variablen des gleichen Typs unter einem Namen im Speicher direkt hintereinander abgelegt Definition: Typname Arrayname [Größe]; Beispiel: int ar [5]; Zugriff

Mehr

Addieren und subtrahieren

Addieren und subtrahieren Addieren und subtrahieren Zahlenmauern Mirko und Luca schreiben möglichst oft die Ziffer in ihre Zahlenmauer.. Mirko 0 0 8 Luca 0 0 Basissteine:, 0, (Die Zahl 0 ist verboten.) 90 0 Basissteine:,,, 0 (Die

Mehr

LCD-Verwaltungssoftware LCD-VSW

LCD-Verwaltungssoftware LCD-VSW Mit der LCD Verwaltungssoftware können die Textinformationen für die verschiedenen Anzeigen z. B. LCD UP, Tableaubaustein EB, Busch-triton erstellt Innerhalb eines Projektes können mehrere LCDs verwendet

Mehr

Vorkurs C++ Programmierung

Vorkurs C++ Programmierung Vorkurs C++ Programmierung Funktionen Rückblick Operatoren logische Verknüpfungen Zusammengesetzte Operatoren ( Zuweisungsoperatoren ) Kontrollstrukturen Bedingte Anweisungen (if-abfrage, switch-konstrukt)

Mehr