Transcript
Page 1: Geräte-Unabhängigkeit • Sprach-Unabhängigkeit • Effizienz ...€¦ · 1992 OpenGL (SGI, DEC, Intel, IBM, Microsoft) Universität Frankfurt. OpenGL • Industrie-Standard (UnterstützungvielerHersteller)

Graphische Programmiersysteme - Warum?

• Geräte-Unabhängigkeit

• Sprach-Unabhängigkeit

• Effizienz

• Portabilität

• Wartungsfreundlichkeit

Universität Frankfurt

Page 2: Geräte-Unabhängigkeit • Sprach-Unabhängigkeit • Effizienz ...€¦ · 1992 OpenGL (SGI, DEC, Intel, IBM, Microsoft) Universität Frankfurt. OpenGL • Industrie-Standard (UnterstützungvielerHersteller)

Geschichte der graphischen Programmiersysteme und Standards

1976 Seillac Conference

1977 Core (ACM Siggraph)

1985 GKS (ISO 7942)

1986 X Window System (Industrie-Konsortium, MIT)

1988 GKS-3D (ISO 8805)

1989 PHIGS (ISO 9592)

1992 PHIGS+ (PHIGS plus lumiere und surfaces, ISO )

PEX (PHIGS Extensions to X, MIT)

1992 OpenGL (SGI, DEC, Intel, IBM, Microsoft)

Universität Frankfurt

Page 3: Geräte-Unabhängigkeit • Sprach-Unabhängigkeit • Effizienz ...€¦ · 1992 OpenGL (SGI, DEC, Intel, IBM, Microsoft) Universität Frankfurt. OpenGL • Industrie-Standard (UnterstützungvielerHersteller)

OpenGL

• Industrie-Standard (Unterstützung vieler Hersteller)

• 3D Graphik

• Geräte-unabhängig

• “Low-Level” API

• Prozedural statt deskriptiv (immediate vs. retained mode)

Universität Frankfurt

Page 4: Geräte-Unabhängigkeit • Sprach-Unabhängigkeit • Effizienz ...€¦ · 1992 OpenGL (SGI, DEC, Intel, IBM, Microsoft) Universität Frankfurt. OpenGL • Industrie-Standard (UnterstützungvielerHersteller)

Einbettung von OpenGL I

Universität Frankfurt

Application Program

IOServices

GDIOS

ServicesOpenGL

SoftwareRasterizer

Display

Page 5: Geräte-Unabhängigkeit • Sprach-Unabhängigkeit • Effizienz ...€¦ · 1992 OpenGL (SGI, DEC, Intel, IBM, Microsoft) Universität Frankfurt. OpenGL • Industrie-Standard (UnterstützungvielerHersteller)

Einbettung von OpenGL II

Universität Frankfurt

Application Program

IOServices

GDIOS

ServicesOpenGL

HardwareDriver

Display

Page 6: Geräte-Unabhängigkeit • Sprach-Unabhängigkeit • Effizienz ...€¦ · 1992 OpenGL (SGI, DEC, Intel, IBM, Microsoft) Universität Frankfurt. OpenGL • Industrie-Standard (UnterstützungvielerHersteller)

Rendering Pipeline

Modell-

Transformation

Modell-

TransformationModell-DBModell-DB

Beleuchtungs-

berechnung

Beleuchtungs-

berechnung

Viewing

Pipeline

Viewing

PipelineRaster-

konvertierung

Raster-

konvertierungRaster-

Ausgabe

Raster-

Ausgabe

Universität Frankfurt

Page 7: Geräte-Unabhängigkeit • Sprach-Unabhängigkeit • Effizienz ...€¦ · 1992 OpenGL (SGI, DEC, Intel, IBM, Microsoft) Universität Frankfurt. OpenGL • Industrie-Standard (UnterstützungvielerHersteller)

OpenGL Pipeline

Universität Frankfurt

Page 8: Geräte-Unabhängigkeit • Sprach-Unabhängigkeit • Effizienz ...€¦ · 1992 OpenGL (SGI, DEC, Intel, IBM, Microsoft) Universität Frankfurt. OpenGL • Industrie-Standard (UnterstützungvielerHersteller)

Simple#include <whateverYouNeed.h>

main() {OpenAWindowPlease(); /* OS/WM abhängig */

glClearColor(0.0, 0.0, 0.0, 0.0); /* Farbe zum Löschen des Bildspeichers/Fensters setzen */

glClear(GL_COLOR_BUFFER_BIT); /* Löschen des Bildspeichers/Fensters */

glMatrixMode (GL_PROJECTION);glLoadIdentity();glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0); /* Parallelprojektion mit Clipping-Quader setzen */

glColor3f (1.0, 1.0, 1.0); /* Farbe der Eckpunkte setzen */

glBegin(GL_POLYGON); /* Start einer Polygon-Definition */glVertex2f(-0.5, -0.5); glVertex2f(0.5, -0.5); /* Definition der Eckpunkte in 2D */glVertex2f(0.5,0.5); glVertex2f(-0.5, 0.5);glEnd(); /* Ende der Polygon-Definition */

glFlush(); /* Leeren des Befehlspuffers */

KeepTheWindowOnTheScreenForAWhile(); /* OS/WM abhängig */}

Universität Frankfurt

Page 9: Geräte-Unabhängigkeit • Sprach-Unabhängigkeit • Effizienz ...€¦ · 1992 OpenGL (SGI, DEC, Intel, IBM, Microsoft) Universität Frankfurt. OpenGL • Industrie-Standard (UnterstützungvielerHersteller)

Simple

Universität Frankfurt

GLuint, GLenum, GLbitfieldunsigned long32-bit unsigned integerui

GLushortunsigned short16-bit unsigned integerus

GLubyte, GLbooleanunsigned char8-bit unsigned integerub

GLdouble, GLclampddouble64-bit floating-pointd

GLfloat, GLclampffloat32-bit floating-pointf

GLint, GLsizeilong32-bit integeri

GLshortshort16-bit integers

GLbytesigned char8-bit integerb

OpenGL Type DefinitionTypical Corresponding C-

Language TypeData TypeSuffix

Page 10: Geräte-Unabhängigkeit • Sprach-Unabhängigkeit • Effizienz ...€¦ · 1992 OpenGL (SGI, DEC, Intel, IBM, Microsoft) Universität Frankfurt. OpenGL • Industrie-Standard (UnterstützungvielerHersteller)

Parallel-Projektion

Universität Frankfurt

Page 11: Geräte-Unabhängigkeit • Sprach-Unabhängigkeit • Effizienz ...€¦ · 1992 OpenGL (SGI, DEC, Intel, IBM, Microsoft) Universität Frankfurt. OpenGL • Industrie-Standard (UnterstützungvielerHersteller)

Parallel-ProjektionView/Clipping Volume

Universität Frankfurt

Page 12: Geräte-Unabhängigkeit • Sprach-Unabhängigkeit • Effizienz ...€¦ · 1992 OpenGL (SGI, DEC, Intel, IBM, Microsoft) Universität Frankfurt. OpenGL • Industrie-Standard (UnterstützungvielerHersteller)

Perspektivische Projektion

Universität Frankfurt

Page 13: Geräte-Unabhängigkeit • Sprach-Unabhängigkeit • Effizienz ...€¦ · 1992 OpenGL (SGI, DEC, Intel, IBM, Microsoft) Universität Frankfurt. OpenGL • Industrie-Standard (UnterstützungvielerHersteller)

Perspektivische ProjektionView/Clipping Volume

Universität Frankfurt

Page 14: Geräte-Unabhängigkeit • Sprach-Unabhängigkeit • Effizienz ...€¦ · 1992 OpenGL (SGI, DEC, Intel, IBM, Microsoft) Universität Frankfurt. OpenGL • Industrie-Standard (UnterstützungvielerHersteller)

GLUTOpenGL Utility Toolkit

Universität Frankfurt

• Fensterverwaltung BS (Window, Linux, Unix, ...) und WM (X, Motif...)

• Verwaltung der Eingabegeräte

Page 15: Geräte-Unabhängigkeit • Sprach-Unabhängigkeit • Effizienz ...€¦ · 1992 OpenGL (SGI, DEC, Intel, IBM, Microsoft) Universität Frankfurt. OpenGL • Industrie-Standard (UnterstützungvielerHersteller)

Simple

#include <windows.h>#include <GL/glut.h> /* includes <gl.h>, <glu.h> */

void init(void) {glClearColor (0.0, 0.0, 0.0, 0.0);

}

void display(void){glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0, 1.0, 1.0);glMatrixMode (GL_PROJECTION);glLoadIdentity();glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);glBegin(GL_POLYGON);glVertex2f(-0.5, -0.5); glVertex2f(-0.5,0.5); glVertex2f(0.5,0.5); glVertex2f(0.5,-0.5);glEnd();glFlush();

}

Universität Frankfurt

Page 16: Geräte-Unabhängigkeit • Sprach-Unabhängigkeit • Effizienz ...€¦ · 1992 OpenGL (SGI, DEC, Intel, IBM, Microsoft) Universität Frankfurt. OpenGL • Industrie-Standard (UnterstützungvielerHersteller)

Simple

int main (int argc, char *argv[ ] )

{

glutInit ( &argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); /* Setzen des GLUT-Display-Modes */glutInitWindowSize (500, 500); /* Definition der Fenstergröße */glutInitWindowPosition (100, 100); /* Position des Fensters auf dem Bildschirm */glutCreateWindow ("Simple"); /* Generiert Fenster mit angegebenen Titel */init ();glutDisplayFunc(display); /* Definiert die Display-Funktion */glutMainLoop(); /* Startet GLUT-Event-Verarbeitung */

return 0;}

Universität Frankfurt

Page 17: Geräte-Unabhängigkeit • Sprach-Unabhängigkeit • Effizienz ...€¦ · 1992 OpenGL (SGI, DEC, Intel, IBM, Microsoft) Universität Frankfurt. OpenGL • Industrie-Standard (UnterstützungvielerHersteller)

Simple

Universität Frankfurt

Page 18: Geräte-Unabhängigkeit • Sprach-Unabhängigkeit • Effizienz ...€¦ · 1992 OpenGL (SGI, DEC, Intel, IBM, Microsoft) Universität Frankfurt. OpenGL • Industrie-Standard (UnterstützungvielerHersteller)

SimpleVeränderung der Fenstergröße

Universität Frankfurt

Page 19: Geräte-Unabhängigkeit • Sprach-Unabhängigkeit • Effizienz ...€¦ · 1992 OpenGL (SGI, DEC, Intel, IBM, Microsoft) Universität Frankfurt. OpenGL • Industrie-Standard (UnterstützungvielerHersteller)

Nicht ganz so Simple

#include <windows.h>#include <GL/glut.h>

...

void reshape (int w, int h){

glViewport (0, 0, (GLsizei) w, (GLsizei) h); /* ganzes Fenster sei Viewport */

glMatrixMode (GL_Projektion); /* Manipuliere Projektions-Matrix */glLoadIdentity(); /* Initialisiere Projektionsmatrix mit

Einheitsmatrix */

if (w <= h)glOrtho (-1.0, 1.0, -1.0*(GLfloat)h/(GLfloat)w, /* passe Clipping-Volume an

Fenstergröße an */1.0*(GLfloat)h/(GLfloat)w, -1.0, 1.0);

elseglOrtho (-1.0*(GLfloat)w/(GLfloat)h,1.0*(GLfloat)w/(GLfloat)h, -1.0, 1.0, -1.0, 1.0);

}

int main(int argc, char** argv){...glutReshapeFunc(reshape);...

} Universität Frankfurt

Page 20: Geräte-Unabhängigkeit • Sprach-Unabhängigkeit • Effizienz ...€¦ · 1992 OpenGL (SGI, DEC, Intel, IBM, Microsoft) Universität Frankfurt. OpenGL • Industrie-Standard (UnterstützungvielerHersteller)

Nicht ganz so Simple

Universität Frankfurt

Page 21: Geräte-Unabhängigkeit • Sprach-Unabhängigkeit • Effizienz ...€¦ · 1992 OpenGL (SGI, DEC, Intel, IBM, Microsoft) Universität Frankfurt. OpenGL • Industrie-Standard (UnterstützungvielerHersteller)

AnimationRotating Rectangle

Universität Frankfurt

#include <windows.h>#include <GL\glut.h>

static GLfloat spin = 0.0;

void init(){glClearColor (0.0, 0.0, 0.0, 0.0); /* Hintergrundfarbe schwarz */}

void display(){glClear (GL_COLOR_BUFFER_BIT); /* Lösche Bildspeicher */glLoadIdentity();glRotatef (spin, 0.0, 0.0, 1.0); /* Rotiere mit Winkel spin um z-Achse */glColor3f (1.0, 0.0, 0.0); /* male mit Rot */glRectf (-25.0, -25.0, 25.0, 25.0); /* Quadrat mit Kantenlänge 50 */glutSwapBuffers(); /* Swap Double-Buffer */}

Page 22: Geräte-Unabhängigkeit • Sprach-Unabhängigkeit • Effizienz ...€¦ · 1992 OpenGL (SGI, DEC, Intel, IBM, Microsoft) Universität Frankfurt. OpenGL • Industrie-Standard (UnterstützungvielerHersteller)

AnimationRotating Rectangle

Universität Frankfurt

void spinDisplay(){spin += 2.0; /* spin = spin + 2.0 */if (spin > 360)spin -= 360;

glutPostRedisplay(); /* Zeiche Bildspeicher neu */}

void reshape (int w, int h){glViewport (0,0, (GLsizei) w, (GLsizei) h); /* Zeichne in komplettes Fenster */glMatrixMode(GL_PROJECTION);glLoadIdentity();if (w <= h)glOrtho (-50.0, 50.0, -50.0*(GLfloat)h/(GLfloat)w, /* passe Clipping-Volume an

Fenstergröße an */50.0*(GLfloat)h/(GLfloat)w, -50.0, 50.0);

elseglOrtho (-50.0*(GLfloat)w/(GLfloat)h,50.0*(GLfloat)w/(GLfloat)h, -50.0, 50.0, -50.0, 50.0);

glMatrixMode(GL_MODELVIEW);}

Page 23: Geräte-Unabhängigkeit • Sprach-Unabhängigkeit • Effizienz ...€¦ · 1992 OpenGL (SGI, DEC, Intel, IBM, Microsoft) Universität Frankfurt. OpenGL • Industrie-Standard (UnterstützungvielerHersteller)

AnimationRotating Rectangle

Universität Frankfurt

void mouse (int button, int state, int x, int y) /* Mouse Handler */{switch (button) {case GLUT_LEFT_BUTTON:

if (state == GLUT_DOWN)glutIdleFunc (spinDisplay);

break;case GLUT_MIDDLE_BUTTON:

if (state == GLUT_DOWN)glutIdleFunc (NULL);

break;default: break;}}

Page 24: Geräte-Unabhängigkeit • Sprach-Unabhängigkeit • Effizienz ...€¦ · 1992 OpenGL (SGI, DEC, Intel, IBM, Microsoft) Universität Frankfurt. OpenGL • Industrie-Standard (UnterstützungvielerHersteller)

AnimationRotating Rectangle

Universität Frankfurt

void keyboard (unsigned char key, int x, int y){switch (key) {case 'r': glutIdleFunc (spinDisplay);

break;case 's': glutIdleFunc (NULL);

break;default: break;

}}

Page 25: Geräte-Unabhängigkeit • Sprach-Unabhängigkeit • Effizienz ...€¦ · 1992 OpenGL (SGI, DEC, Intel, IBM, Microsoft) Universität Frankfurt. OpenGL • Industrie-Standard (UnterstützungvielerHersteller)

AnimationRotating Rectangle

Universität Frankfurt

int main(int argc, char *argv[ ]){glutInit ( &argc, argv);glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB); /* Double Buffer anfordern */glutInitWindowSize (250,250);glutInitWindowPosition (100,100);glutCreateWindow("Rotating Rectangle");init();glutDisplayFunc(display);glutReshapeFunc(reshape);glutKeyboardFunc(keyboard); /* Registriere Keyboard-Handler */glutMouseFunc(mouse); /* Registriere Mouse-Handler */glutMainLoop();return 0;}

Page 26: Geräte-Unabhängigkeit • Sprach-Unabhängigkeit • Effizienz ...€¦ · 1992 OpenGL (SGI, DEC, Intel, IBM, Microsoft) Universität Frankfurt. OpenGL • Industrie-Standard (UnterstützungvielerHersteller)

Übungsaufgabe

Universität Frankfurt

Aufgabe 1: Schreiben Sie ein Programm, in dem sich ein Quadrat geradlinig, aber niemals horizontal oder vertikal, durch ein Fenster bewegt. Sobald es auf die Fenstergrenzen trifft, wird es an diesen reflektiert.


Recommended