26
Graphische Programmiersysteme - Warum? Geräte-Unabhängigkeit Sprach-Unabhängigkeit Effizienz Portabilität Wartungsfreundlichkeit Universität Frankfurt

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

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

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.