Grafikprogrammierung mit OpenGL I - TU Dresden · PDF filemit OpenGL I Proseminar Computergrafik Sommersemester 2010 TU Dresden ... einer 3D- Szene mit Objekten, die in die Tiefe angeordnet

Embed Size (px)

Citation preview

  • Grafikprogrammierung

    mit OpenGL I

    Proseminar ComputergrafikSommersemester 2010

    TU Dresden

    Johannes VlkerMatrikelnummer: 3478976

    [email protected]

    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