20
LMU München - LFE Medieninformatik Folie 1 Tobias Lang 10.05.2004 Einführung in die API OpenGL LMU München - LFE Medieninformatik Folie 2 Tobias Lang 10.05.2004 Überblick Was ist OpenGL? OpenGL und Windows 3D Grafik Grundlagen OpenGL benutzen Transformationen, Licht, Texture Mapping Ein kleines Beispielprogramm Fortgeschrittene Themen Anregungen zur Diskussion

Einführung in die API OpenGL - mmi.ifi.lmu.de file2 LMU München - LFE Medieninformatik Folie 3 Tobias Lang 10.05.2004 Was ist OpenGL? 3D Grafik API Schnittstelle zur 3D Programmierung

  • Upload
    dangnhi

  • View
    214

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Einführung in die API OpenGL - mmi.ifi.lmu.de file2 LMU München - LFE Medieninformatik Folie 3 Tobias Lang 10.05.2004 Was ist OpenGL? 3D Grafik API Schnittstelle zur 3D Programmierung

1

LMU München - LFE Medieninformatik Folie 1

Tobias Lang

10.05.2004

Einführung in die API OpenGL

LMU München - LFE Medieninformatik Folie 2

Tobias Lang

10.05.2004

Überblick

Was ist OpenGL?OpenGL und Windows3D Grafik GrundlagenOpenGL benutzen

Transformationen, Licht, Texture Mapping

Ein kleines BeispielprogrammFortgeschrittene ThemenAnregungen zur Diskussion

Page 2: Einführung in die API OpenGL - mmi.ifi.lmu.de file2 LMU München - LFE Medieninformatik Folie 3 Tobias Lang 10.05.2004 Was ist OpenGL? 3D Grafik API Schnittstelle zur 3D Programmierung

2

LMU München - LFE Medieninformatik Folie 3

Tobias Lang

10.05.2004

Was ist OpenGL?

3D Grafik APISchnittstelle zur 3D ProgrammierungUnterstützung für HardwarebeschleunigungUnabhängig vom BetriebssystemLow-level API

1992 von SGI aus IrisGL hervorgegangenOffener Standard, Architecture Review BoardErweiterbar mittels ExtensionsNur 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 4

Tobias Lang

10.05.2004

Was ist OpenGL?

Vorteile Sehr weit verbreitet, vor allem in der IndustrieUnterstützt von allen führenden HerstellernPortabelRelativ leicht zu erlernenSehr performant

NachteileNur Grafik, im Gegensatz zu DirectXStandard erst bei Version 1.5, trotz rasender HardwareentwicklungExtensions sehr unübersichtlich

Page 3: Einführung in die API OpenGL - mmi.ifi.lmu.de file2 LMU München - LFE Medieninformatik Folie 3 Tobias Lang 10.05.2004 Was ist OpenGL? 3D Grafik API Schnittstelle zur 3D Programmierung

3

LMU München - LFE Medieninformatik Folie 5

Tobias Lang

10.05.2004

OpenGL und Windows

Das erste mal unter Windows NT 3.5 implentiert.OpenGL nutzt Fensterfunktionen des jeweiligen BetriebssystemsEs gibt verschiedene Anbindungen

Windows – WGLLinux – GLXApple Macintosh - AGL

Alternative: GL Utility Toolkit (GLUT)Portabel und sehr kurzUnflexibel

LMU München - LFE Medieninformatik Folie 6

Tobias Lang

10.05.2004

OpenGL und Windows

Page 4: Einführung in die API OpenGL - mmi.ifi.lmu.de file2 LMU München - LFE Medieninformatik Folie 3 Tobias Lang 10.05.2004 Was ist OpenGL? 3D Grafik API Schnittstelle zur 3D Programmierung

4

LMU München - LFE Medieninformatik Folie 7

Tobias Lang

10.05.2004

Vorbereitungen

Header Dateien einbinden#include <GL/gl.h>#include <GL/glu.h>

Libraries im Compiler linkenFür Windows: openGL32.lib GLu32.lib

OpenGL führt neue Datentypen einGLfloat, GLint, GLenum, etc.Sinn: Einfacher zu portieren

LMU München - LFE Medieninformatik Folie 8

Tobias Lang

10.05.2004

3D Grundlagen

3D Grafik kann sehr mathematisch seinLineare Algebra ist nützlich(!)

Affiner Vektorraum R3

Transformationen mittels MatrizenNormalisierung von VektorenSkalarprodukt zur WinkelberechnungBerechnung des Normalenvektors mit dem Kreuzprodukt C=AxBHintereinanderausführung von Transformationen mittels Matrixmultiplikation

Page 5: Einführung in die API OpenGL - mmi.ifi.lmu.de file2 LMU München - LFE Medieninformatik Folie 3 Tobias Lang 10.05.2004 Was ist OpenGL? 3D Grafik API Schnittstelle zur 3D Programmierung

5

LMU München - LFE Medieninformatik Folie 9

Tobias Lang

10.05.2004

Normalen-Vektor und Projektion

Die Normale ist der orthogonale Vektor einer Fläche

Projektion 3D -> 2D

LMU München - LFE Medieninformatik Folie 10

Tobias Lang

10.05.2004

OpenGL Architektur

Page 6: Einführung in die API OpenGL - mmi.ifi.lmu.de file2 LMU München - LFE Medieninformatik Folie 3 Tobias Lang 10.05.2004 Was ist OpenGL? 3D Grafik API Schnittstelle zur 3D Programmierung

6

LMU München - LFE Medieninformatik Folie 11

Tobias Lang

10.05.2004

OpenGL Primitive

Alle geometrischen Primitive sind durch Vertices definiert

LMU München - LFE Medieninformatik Folie 12

Tobias Lang

10.05.2004

OpenGL Kommando-Formate

OpenGL Anweisungen folgen einem bestimmten Aufbau

Page 7: Einführung in die API OpenGL - mmi.ifi.lmu.de file2 LMU München - LFE Medieninformatik Folie 3 Tobias Lang 10.05.2004 Was ist OpenGL? 3D Grafik API Schnittstelle zur 3D Programmierung

7

LMU München - LFE Medieninformatik Folie 13

Tobias Lang

10.05.2004

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 14

Tobias Lang

10.05.2004

OpenGL benutzen

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 loopwhile (!done) {dispatchMessages();render();

}}

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();

}

Page 8: Einführung in die API OpenGL - mmi.ifi.lmu.de file2 LMU München - LFE Medieninformatik Folie 3 Tobias Lang 10.05.2004 Was ist OpenGL? 3D Grafik API Schnittstelle zur 3D Programmierung

8

LMU München - LFE Medieninformatik Folie 15

Tobias Lang

10.05.2004

Die State Machine

Alle Rendering Attribute sind im OpenGL State gekapselt

Rendering StyleShadingLightingTexture Mapping

Jedesmal wenn ein Vertex verarbeitet wird, bestimmen interne Statustabellen, seine Eigenschaften

LMU München - LFE Medieninformatik Folie 16

Tobias Lang

10.05.2004

State Machine manipulieren

Der aktuelle Status bestimmt die Erscheinungfor each ( primitive to render ) {update OpenGL state;render primitive;

}

Häufigste Art den Status zu manipulierenglColor3f()glIndex3f()glNormal*glTexCoord*()

Prinzip: Gewünschten Status einstellen, Geometriedaten übergeben, u.s.w.

Page 9: Einführung in die API OpenGL - mmi.ifi.lmu.de file2 LMU München - LFE Medieninformatik Folie 3 Tobias Lang 10.05.2004 Was ist OpenGL? 3D Grafik API Schnittstelle zur 3D Programmierung

9

LMU München - LFE Medieninformatik Folie 17

Tobias Lang

10.05.2004

Beispiel

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); //redglVertex3f(0.0f,1.0f,0.0f);

glColor3f(0.0f,1.0f,0.0f); //greenglVertex3f(-1.0f, -1.0f,0.0f);

glColor3f(0.0f,0.0f,1.0f); //blueglVertex3f(1.0f,-1.0f,0.0f);

glEnd();}

LMU München - LFE Medieninformatik Folie 18

Tobias Lang

10.05.2004

Transformationen

Page 10: Einführung in die API OpenGL - mmi.ifi.lmu.de file2 LMU München - LFE Medieninformatik Folie 3 Tobias Lang 10.05.2004 Was ist OpenGL? 3D Grafik API Schnittstelle zur 3D Programmierung

10

LMU München - LFE Medieninformatik Folie 19

Tobias Lang

10.05.2004

Transformationen in OpenGL

Transformationen erlauben es uns Gegenstände zu bewegen, zu drehen und zu manipulierenWeitere Anwendung: Projektion vom 3D Raum in den 2D Raum des BildschirmsAchtung:Nicht die Objekte selbst werden bewegt, sondern ihre Koordinatensysteme.

LMU München - LFE Medieninformatik Folie 20

Tobias Lang

10.05.2004

Transformationen in OpenGL

Mehrere Arten von OpenGL TransformationenViewing Orientierung der virtuellen KameraModeling Objekte bewegenProjection Sichtvolumen und clipping planesViewport 2D Bild in OpenGL Fenster

Diese Transformationen werden in dieser bestimmten Reihenfolge ausgeführtTransformationen werden mittels Matrizen angegeben

Page 11: Einführung in die API OpenGL - mmi.ifi.lmu.de file2 LMU München - LFE Medieninformatik Folie 3 Tobias Lang 10.05.2004 Was ist OpenGL? 3D Grafik API Schnittstelle zur 3D Programmierung

11

LMU München - LFE Medieninformatik Folie 21

Tobias Lang

10.05.2004

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 22

Tobias Lang

10.05.2004

Analogien

Zum besseren Verständnis der OpenGL Transformation kann man die Realitiät betrachten

Viewing transformationsStativ – Position und Orientierung des Sichtvolumens in der Welt

Modeling transformationsModell bewegen

Projection transformationsLinse der Kamera einstellen

Viewport transformationsDas 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

Page 12: Einführung in die API OpenGL - mmi.ifi.lmu.de file2 LMU München - LFE Medieninformatik Folie 3 Tobias Lang 10.05.2004 Was ist OpenGL? 3D Grafik API Schnittstelle zur 3D Programmierung

12

LMU München - LFE Medieninformatik Folie 23

Tobias Lang

10.05.2004

Matrix Stacks

Matrizen werden in den sog. Matrix Stacks verwaltet

Modelview matrix stackProjection matrix stackTexture mapping stack

LMU München - LFE Medieninformatik Folie 24

Tobias Lang

10.05.2004

Transformationen – OpenGL Kommandos

Transformationsart wählenglMatrixMode(GL_MODELVIEW);glMatrixMode(GL_PROJECTION);

Einheitsmatrix ladenglLoadIdentity();

Viewport festlegenglViewport(0,0,width, height);

ProjectiongluPerspective(45.0f, width/height, 0.1f, 100.0f);

„Klassisch“glTranslatef(x,y,z);glRotatef(x,y,z);glScale(x,y,z);

Page 13: Einführung in die API OpenGL - mmi.ifi.lmu.de file2 LMU München - LFE Medieninformatik Folie 3 Tobias Lang 10.05.2004 Was ist OpenGL? 3D Grafik API Schnittstelle zur 3D Programmierung

13

LMU München - LFE Medieninformatik Folie 25

Tobias Lang

10.05.2004

Transformation - Codebeispiel

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 26

Tobias Lang

10.05.2004

Beleuchtung

Page 14: Einführung in die API OpenGL - mmi.ifi.lmu.de file2 LMU München - LFE Medieninformatik Folie 3 Tobias Lang 10.05.2004 Was ist OpenGL? 3D Grafik API Schnittstelle zur 3D Programmierung

14

LMU München - LFE Medieninformatik Folie 27

Tobias Lang

10.05.2004

Beleuchtung

Beleuchtung ist ein zentrales Thema in der ComputergrafikBeleuchtung simuliert wie Objekte das Licht reflektierenErgebnis ist abhängig von

Material-Attribute des ObjektsFarbe und Position der LichtquelleGlobale Lichteinstellungen

Ambientes Licht2-seitige Beleuchtung

LMU München - LFE Medieninformatik Folie 28

Tobias Lang

10.05.2004

Beleuchtung in OpenGL

Man kann Beleuchtung immer nur der Realität annähernOpenGL benutzt das Phong Modell

An jedem Vertex wird das Licht berechnetInterpolation dazwischenSchnell, aber unrealistisch bei wenig Flächen

Das reflektierte Licht setzt sich zusammen ausAmbient light - allgegenwärtiges LichtDiffuse light - schattiertes LichtSpecular light - GlanzEmissive light - Eigenleuchten (beeinflusst NICHT

die Umgebung)

In OpenGL kann man bis zu 8 Lichter erstellen

Page 15: Einführung in die API OpenGL - mmi.ifi.lmu.de file2 LMU München - LFE Medieninformatik Folie 3 Tobias Lang 10.05.2004 Was ist OpenGL? 3D Grafik API Schnittstelle zur 3D Programmierung

15

LMU München - LFE Medieninformatik Folie 29

Tobias Lang

10.05.2004

Code für Beleuchtung

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 MaterialsglMaterialfv(GL_FRONT,GL_AMBIENT,matAmbient);glMaterialfv(GL_FRONT,GL_DIFFUSE,matDiffuse);

// set up Light0glLightfv(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 30

Tobias Lang

10.05.2004

Texture Mapping

Page 16: Einführung in die API OpenGL - mmi.ifi.lmu.de file2 LMU München - LFE Medieninformatik Folie 3 Tobias Lang 10.05.2004 Was ist OpenGL? 3D Grafik API Schnittstelle zur 3D Programmierung

16

LMU München - LFE Medieninformatik Folie 31

Tobias Lang

10.05.2004

Texture Mapping

Mit Texture Mapping bezeichnet man das „überziehen“ von Polygonen mit BildernMotivation

Materialien simulieren (z.b. Teppich)Komplexität der Geometrie verringernEffekte (Texturen sind drehbar etc.)Echtzeit Reflektionen

LMU München - LFE Medieninformatik Folie 32

Tobias Lang

10.05.2004

Texture Mapping

Diese Schritte sind für Texturen notwendigEin Bild laden oder generieren (2n)Das Bild einer Textur zuweisen

Damit wird das Bild in den Texturspeicher der Grafikkarte geladen

Den Vertices Texturkoordinaten zuweisenTexturparameter einstellen

z.b Filtering

Page 17: Einführung in die API OpenGL - mmi.ifi.lmu.de file2 LMU München - LFE Medieninformatik Folie 3 Tobias Lang 10.05.2004 Was ist OpenGL? 3D Grafik API Schnittstelle zur 3D Programmierung

17

LMU München - LFE Medieninformatik Folie 33

Tobias Lang

10.05.2004

Texture Mapping in OpenGL

unsigned int texture; //Texur ID

void DrawObject() {glBegin(GL_QUADS);

glTexCoord2f(0.0f,1.0f); //Texturkoordinaten für jeden VertexglVertex3f(-0.5f,0.5f,0.5f);…

glEnd();

void SetupTexture() {bitmapData = myLoadBitmapFile(„holz.jpg“);

// TexturId reservieren und in texture speichernglGenTextures(1,&texture);

// Textur mit ID 1 definieren/selektierenglBindTexture(GL_TEXTURE_2D,texture);

//Filtering für Magnification/MinificationglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

//Textur ladenglTexImage2D(GL_TEXTURE_2D,0,GL_RGB,breite,hoehe,0,GL_RGB, GL_UNSIGNED_BYTE,

bitmapData);DrawObject();

}

LMU München - LFE Medieninformatik Folie 34

Tobias Lang

10.05.2004

Beispiel

Code Beispiel

Page 18: Einführung in die API OpenGL - mmi.ifi.lmu.de file2 LMU München - LFE Medieninformatik Folie 3 Tobias Lang 10.05.2004 Was ist OpenGL? 3D Grafik API Schnittstelle zur 3D Programmierung

18

LMU München - LFE Medieninformatik Folie 35

Tobias Lang

10.05.2004

Fortgeschrittene Themen

BuffersMultitexturingDisplayListsPartikeleffekteVertex/Pixel Shader

LMU München - LFE Medieninformatik Folie 36

Tobias Lang

10.05.2004

OpenGL und Augmented Reality

OpenGL ist die wohl wichtigste Grafik-API für Augmented RealityEinsatz in UniversitätenGeeignet für Hochleistungsrechner (Ursprung)DirectX und OpenGL sind kombinierbar(!)

Page 19: Einführung in die API OpenGL - mmi.ifi.lmu.de file2 LMU München - LFE Medieninformatik Folie 3 Tobias Lang 10.05.2004 Was ist OpenGL? 3D Grafik API Schnittstelle zur 3D Programmierung

19

LMU München - LFE Medieninformatik Folie 37

Tobias Lang

10.05.2004

Quellen & Links

OpenGL Game Programminghttp://www.opengl.org/http://nehe.gamedev.net/(!)http://www.opengl.org/resources/tutorials/s2001/notes/opengl.pdf

LMU München - LFE Medieninformatik Folie 38

Tobias Lang

10.05.2004

Diskussion

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?

Page 20: Einführung in die API OpenGL - mmi.ifi.lmu.de file2 LMU München - LFE Medieninformatik Folie 3 Tobias Lang 10.05.2004 Was ist OpenGL? 3D Grafik API Schnittstelle zur 3D Programmierung

20

LMU München - LFE Medieninformatik Folie 39

Tobias Lang

10.05.2004

Danke