Einführung in OpenGL Seminarvortrag im Rahmen des Bachelorstudiengangs „Scientific Programming“ Tural Bilalov
Inhalt Was ist OpenGL? OpenGL Sprache Rendering OpenGL Primitive 3D Objekte Modellierungstransformation ◦ Beispiel Darstellungstransformation Projektionen Beleuchtung Fazit
Was ist OpenGL? OpenGL (Open Graphics Library) ist eine Bibliothek für eine plattform- und programmiersprachenunabhängige Programmierung und Entwicklung von 2D- und 3D Computergrafik Das eingentliche OpenGL ist eine sehr hardwarenahe Schnittstelle aus etwa 200 Kommandos Eingie Besonderheiten: >> Effizienz >> Plattformunabhängigkeit >> niedrige Call-Draw Kosten >> Zustandsautomat >> reine Grafikbibliothek
OpenGL Sprache Syntax Befehle (z.B. glClearColor() ) Konstanten(z.B. GL_COLOR_BUFFER_BIT ) Formate Nicht-Vektor Version glColor3f (1.0, 0.0, 0.0); Vektor Version GLfloat color_array[] = {1.0, 0.0, 0.0}; glColor3fv (color_array); Datentypen GLbyte, GLshort, GLint, GLfloat, GLdouble, GLboolean, Glenum
Rendering Löschen des Fensterinhalts glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); Darstellungs- und Modellierungstransformationen glTranslatef( 0.0, 0.0, ); glRotatef( xRot, 1.0, 0.0, 0.0 ); Zeichnen von Objekten glBegin(GL_QUADS); glVertex3f(-1, 1, -1); glVertex3f(-1, 1, 1); glVertex3f(-1, -1, 1); glVertex3f(-1, -1, -1); glEnd();
OpenGL Primitive Anordnung von Eckpunkten glBegin( ); glEnd(); Koordinaten glVertex3f() Eckpunktspezifische Daten ◦ Farbe, Normalvektor, Texturkoordinaten Zustandsvariablen ◦ Farbe, Linienbreite, Linienmuster, Schattierungmethode, Nebel usw. Shading Model
3D-Objekte Verdeckte Tiefe ◦ glEnable(GL_DEPTH_TEST), glClear(GL_DEPTH_BUFFER_BIT) Komplexe Objekte aus kleinen Primitiven Ausschnittsflächen Display Lists ◦ glNewList(name,mode) ◦ glCallList(name)
Modellierungstransformation Positionieren und Ausrichten des Models Einsatz von Matrizen glMatrixMode(GLenum mode) GL_MODELVIEW, GL_PROJECTION und GL_TEXTURE glTranslate(TYPE x, TYPE y, TYPE z) glRotate(TYPE angle, TYPE x, TYPE y, TYPE z) glScale(TYPE x, TYPE y, TYPE z)
Besipiel Erst Drehen danach Verschieben (Pos. x-axis) Erst Verschieben und danach Drehen (Pos. Y=x) Matrix Stacks ( glPushMatrix(), glPopMatrix() )
Darstellungstransformation Positionieren und Fokusieren einer Kamera Einsatz von Matrizen glMatrixMode(GL_PROJECTION ) Zwei Arten : Perspektivische Projektion Orthografische Projektion
Projektionen Perspektivische Projektion ◦ Realistische Darstellung ◦ glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near,GLdouble far) Orthografische Projektion Maßen der Objekte von großer Bedeutung glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near,GLdouble far)
Beleuchtung Richtungslichtquellen (directional) Positionslichtquellen (positional) glLightfv(Glenum light, Glenum name, Glenum param) ◦ Position GL_POSITION ◦ Farbbestandteile GL_AMBIENT; GL_DIFFUSE; GL_SPECULAR glMaterialfv(Glenum face, Glenum name, Glenum param) Normale Vektoren
Fazit Prozedurales, low-level API Grafik-Pipeline (OpenGL State-Machine) Riesige Funktionalität Extensions-Chaos Multi-Platform Open-Source
Vielen Dank!