Grafikprogrammierung
mit OpenGL I
Proseminar ComputergrafikSommersemester 2010
TU Dresden
Johannes VlkerMatrikelnummer: 3478976
Dozent: Wilfried MascolusLehrstuhl fr Computergraphik und Visualisierung
Fakultt Informatik
1
mailto:[email protected]
Inhaltsverzeichnis1 Vorwort................................................................................................................................32 Einfhrung...........................................................................................................................3
2.1 Geschichte...................................................................................................................32.2 Konzept........................................................................................................................4
2.2.1 Plattform- und Programmiersprachenunabhnigkeit...........................................42.2.2 Zustandsautomat..................................................................................................42.2.3 Renderpipeline.....................................................................................................5
2.3 Matrizen in OpenGL.....................................................................................................63 Initialisierung.......................................................................................................................74 Scenen Transfomation........................................................................................................8
4.1 glTranslate...................................................................................................................84.2 glRotate........................................................................................................................84.3 glScale.........................................................................................................................9
5 Primitive...............................................................................................................................95.1 GL_POINTS.................................................................................................................95.2 GL_LINES..................................................................................................................105.3 GL_TRIANGLES........................................................................................................105.4 GL_QUADS................................................................................................................115.5 GL_POLYGONE........................................................................................................12
6 Farben...............................................................................................................................126.1 Farbe setzen..............................................................................................................126.2 Colorpicking...............................................................................................................13
7 Texturen.............................................................................................................................147.1 Normale Texturen......................................................................................................147.2 Mipmaps....................................................................................................................16
8 Nachwort...........................................................................................................................179 Anwendungscode..............................................................................................................18
9.1 Initialisierung..............................................................................................................189.2 Primitive.....................................................................................................................189.3 Texturen.....................................................................................................................20
10 Quellen.............................................................................................................................................22
2
1 VorwortDiese Ausarbeitung beschftigt sich mit den Grundlagen zu OpenGL und mchte einen
Einblick in diese Grafikschnittstelle geben, welche sich besonders durch Plattform- und
Sprachenunabhngigkeit auszeichnet. Dadurch ist Sie besonders fr wissenschaftliche
Programme und Spiele eine optimale Schnittstelle fr eine 3D-Grafikausgabe.
Schwerpunkt dieser Arbeit liegt dabei auf den Grundkonzepten, auf denen OpenGL steht
ber Transformationen der OpenGL- Matrizen, auf den Primitiven und Farben bis hin zu
den Texturen in OpenGL.
Diese Arbeit wird sich nicht mit implementations- spezifischen Details befassen, sondern
eher auf grundlegende Funktionen eingehen. Neueinsteiger in OpenGL sollten daher
zustzlich zu dieser Arbeit noch ein anderes OpenGL- Tutorial dazu nehmen.
Grundstzlich sollten die Beispiele, welche im Kapitel 9Anwendungscode und in den
Programmbeispielen aus dem gleichnamigen Ordner zu finden sind helfen, die hier nur
eingeworfenen Befehle im Kontext zu verstehen und anwenden zu knnen. Voraussetzung
fr das Verstndnis des Codes sind grundlegende C- Kenntnisse.
2 Einfhrung
2.1 GeschichteOpenGL entstand ursprnglich aus dem sogenannten IRIS GL von Silicon Graphics. Von
1992 bis 2006 legte das OpenGL ARB (Architecture Review Board) Neuerungen fr den
Standard fest. Dieses ARB bestand unter anderen aus den Firmen: AMD/ATI, Apple,
3DLaps, Dell, IBM, Nvidia, Intel, Sun und vielen weiteren.
Unter dem OpenGL ARB wurde 1992 OpenGL 1.0 verabschiedet. Erst 12 Jahre spter
wurde dann 2004 die 2. Version verffentlicht. Als grte Neuerung zu dem Vorgnger sei
an dieser Stelle die OpenGL ShadingLanguage, welche es erlaubt die sogenannten
Hardwareshader auf der Grafikkarte selber zu programmieren, genannt.
Seit Juli 2006 liegt die Weiterentwicklung des Standards in der Hand der Khronos Group,
welche sich die Weiterentwicklung offener Multimediastandards auf die Fahnen
geschrieben hat. Zu diesem Industriekonsortium gehren zu den ber 100 Mitglieder,
Firmen wie Google, Intel, Nvidia und AMD/ATI.
Kurz nach bernahme der Entwicklung wurde im August 2006 schon OpenGL 3.0
3
verffentlicht. In Version 3 verabschiedete man sich von Altlasten und beendete die
Weiterentwicklung der lteren Versionen.
Schon 4 Jahre nach dieser 3. Version wurde OpenGL im Mrz 2010 schon in der 4.
Version vorgestellt. Zu den wichtigsten neuen Features gehren unter anderen Tesselation
und die Integration von OpenCL.
Whrend OpenGL in professionellen Bereichen heute Standard ist, hat es die Khronos
Group durch die schnelle Weiterentwicklung geschafft, OpenGL auch in der
Spielprogrammierung weitestgehend ebenbrtig mit DirectX zu machen. Da es auerdem
eine lange Liste von Betriebssystemen untersttzt, ist es auf allen Systemen neben
Windows fr eine 3D Grafikausgabe erste Wahl.
2.2 KonzeptDieses Kapitel soll einen kleinen Einblick in grundlegende Konzepte von OpenGL geben.
2.2.1 Plattform- und ProgrammiersprachenunabhnigkeitEiner der sehr groen Vorteile (gegenber Direct3D) von OpenGL ist die Plattform- und
Programmiersprachenunabhngigkeit. Das heit, dass OpenGL auf sehr vielen
verschiedenen Betriebssystemen genutzt werden kann. Darunter gehren natrlich die
groen 3 Systeme: Windows, Linux und Mac aber auch eine lange Reihe an kleineren
Systemen, wie Solaris, FreeBSD. Selbst auf vielen Handybetriebssystemen wie Android,
IphoneOS oder WebOS kann eine etwas verschlankte Version von OpenGL genutzt
werden. Mit WebGL wird seit neuester Zeit sogar eine OpenGL- Variante entwickelt,
welche von Webbrowsern verarbeitet werden kann.
Whrend diese Arbeit mit der Sprache C OpenGL Anwendungen programmiert, kann dies
auch in sehr vielen anderen Sprachen geschehen. So gibt es z.B. eine groe Community
welche OpenGL mit FreePascal, Java oder C++ programmiert ( siehe www.delphigl.com )
und sehr ausfhrliche Tutorials zur Verfgung stellt.
2.2.2 ZustandsautomatOpenGL wurde als Zustandsautomat entworfen. Das bedeutet, dass nicht bei jedem
Funktionsaufruf alle Parameter mit bergeben werden mssen, sondern diese - einmal
gesetzt - solange aktiv bleiben, bis ein neuer Zustand gesetzt wird.
4
http://www.delphigl.com/
Bsp Farbe:
glColor3f(1, 0, 0); //Farbe auf Rot setzenZeichneDreieck();glColor3f(0, 0, 1); //Farbe auf Blau setzenZeichneDreieck();
An dem Codeschnipsel sieht man das Prinzip des Zustandsautomaten sehr schn. Wenn
man ber den Befehl glColor3f(1,0,0); die Farbe auf Rot setzt, wird das gesamte Dreieck
welches danach gezeichnet werden soll, rot gezeichnet (solange es nicht in der Funktion
ZeichneDreieck() mit einer anderen Farbe berschrieben wird). Wenn man jetzt die
gleiche Funktion nach einem Setzten der Farbe zu blau noch einmal aufruft, wird das
gesamte Dreieck Blau gezeichnet.
2.2.3 Renderpipeline
Zuerst zur Begriffserklrung: Rendern bezeichnet das Aufarbeiten von Rohdaten in neue
Daten wie z.B. Bildmaterial. In OpenGL Anwendungen bedeutet es meist die Berechnung
einer 3D- Szene mit Objekten, die in die Tiefe angeordnet sind, in ein 2D- Bild zu
berechnen. Eine Pipeline besteht aus vielen mgl