Einführung in die API OpenGL

Ähnliche Dokumente
OpenGL als API für Augmented und Virtual Reality

Grafikprogrammierung (Echtzeitrendering)

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

OpenGL for Java OpenGL for Java Prof. Dr. V. Stahl

Einführung in OpenGL. Einführung in OpenGL

I - Phone 3D 3D Spieleentwicklung für's I-Phone

Probelektion zum Thema. Shadow Rendering. Shadow Maps Shadow Filtering

Proseminar Computergrafik: OpenGL

Grafikprogrammierung mit OpenGL I

Texture Mapping. Texturen

OpenGL. (Open Graphic Library)

Einführung in OpenGL. Thomas Kalbe Technische Universität Darmstadt.

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

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

OpenGL vs. Direct3D Ein 3D-API Vergleich

Zwischenvortrag zum Entwicklungsstand der Bachelor-Arbeit. Direct 3D-Output für ein Rendering Framework

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

Softwareprojekt Spieleentwicklung

Computergrafik 1 Übung, Wintersemester Eclipse Hands-On. C++ Projektsetup mit OpenGL und GLUT unter Eclipse für Windows

Eine Einführung in OpenGL

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

Grundlagen der 3D-Computergrafik Programmieren mit OpenGL

Grafikprogrammierung mit OpenGL

(1) 3D Engines. Vorlesung Computergraphik 2 D. Grüntjens Folien: Stefan Rilling / D. Grüntjens KOBLENZ LANDAU

Seminar Game Development Game Computer Graphics. Einleitung

Programmierpraktikum 3D Computer Grafik

Jörn Loviscach Hochschule Bremen

(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

Kurzeinführung in OpenGL(ES)

Computer-Graphik I Transformationen & Viewing

die Planung eindrucksvoll präsentieren

Rendering Grundlagen Autodesk Maya. Grundlagen. Version Ingo Clemens brave rabbit

Spiele entwickeln für ipad, iphone und ipod touch

Teil V. Grundlagen der Computergrafik

1 OpenGL in Delphi. 1.1 Vom Pixel zur Simulation. kleiner kommunikation

speed typing game (former Sponge Bob s Words )

Grundlagen der Spieleprogrammierung

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

Real-Time High-Dynamic Range Texture Mapping

ANIMATION - GRUNDLAGEN

"rendern" = ein abstraktes geometrisches Modell sichtbar machen

Shadingalgorithmen zur Visualisierung nanostrukturierter Oberflächen

D-Texturen. Reflectance Mapping 3D-Texturen. Farbtexturen

Eine Einführung Computergrafik SS14 Timo Bourdon

Der Einsatz von HDRIs in LightWave 7

RTT DeltaGen Suite. Materialeinstellungen für OpenGL, RTT RealTrace & Global illumination. Copyright 2010 by Realtime Technology AG

Spiele, Simulation, dynamische Systeme

Überblick Echtzeit-Rendering. Uwe Domaratius

Einführung in die C-Programmierung

Einführung in die Computergrafik

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

Applikations-Entwicklung mit Studierstube ES. Daniel Wagner

Inhalt. Grundlagen - Licht und visuelle Wahrnehmung 1. Grundlagen - 2D-Grafik (Teil 1) 43. Grundlagen - 2D-Grafik (Teil 2) 67

Kapitel 0. Einführung. 0.1 Was ist Computergrafik? 0.2 Anwendungsgebiete

Multimedia-Programmierung

DirectX und OpenGL. Proseminar Multimedia-Hardwareerweiterungen. Michel Weimerskirch

3d XML, 3d XML Player

Cross-Plattform Spieleentwicklung mit der SDL

PROGRAMMIEREN MIT C. }, wird kompiliert mit dem Befehl. (-o steht für output) und ausgeführt mit dem Befehl

Lehrbuch der Grafikprogrammierung

Rendering für Augmented Reality

Entwicklung eines JOGL-basierten Frameworks zur Darstellung von Game Physics

Objektorientierte Programmierung

Computer Graphik. Mitschrift von

Die Elemente einer Szene werden in einer Graphstruktur gespeichert

Einführung in wxwidgets & wxdev-c++

VHDL - Grundlagen des Pointrenderings

Programmierung für Mathematik HS12 Übung 3

Integration von 3D-Visualisierungstechniken in 2D-Grafiksystemen

3D-Druckformate und COLLADA


Inhaltsverzeichnis. V Vorwort 17. V.1 An wen richtet sich dieses Buch? 18. V.2 Ansprüche an den Computer 18. V.4 Bildergalerie 19.

Visualisierung mit TurboCAD

Mesh-Visualisierung. Von Matthias Kostka. Visualisierung großer Datensätze

Computergrafik 2010 Oliver Vornberger. Kapitel 18: Beleuchtung

OpenGL unter Python. Department für Informatik Dipl.-Inform. Rüdiger Busch

Java basierte Browser Plug-ins. Martin Kreis 3D-Graphik im Web WS 02/ Java basierte Browser Plug-ins 1. Übersicht

Persistenz von Objekten relationale Datenbank Eigene Datenstruktur XML (JAXB) Proprietäre Dateiformate (Lochkarten)

Anwendungsentwicklung mit dem Windows Phone 7

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

Benutzerhandbuch. Neukirchen

Die Programmiersprache C Eine Einführung

Computergrafik Universität Osnabrück, Henning Wenke,

Vorwort. Thomas Lucka. Spiele entwickeln für iphone, ipad und ipod touch ISBN: Weitere Informationen oder Bestellungen unter

Inhaltsverzeichnis. 1 Hardwaregrundlagen

3 Kurzeinführung in Matlab

Projektarbeit Computergraphik. DirectX vs. OpenGL. Fachbereich: 12. Informatik Betreut durch Prof. Dr. Xiaolin Zhou von

Dr. Martin Brändle. ETH Zürich Informationszentrum Chemie Biologie Pharmazie Wolfgang-Pauli-Str. 10, HCI J Zürich

Rendering: Lighting & Shading

Programmieren mit DirectX

computer graphics & visualization

Repetitorium Informatik (Java)

Färben, texturieren und rendern in Solid Edge

Linear Workflow. Linear Workflow. Version

Entwicklung eines CANopen-Netzwerkes

Jeder Flächentyp erfordert seine eigenen Modellierungstechniken, die als Set zu diesen Typen gruppiert sind.

Prüfung Lineare Algebra Sei V ein n-dimensionaler euklidischer Raum. Welche der folgenden Aussagen ist wahr?

Simulation von Feuer mittels eines Partikelsystems

:= Modellabbildung. Bildsynthese (Rendering) Bildsynthese

y x x y ( 2x 3y + z x + z

Transkript:

Einführung in die API OpenGL LMU München - LFE Medieninformatik Folie 1 Ü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

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 Was ist OpenGL? 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

OpenGL und Windows 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 OpenGL und Windows LMU München - LFE Medieninformatik Folie 6

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 3D Grundlagen 3D Grafik kann sehr mathematisch sein Lineare Algebra ist nützlich(!) Affiner Vektorraum R 3 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

Normalen-Vektor und Projektion Die Normale ist der orthogonale Vektor einer Fläche Projektion 3D -> 2D LMU München - LFE Medieninformatik Folie 9 OpenGL Architektur LMU München - LFE Medieninformatik Folie 10

OpenGL Primitive Alle geometrischen Primitive sind durch Vertices definiert LMU München - LFE Medieninformatik Folie 11 OpenGL Kommando-Formate OpenGL Anweisungen folgen einem bestimmten Aufbau LMU München - LFE Medieninformatik Folie 12

Primitive spezifizieren Primitive werden durch folgende Anweisung erstellt glbegin( primtype); glvertex3f(1.0f,1.0f,1.0f); glvertex3f( ); glend(); Typen: GL_POINTS GL_LINES GL_POLYGON GL_TRIANGLES GL_QUADS GL_LINESTRIP GL_LINE_LOOP GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_QUAD_STRIP LMU München - LFE Medieninformatik Folie 13 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 loop while (!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(); } LMU München - LFE Medieninformatik Folie 14

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 State Machine manipulieren 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

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); 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); glvertex3f(1.0f,-1.0f,0.0f); //blue glend(); } LMU München - LFE Medieninformatik Folie 17 Transformationen LMU München - LFE Medieninformatik Folie 18

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 Transformationen in OpenGL Mehrere Arten von OpenGL Transformationen Viewing Orientierung der virtuellen Kamera Modeling Objekte bewegen Projection Sichtvolumen und clipping planes Viewport 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

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

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 Transformationen OpenGL Kommandos 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

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 25 Beleuchtung LMU München - LFE Medieninformatik Folie 26

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 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 - allgegenwärtiges Licht Diffuse light - schattiertes Licht Specular light - Glanz Emissive light - Eigenleuchten (beeinflusst NICHT die Umgebung) In OpenGL kann man bis zu 8 Lichter erstellen LMU München - LFE Medieninformatik Folie 28

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 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 Texture Mapping LMU München - LFE Medieninformatik Folie 30

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 Texture Mapping Diese Schritte sind für Texturen notwendig Ein Bild laden oder generieren (2 n ) 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

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 Beispiel Code Beispiel LMU München - LFE Medieninformatik Folie 34

Fortgeschrittene Themen Buffers Multitexturing DisplayLists Partikeleffekte Vertex/Pixel Shader LMU München - LFE Medieninformatik Folie 35 OpenGL und Augmented Reality 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

Quellen & Links 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 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? LMU München - LFE Medieninformatik Folie 38

Danke LMU München - LFE Medieninformatik Folie 39