Einführung in OpenGL - dfki.uni-kl.dedannen/HTW_Vis_2008/Kapitel_Einfuehrung.pdf · - OpenGL ist...

15
1 Einführung in OpenGL Visualisierung mit C++ / OpenGL - SS 2008 Einführung in OpenGL OpenGL: Einführung/Standard - OpenGL (Open Graphics Library) ist ein Standard für 3D Rendering und 3D Hardware-Beschleunigung - OpenGL läuft unter Windows, MacOS, Linux, Unix, … - Website: http://opengl.org - Das OpenGL Architectural Review Board – ARB – bestimmt den Standard

Transcript of Einführung in OpenGL - dfki.uni-kl.dedannen/HTW_Vis_2008/Kapitel_Einfuehrung.pdf · - OpenGL ist...

Page 1: Einführung in OpenGL - dfki.uni-kl.dedannen/HTW_Vis_2008/Kapitel_Einfuehrung.pdf · - OpenGL ist ein low-level API für 3D und 2D Grafik, das das Rendering und weniger das Modellieren

1

Einführung in OpenGL

Visualisierung mit C++ / OpenGL - SS 2008

Einführung in OpenGL

OpenGL: Einführung/Standard

- OpenGL (Open Graphics Library) ist ein Standard für 3D Rendering und 3D Hardware-Beschleunigung

- OpenGL läuft unter Windows, MacOS, Linux, Unix, …

- Website: http://opengl.org

- Das OpenGL Architectural Review Board – ARB – bestimmt den Standard

Page 2: Einführung in OpenGL - dfki.uni-kl.dedannen/HTW_Vis_2008/Kapitel_Einfuehrung.pdf · - OpenGL ist ein low-level API für 3D und 2D Grafik, das das Rendering und weniger das Modellieren

2

Einführung in OpenGL

Visualisierung mit C++ / OpenGL - SS 2008

Einführung in OpenGL

OpenGL: Eigenschaften

- Hohe Qualität und leistungsfähig

- Anwendungen in

– CAD/CAM/CAE

– Spiele

– Medizin

– VR

– Film / Fernsehen

Page 3: Einführung in OpenGL - dfki.uni-kl.dedannen/HTW_Vis_2008/Kapitel_Einfuehrung.pdf · - OpenGL ist ein low-level API für 3D und 2D Grafik, das das Rendering und weniger das Modellieren

3

Einführung in OpenGL

Visualisierung mit C++ / OpenGL - SS 2008

Einführung in OpenGL

OpenGL: Vorteile für Entwickler

- Industriestandard, gratis

- Neutral und plattformübergreifend

- Stabil, kompatibel zu früheren Versionen

- Zuverlässig und portierbar, unabhängig von

Betriebs- und Window-System

- Entwickelt sich weiter, (aktuell: Vers. 2.1)

- Skalierbar: Home PC bis Supercomputer

- Ausgereiftes API, das low-level Details kapselt

- Ausführliche Dokumentation erhältlich

Page 4: Einführung in OpenGL - dfki.uni-kl.dedannen/HTW_Vis_2008/Kapitel_Einfuehrung.pdf · - OpenGL ist ein low-level API für 3D und 2D Grafik, das das Rendering und weniger das Modellieren

4

Einführung in OpenGL

Visualisierung mit C++ / OpenGL - SS 2008

Einführung in OpenGL

OpenGL: Software Entwicklung

- OpenGL ist reich an Primitiven für

– Geometrie und Bild, Display-Listen, Transformationen, Beleuchtung, Texturen, Anti-aliasing, Blending, …

- Anbindung an C, C++, Fortran, Ada, Java, (Lisp) ausgehend von einheitlicher Spezifikation.

- Läuft unter den Betriebssystemen UNIX, Linux, MacOs, Windows 95/98/2000/NT/XP, Linux, Python, BeOS

- Läuft unter X-Windows (X11), Win32

- Unterstützt 2D und 3D

Page 5: Einführung in OpenGL - dfki.uni-kl.dedannen/HTW_Vis_2008/Kapitel_Einfuehrung.pdf · - OpenGL ist ein low-level API für 3D und 2D Grafik, das das Rendering und weniger das Modellieren

5

Einführung in OpenGL

Visualisierung mit C++ / OpenGL - SS 2008

Einführung in OpenGL

OpenGL: Hardwarebeschleunigung

- Je nach Grafik-Karte werden gewisse Befehle

– von reiner Software

– von der Hardware

– oder von Soft- und Hardware gemischt ausgeführt

- Flexible Implementierung für low-cost PC bis hin

zu Grosscomputern

- Kartenspezifische Erweiterungen sind ebenfalls

möglich

Page 6: Einführung in OpenGL - dfki.uni-kl.dedannen/HTW_Vis_2008/Kapitel_Einfuehrung.pdf · - OpenGL ist ein low-level API für 3D und 2D Grafik, das das Rendering und weniger das Modellieren

6

Einführung in OpenGL

Visualisierung mit C++ / OpenGL - SS 2008

Einführung in OpenGL

OpenGL: Grundlage für viele Anwendungen

- Viele high-level APIs bauen auf OpenGL auf:

– Open Inventor, IRIS Performer, OpenGL Optimizer, OpenSceneGraph

- Applikationen die auf OpenGL basieren:

– Maya

– 3D Studio Max

– WorldToolKit, WorldUp

– CosmoWorld

– Games like Unreal, Quake2, …

– …

Page 7: Einführung in OpenGL - dfki.uni-kl.dedannen/HTW_Vis_2008/Kapitel_Einfuehrung.pdf · - OpenGL ist ein low-level API für 3D und 2D Grafik, das das Rendering und weniger das Modellieren

7

Einführung in OpenGL

Visualisierung mit C++ / OpenGL - SS 2008

Einführung in OpenGL

OpenGL: ARB

- Das OpenGL Architecture Review Board (ARB),

wacht über den Standard

- Dem Konsortium das 1992 gegründet wurde,

gehören Firmen wie IBM, Intel, HP, Microsoft,

Silicon Graphics, Evans & Sutherlands, …, an

- OpenGL wird laufend weiterentwickelt

- Endverbraucher, Softwareverkäufer, und OpenGL

API Programmierer zahlen keine Lizenzgebühren,

(nur Hardware Hersteller)

Page 8: Einführung in OpenGL - dfki.uni-kl.dedannen/HTW_Vis_2008/Kapitel_Einfuehrung.pdf · - OpenGL ist ein low-level API für 3D und 2D Grafik, das das Rendering und weniger das Modellieren

8

Einführung in OpenGL

Visualisierung mit C++ / OpenGL - SS 2008

Einführung in OpenGL

OpenGL: Grundlagen

- API für Rendering in den Bildschirmspeicher,

unterstüzt keine Peripherie wie Window, Maus, Tastatur, …

– Wir verwenden hierzu GLUT

- Primitive (Punkt, Linie, Polygone, Pixel Rechteck)

unterliegen den jeweils aktiven Modi, die über

Prozeduraufrufe gesetzt werden können.

- OpenGL ist ein low-level API für 3D und 2D

Grafik, das das Rendering und weniger das

Modellieren von komplexen Objekten unterstüzt.

Page 9: Einführung in OpenGL - dfki.uni-kl.dedannen/HTW_Vis_2008/Kapitel_Einfuehrung.pdf · - OpenGL ist ein low-level API für 3D und 2D Grafik, das das Rendering und weniger das Modellieren

9

Einführung in OpenGL

Visualisierung mit C++ / OpenGL - SS 2008

Einführung in OpenGL

OpenGL: Grundlagen

- GL verwendet ein Client-Server Modell:

Client: Programm, das das API verwendet.

Server: Übernimmt das Rendering.

- OpenGL als Status-Maschine:

Client state

Server state

Page 10: Einführung in OpenGL - dfki.uni-kl.dedannen/HTW_Vis_2008/Kapitel_Einfuehrung.pdf · - OpenGL ist ein low-level API für 3D und 2D Grafik, das das Rendering und weniger das Modellieren

10

Einführung in OpenGL

Visualisierung mit C++ / OpenGL - SS 2008

Einführung in OpenGL

OpenGL: Syntax

- void glVertex3f(GLfloat x, GLfloat y, GLfloat z)

- void glNormal3dv(GLdouble arg[3])

- Rtype glName{e 1234}{e bsifd ub us ui}{e v}

– ([args,] T arg1, …, T argN [, args])

Page 11: Einführung in OpenGL - dfki.uni-kl.dedannen/HTW_Vis_2008/Kapitel_Einfuehrung.pdf · - OpenGL ist ein low-level API für 3D und 2D Grafik, das das Rendering und weniger das Modellieren

11

Einführung in OpenGL

Visualisierung mit C++ / OpenGL - SS 2008

Einführung in OpenGL

OpenGL: Hello World

#include <GL/glut.h>

int main(int argc, char** argv) {

glutInit(&argc, argv);

glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);

glutInitWindowSize (250, 250);

glutInitWindowPosition (100, 100);

glutCreateWindow ("hello");

init ();

glutDisplayFunc(display);

glutMainLoop();

return 0; /* ANSI C requires main to return int. */

}

Page 12: Einführung in OpenGL - dfki.uni-kl.dedannen/HTW_Vis_2008/Kapitel_Einfuehrung.pdf · - OpenGL ist ein low-level API für 3D und 2D Grafik, das das Rendering und weniger das Modellieren

12

Einführung in OpenGL

Visualisierung mit C++ / OpenGL - SS 2008

Einführung in OpenGL

OpenGL: Hello World

void init (void) {

/* select clearing color */

glClearColor (0.0, 0.0, 0.0, 0.0);

/* initialize viewing values */

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);

}

Page 13: Einführung in OpenGL - dfki.uni-kl.dedannen/HTW_Vis_2008/Kapitel_Einfuehrung.pdf · - OpenGL ist ein low-level API für 3D und 2D Grafik, das das Rendering und weniger das Modellieren

13

Einführung in OpenGL

Visualisierung mit C++ / OpenGL - SS 2008

Einführung in OpenGL

OpenGL: Hello Worldvoid display(void) {

glClear (GL_COLOR_BUFFER_BIT); /* clear all pixels *//* draw polygon with corners at (0.25, 0.25, 0.0) and (0.75, 0.75, 0.0) */glColor3f (1.0, 1.0, 1.0);glBegin(GL_POLYGON);glVertex3f (0.25, 0.25, 0.0);glVertex3f (0.75, 0.25, 0.0);glVertex3f (0.75, 0.75, 0.0);glVertex3f (0.25, 0.75, 0.0);glEnd();/* don't wait! start processing buffered OpenGL routines */glFlush ();

}

Page 14: Einführung in OpenGL - dfki.uni-kl.dedannen/HTW_Vis_2008/Kapitel_Einfuehrung.pdf · - OpenGL ist ein low-level API für 3D und 2D Grafik, das das Rendering und weniger das Modellieren

14

Einführung in OpenGL

Visualisierung mit C++ / OpenGL - SS 2008

Einführung in OpenGL

Aufgabe:

- Übersetzen Sie das oben gegebene Beispielprogramm und führen Sie es aus.

- Fügen Sie der Szene ein gelbes Dreieck mit den Ecken (0.25, 0.75, 0.0) (0.75, 0.75, 0.0) und (0.75, 0.25, 0.3) hinzu.

- Statt einer orthogonalen Parallelprojektion können Sie auch eine perspektivische Projektion benutzen. Ersetzen Sie dazu im Code die „glOrtho“-Anweisung durch folgende Anweisungen:gluPerspective(fieldOfView, aspect, near, far);gluLookAt(eyeX, exeY, eyeZ, centerX, centerY, centerZ, upX, upY, upZ);

Experimentieren Sie mit verschiedenen Sichten auf die Szene.

Page 15: Einführung in OpenGL - dfki.uni-kl.dedannen/HTW_Vis_2008/Kapitel_Einfuehrung.pdf · - OpenGL ist ein low-level API für 3D und 2D Grafik, das das Rendering und weniger das Modellieren

15

Einführung in OpenGL

Visualisierung mit C++ / OpenGL - SS 2008

Einführung in OpenGL

Literatur:

Computer Graphics with OpenGL (3. Auflage), D. Hearn, M.P. Baker. Prentice Hall, 2004. ISBN: 0130153907

OpenGL: A Primer (3. Auflage), Edward Angel, Addison-Wesley, 2007

OpenGL Programming Guide (5. Auflage), OpenGL ARB, Addison-Wesley, 2005,

The OpenGL Utility Toolkit (GLUT) Programming Interface API Version 3, Mark J. Kilgard, Silicon Graphics, Inc. November 13, 1996