Einführung in die API OpenGL - Medieninformatik

Transcription

Einführung in die API OpenGL - Medieninformatik
Tobias Lang
Einführung in die API OpenGL
LMU München - LFE Medieninformatik
Folie 1
10.05.2004
Tobias Lang
Überblick
ƒ
ƒ
ƒ
ƒ
Was ist OpenGL?
OpenGL und Windows
3D Grafik Grundlagen
OpenGL benutzen
ƒ Transformationen, Licht, Texture Mapping
ƒ Ein kleines Beispielprogramm
ƒ Fortgeschrittene Themen
ƒ Anregungen zur Diskussion
LMU München - LFE Medieninformatik
Folie 2
10.05.2004
1
Tobias Lang
Was ist OpenGL?
ƒ 3D Grafik API
ƒ
ƒ
ƒ
ƒ
Schnittstelle zur 3D Programmierung
Unterstützung für Hardwarebeschleunigung
Unabhängig vom Betriebssystem
Low-level API
1992 von SGI aus IrisGL hervorgegangen
Offener Standard, Architecture Review Board
Erweiterbar mittels Extensions
Nur Grafik, keine Unterstützung für Input,
Sound etc.
ƒ Ursprünglich für C geschrieben, aber auch
andere Sprachen werden unterstützt (Delphi,
Java, etc.)
ƒ
ƒ
ƒ
ƒ
LMU München - LFE Medieninformatik
Folie 3
10.05.2004
Was ist OpenGL?
Tobias Lang
ƒ Vorteile
ƒ
ƒ
ƒ
ƒ
ƒ
Sehr weit verbreitet, vor allem in der Industrie
Unterstützt von allen führenden Herstellern
Portabel
Relativ leicht zu erlernen
Sehr performant
ƒ Nachteile
ƒ Nur Grafik, im Gegensatz zu DirectX
ƒ Standard erst bei Version 1.5, trotz rasender
Hardwareentwicklung
ƒ Extensions sehr unübersichtlich
LMU München - LFE Medieninformatik
Folie 4
10.05.2004
2
OpenGL und Windows
Tobias Lang
ƒ Das erste mal unter Windows NT 3.5
implentiert.
ƒ OpenGL nutzt Fensterfunktionen des
jeweiligen Betriebssystems
ƒ Es gibt verschiedene Anbindungen
ƒ Windows – WGL
ƒ Linux – GLX
ƒ Apple Macintosh - AGL
ƒ Alternative: GL Utility Toolkit (GLUT)
ƒ Portabel und sehr kurz
ƒ Unflexibel
LMU München - LFE Medieninformatik
Folie 5
10.05.2004
OpenGL und Windows
LMU München - LFE Medieninformatik
Tobias Lang
Folie 6
10.05.2004
3
Tobias Lang
Vorbereitungen
ƒ Header Dateien einbinden
ƒ #include <GL/gl.h>
ƒ #include <GL/glu.h>
ƒ Libraries im Compiler linken
ƒ Für Windows: openGL32.lib GLu32.lib
ƒ OpenGL führt neue Datentypen ein
ƒ GLfloat, GLint, GLenum, etc.
ƒ Sinn: Einfacher zu portieren
LMU München - LFE Medieninformatik
Folie 7
10.05.2004
Tobias Lang
3D Grundlagen
ƒ 3D Grafik kann sehr mathematisch sein
Lineare Algebra ist nützlich(!)
ƒ Affiner Vektorraum R3
ƒ Transformationen mittels Matrizen
ƒ Normalisierung von Vektoren
ƒ Skalarprodukt zur Winkelberechnung
ƒ Berechnung des Normalenvektors mit dem
Kreuzprodukt C=AxB
ƒ Hintereinanderausführung von
Transformationen mittels Matrixmultiplikation
LMU München - LFE Medieninformatik
Folie 8
10.05.2004
4
Normalen-Vektor und Projektion
ƒ Die Normale ist der
orthogonale Vektor einer
Fläche
Tobias Lang
ƒ Projektion 3D -> 2D
LMU München - LFE Medieninformatik
Folie 9
10.05.2004
OpenGL Architektur
LMU München - LFE Medieninformatik
Tobias Lang
Folie 10
10.05.2004
5
OpenGL Primitive
Tobias Lang
ƒ Alle geometrischen Primitive sind durch
Vertices definiert
LMU München - LFE Medieninformatik
Folie 11
10.05.2004
OpenGL Kommando-Formate
Tobias Lang
ƒ OpenGL Anweisungen folgen einem
bestimmten Aufbau
LMU München - LFE Medieninformatik
Folie 12
10.05.2004
6
Tobias Lang
Primitive spezifizieren
ƒ Primitive werden durch folgende Anweisung
erstellt
glBegin( primType);
glVertex3f(1.0f,1.0f,1.0f);
glVertex3f(…);
…
glEnd();
Typen:
GL_POINTS
GL_LINESTRIP
GL_LINES
GL_LINE_LOOP
GL_POLYGON
GL_TRIANGLE_STRIP
GL_TRIANGLES
GL_TRIANGLE_FAN
GL_QUADS
GL_QUAD_STRIP
LMU München - LFE Medieninformatik
Folie 13
10.05.2004
OpenGL benutzen
Tobias Lang
ƒ Schema eines OpenGL Programms
void initGL() {
glShadeModel(GL_SMOOTH);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
…
}
void CreateGLWindow() {
…
}
void render() {
…
}
int WINAPI WinMain(…) {
//main message loop
while (!done) {
dispatchMessages();
render();
}}
LMU München - LFE Medieninformatik
void render() {
glClear( GL_COLOR_BUFFER_BIT |
GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(0.0f,0.0f,-6.0f);
glBegin(GL_QUADS);
glVertex3f(-1.0f,-1.0f,-1.0f);
glVertex3f(-1.0f, 1.0f,-1.0f);
glVertex3f(1.0f,1.0f,-1.0f);
glVertex3f(1.0f,-1.0f,-1.0f);
glEnd();
glpopMatrix();
}
Folie 14
10.05.2004
7
Tobias Lang
Die State Machine
ƒ Alle Rendering Attribute sind im OpenGL State
gekapselt
ƒ
ƒ
ƒ
ƒ
Rendering Style
Shading
Lighting
Texture Mapping
ƒ Jedesmal wenn ein Vertex verarbeitet wird,
bestimmen interne Statustabellen, seine
Eigenschaften
LMU München - LFE Medieninformatik
Folie 15
10.05.2004
State Machine manipulieren
Tobias Lang
ƒ Der aktuelle Status bestimmt die Erscheinung
for each ( primitive to render ) {
update OpenGL state;
render primitive;
}
ƒ Häufigste Art den Status zu manipulieren
ƒ
ƒ
ƒ
ƒ
glColor3f()
glIndex3f()
glNormal*
glTexCoord*()
ƒ Prinzip: Gewünschten Status einstellen,
Geometriedaten übergeben, u.s.w.
LMU München - LFE Medieninformatik
Folie 16
10.05.2004
8
Beispiel
Tobias Lang
GLvoid render() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glShadeModel(GL_ SMOOTH);
glEnable(GL_ LIGHTING);
glBegin(GL_TRIANGLES);
glColor3f(1.0f,0.0f,0.0f);
glVertex3f(0.0f,1.0f,0.0f);
//red
glColor3f(0.0f,1.0f,0.0f);
//green
glVertex3f(-1.0f, -1.0f,0.0f);
glColor3f(0.0f,0.0f,1.0f);
//blue
glVertex3f(1.0f,-1.0f,0.0f);
glEnd();
}
LMU München - LFE Medieninformatik
Folie 17
10.05.2004
Tobias Lang
Transformationen
LMU München - LFE Medieninformatik
Folie 18
10.05.2004
9
Tobias Lang
Transformationen in OpenGL
ƒ Transformationen erlauben es uns
Gegenstände zu bewegen, zu drehen und zu
manipulieren
ƒ Weitere Anwendung: Projektion vom 3D Raum
in den 2D Raum des Bildschirms
ƒ Achtung:
Nicht die Objekte selbst werden bewegt,
sondern ihre Koordinatensysteme.
LMU München - LFE Medieninformatik
Folie 19
10.05.2004
Tobias Lang
Transformationen in OpenGL
ƒ Mehrere Arten von OpenGL Transformationen
ƒ
ƒ
ƒ
ƒ
Viewing
Modeling
Projection
Viewport
Orientierung der virtuellen Kamera
Objekte bewegen
Sichtvolumen und clipping planes
2D Bild in OpenGL Fenster
ƒ Diese Transformationen werden in dieser
bestimmten Reihenfolge ausgeführt
ƒ Transformationen werden mittels Matrizen
angegeben
LMU München - LFE Medieninformatik
Folie 20
10.05.2004
10
Tobias Lang
Die Virtuelle Kamera
ƒ 3D Grafik ist wie fotografieren
Die Kamera und alle Objekte sind 3D, das Resultat ist 2D!
LMU München - LFE Medieninformatik
Folie 21
10.05.2004
Tobias Lang
Analogien
ƒ Zum besseren Verständnis der OpenGL Transformation
kann man die Realitiät betrachten
ƒ Viewing transformations
ƒ Stativ – Position und Orientierung des Sichtvolumens in der Welt
ƒ Modeling transformations
ƒ Modell bewegen
ƒ Projection transformations
ƒ Linse der Kamera einstellen
ƒ Viewport transformations
ƒ Das Bild vergrössern/verkleinern
Hinweis: Im Gegensatz zum menschlichen Sehen und richtigen
Kameras, ist das Sichtvolumen kein Kegel sondern
pyramidenartig. Folge: Perspektivische Unterschiede, vor
allem an dem Rändern
LMU München - LFE Medieninformatik
Folie 22
10.05.2004
11
Tobias Lang
Matrix Stacks
ƒ Matrizen werden in den sog. Matrix Stacks
verwaltet
ƒ Modelview matrix stack
ƒ Projection matrix stack
ƒ Texture mapping stack
LMU München - LFE Medieninformatik
Folie 23
10.05.2004
Transformationen – OpenGL Kommandos
Tobias Lang
ƒ Transformationsart wählen
ƒ glMatrixMode(GL_MODELVIEW);
ƒ glMatrixMode(GL_PROJECTION);
ƒ Einheitsmatrix laden
ƒ glLoadIdentity();
ƒ Viewport festlegen
ƒ glViewport(0,0,width, height);
ƒ Projection
ƒ gluPerspective(45.0f, width/height, 0.1f, 100.0f);
ƒ „Klassisch“
ƒ glTranslatef(x,y,z);
ƒ glRotatef(x,y,z);
ƒ glScale(x,y,z);
LMU München - LFE Medieninformatik
Folie 24
10.05.2004
12
Transformation - Codebeispiel
Tobias Lang
void render() {
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glPushMatrix();
glTranslatef(0.0f,0.0f,-6.0f);
glRotatef(-5.0f,1.0f,0.0f,0.0f);
DrawCube();
glPopMatrix();
glPushMatrix();
glTranslatef(0.0f,0.0f,-6.0f);
glRotatef(15.0f,1.0f,0.0f,0.0f);.
DrawSphere();
glPopMatrix();
}
LMU München - LFE Medieninformatik
Folie 25
10.05.2004
Tobias Lang
Beleuchtung
LMU München - LFE Medieninformatik
Folie 26
10.05.2004
13
Tobias Lang
Beleuchtung
ƒ Beleuchtung ist ein zentrales Thema in der
Computergrafik
ƒ Beleuchtung simuliert wie Objekte das Licht
reflektieren
ƒ Ergebnis ist abhängig von
ƒ Material-Attribute des Objekts
ƒ Farbe und Position der Lichtquelle
ƒ Globale Lichteinstellungen
ƒ Ambientes Licht
ƒ 2-seitige Beleuchtung
LMU München - LFE Medieninformatik
Folie 27
10.05.2004
Tobias Lang
Beleuchtung in OpenGL
ƒ Man kann Beleuchtung immer nur der Realität
annähern
ƒ OpenGL benutzt das Phong Modell
ƒ An jedem Vertex wird das Licht berechnet
ƒ Interpolation dazwischen
ƒ Schnell, aber unrealistisch bei wenig Flächen
ƒ Das reflektierte Licht setzt sich zusammen aus
ƒ
ƒ
ƒ
ƒ
Ambient light
Diffuse light
Specular light
Emissive light
-
allgegenwärtiges Licht
schattiertes Licht
Glanz
Eigenleuchten (beeinflusst NICHT
die Umgebung)
ƒ In OpenGL kann man bis zu 8 Lichter erstellen
LMU München - LFE Medieninformatik
Folie 28
10.05.2004
14
Code für Beleuchtung
Tobias Lang
float ambientLight[] = {0.3f,0.5f,0.8f,1.0f};
float diffuseLighz[] = {0.25f,0.25f,0.25f,1.0f};
float Lightposition[] = {0.0f,0.0f,1.0f,0.0f};
float matAmbient[] = {1.0f,1.0f,1.0f,1.0f};
float matDiffuse[] = {1.0f,1.0f,1.0f,1.0f};
void Lighting() {
glEnable(GL_LIGHTING);
//set Materials
glMaterialfv(GL_FRONT,GL_AMBIENT,matAmbient);
glMaterialfv(GL_FRONT,GL_DIFFUSE,matDiffuse);
// set up Light0
glLightfv(GL_LIGHT0, GL_AMBIENT, ambientLight);
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseLight);
glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);
glEnable(LIGHT0);
DrawCube();
}
LMU München - LFE Medieninformatik
Folie 29
10.05.2004
Tobias Lang
Texture Mapping
LMU München - LFE Medieninformatik
Folie 30
10.05.2004
15
Tobias Lang
Texture Mapping
ƒ Mit Texture Mapping bezeichnet man das
„überziehen“ von Polygonen mit Bildern
ƒ Motivation
ƒ
ƒ
ƒ
ƒ
Materialien simulieren (z.b. Teppich)
Komplexität der Geometrie verringern
Effekte (Texturen sind drehbar etc.)
Echtzeit Reflektionen
LMU München - LFE Medieninformatik
Folie 31
10.05.2004
Tobias Lang
Texture Mapping
ƒ Diese Schritte sind für Texturen notwendig
ƒ Ein Bild laden oder generieren (2n)
ƒ Das Bild einer Textur zuweisen
ƒ Damit wird das Bild in den Texturspeicher der
Grafikkarte geladen
ƒ Den Vertices Texturkoordinaten zuweisen
ƒ Texturparameter einstellen
ƒ z.b Filtering
LMU München - LFE Medieninformatik
Folie 32
10.05.2004
16
Tobias Lang
Texture Mapping in OpenGL
unsigned int texture;
//Texur ID
void DrawObject() {
glBegin(GL_QUADS);
glTexCoord2f(0.0f,1.0f);
glVertex3f(-0.5f,0.5f,0.5f);
…
glEnd();
//Texturkoordinaten für jeden Vertex
void SetupTexture() {
bitmapData = myLoadBitmapFile(„holz.jpg“);
// TexturId reservieren und in texture speichern
glGenTextures(1,&texture);
// Textur mit ID 1 definieren/selektieren
glBindTexture(GL_TEXTURE_2D,texture);
//Filtering für Magnification/Minification
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
//Textur laden
glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,breite,hoehe,0,GL_RGB, GL_UNSIGNED_BYTE,
bitmapData);
DrawObject();
}
LMU München - LFE Medieninformatik
Folie 33
10.05.2004
Beispiel
Tobias Lang
ƒ Code Beispiel
LMU München - LFE Medieninformatik
Folie 34
10.05.2004
17
Fortgeschrittene Themen
ƒ
ƒ
ƒ
ƒ
ƒ
Tobias Lang
Buffers
Multitexturing
DisplayLists
Partikeleffekte
Vertex/Pixel Shader
LMU München - LFE Medieninformatik
Folie 35
10.05.2004
OpenGL und Augmented Reality
Tobias Lang
ƒ OpenGL ist die wohl wichtigste Grafik-API für
Augmented Reality
ƒ Einsatz in Universitäten
ƒ Geeignet für Hochleistungsrechner (Ursprung)
ƒ DirectX und OpenGL sind kombinierbar(!)
LMU München - LFE Medieninformatik
Folie 36
10.05.2004
18
Quellen & Links
ƒ
ƒ
ƒ
ƒ
Tobias Lang
OpenGL Game Programming
http://www.opengl.org/
http://nehe.gamedev.net/(!)
http://www.opengl.org/resources/tutorials/s20
01/notes/opengl.pdf
LMU München - LFE Medieninformatik
Folie 37
10.05.2004
Diskussion
Tobias Lang
ƒ Viele Spiele nutzen DirectX – was ist nun
besser?
ƒ Ist eine Low-Level API nicht zu aufwendig?
ƒ Wird es noch andere Standards neben DirectX
und OpenGL in der nahen Zukunft geben?
ƒ Ist OpenGL für die neuen Grafikkarten
gerüstet?
ƒ Wird das Hardware Rendering das normale
Rendering z.b. mit 3ds Max ablösen?
LMU München - LFE Medieninformatik
Folie 38
10.05.2004
19
Tobias Lang
Danke
LMU München - LFE Medieninformatik
Folie 39
10.05.2004
20