Einführung in OpenGL - dfki.uni-kl.dedannen/HTW_Vis_2008/Kapitel_Einfuehrung.pdf · - OpenGL ist...
Transcript of Einführung in OpenGL - dfki.uni-kl.dedannen/HTW_Vis_2008/Kapitel_Einfuehrung.pdf · - OpenGL ist...
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
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
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
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
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
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, …
– …
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)
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.
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
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])
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. */
}
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);
}
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 ();
}
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.
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