29.10.2013 Aufrufe

3D-Computergrafik

3D-Computergrafik

3D-Computergrafik

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Grundlagen der Informatik<br />

• Einführung zur 3-Grafik<br />

– Kurze Historie<br />

– Prinzipielle Konzepte<br />

<strong>3D</strong>-<strong>Computergrafik</strong><br />

Prof. Dr.-Ing. Thomas Wiedemann<br />

Fachgebiet Informatik / Mathematik<br />

Überblick<br />

• Verfügbare 3-Grafiktechnologien<br />

– Ältere Technologien<br />

– OpenGL-Grafikbibliothek<br />

– Internet-<strong>3D</strong>-Grafikstandards VRML und SVG<br />

– Ausblick<br />

Grafikprogrammierung Teil 1 - Prof. T.Wiedemann - HTW Dresden - Folie 2<br />

1


Einführung zu grafischen Systemen ####<br />

Kurze Historie :<br />

• Entwicklung analog zu allgemeinen Grafikanwendungen<br />

• bis Mitte der 80er Jahr nur in Hightech-Bereichen (Militär,Raumfahrt)<br />

• durch Fa. Silicon Graphics Bereitstellung bezahlbarer (ab 30.000 €)<br />

Workstations ab Ende der 80er Jahre<br />

• Anfang der 90er Jahre zunehmende Anzahl von <strong>3D</strong>-fähigen<br />

Workstations<br />

• 1992: erste Ansätze (Drahtmodell) auch auf PC-Basis<br />

• 1995: echte, schattierte <strong>3D</strong>-Darstellungen auf PC´s nur mit speziellen<br />

(->) OpenGL-Grafikkarten für ca. 1000 €<br />

• ab Mitte der 90er Jahre starke Verbilligung der <strong>3D</strong>-Grafikkarten durch<br />

Boom im Spielesektor (PC´s heute mit vergleichbarer Grafikleistung<br />

wie Workstations von 1992)<br />

• aktuell stark zunehmender Einsatz von <strong>3D</strong>-Grafiken für virtuelle<br />

Welten, Produktpräsentation und Unterhaltung<br />

Grafikprogrammierung Teil 1 - Prof. T.Wiedemann - HTW Dresden - Folie 3<br />

Motivation zum Einsatz von <strong>3D</strong>-Grafiken<br />

Warum ist <strong>3D</strong> (meist) besser als 2D ?<br />

• Menschen sind dreidimensionale Ansichten gewöhnt<br />

– <strong>3D</strong>-<strong>Computergrafik</strong>en werden zunehmend zum Aufbau virtueller Welten<br />

verwendet (siehe Werbung , "Matrix2" , ...)<br />

• Komplexe Maschinen oder Bauwerke lassen sich mit 2D-Grafiken<br />

(=herkömmlicher technischer Zeichnung) nur schwer<br />

veranschaulichen<br />

– Komplizierte Blechabwicklungen können am <strong>3D</strong>-Modell berechnet werden<br />

• Weiterverarbeitung im Konstruktionsprozeß erfordert "echte"<br />

Nachbildung des Objektes als <strong>3D</strong>-Modell<br />

– Crashtests mit 3-dimensionaler Berechnung der Verformungen<br />

– FEM-Simulation von Schwingungs- und Temperaturverläufen in Teilen<br />

Grafikprogrammierung Teil 1 - Prof. T.Wiedemann - HTW Dresden - Folie 4<br />

2


Konzepte und Algorithmen der <strong>3D</strong>-<strong>Computergrafik</strong><br />

Grundproblem der <strong>3D</strong>-<strong>Computergrafik</strong> :<br />

• bis auf wenige Ausnahmen sind die aktuelle Darstellungsmittel für<br />

Grafiken (Bildschirm, Papier, Foto, Folie ) nur zweidimensional<br />

• echte <strong>3D</strong>-Grafiktechnologien wie z.B. Holografie oder <strong>3D</strong>-Plotter<br />

aus dem Rapid-Prototypingbereich sind für den Masseneinsatz noch<br />

zu teuer und aufwendig<br />

• auch Stereoskopische Systeme (siehe <strong>3D</strong>-IMAX) bestehen real aus<br />

trickreich verknüpften 2D-Ansichten<br />

Fazit:<br />

• Die 3-dimensionalen Objekte müssen auf 2-dimensionale Flächen<br />

abgebildet werden !<br />

• Diese Transformation erfolgt in der Regel erst beim Übergang von der<br />

Verarbeitung/Speicherung von <strong>3D</strong>-Objekten zur Anzeige.<br />

• zur Speicherung werden X,Y und Z-Koordinaten verwendet<br />

• die Koordinate Z muß folglich auf X und Y transformiert werden.<br />

Grafikprogrammierung Teil 1 - Prof. T.Wiedemann - HTW Dresden - Folie 5<br />

Projektionen<br />

Aus der darstellenden Geometrie sind verschiedene Verfahren im Einsatz :<br />

Zentralprojektion<br />

• Perspektivische Projektion<br />

• Blickpunkt des Betrachters ist relativ nahe<br />

• Erlaubt gute Einschätzung von Größenrelationen<br />

• oft verwendet bei Virtual Reality<br />

Parallelprojektion<br />

• Blickpunkt des Betrachters ist sehr<br />

weit entfernt (-> unendlich)<br />

• wird verwendet für Übersichtsbilder<br />

• Schräge Parallelproj.-> Kavalierperspektive<br />

Stereoskopische Darstellung<br />

• entstehen durch zweifache Zentralprojektion mit leicht versetztem Blickpunkt<br />

• die zwei Einzelbilder müssen dann jeweils jedem Auge separat angezeigt werden<br />

(z.B. durch Farb- oder Polarisationsfilter)<br />

Grafikprogrammierung Teil 1 - Prof. T.Wiedemann - HTW Dresden - Folie 6<br />

3


<strong>3D</strong>-Transformationen<br />

• ebenfalls entsprechend der darstellenden Geometrie lassen sich Bewegungen von<br />

Objekten im Raum bzw. die räumliche Anordnung von Standardobjekten (Quader,<br />

Kreis, Ellipse ) auf Matrixoperationen abbilden<br />

• zur Vermeidung von Problemen durch den Koordinatenursprung (0,0,0) führt man<br />

eine künstliche 4. Dimension ein und homogenisiert damit die Daten (-> Mathemat.)<br />

• ein Punkt wird danach beschrieben durch | x y z 1 | T<br />

• Alle Transformationen lassen sich dann abbilden auf eine Matrixoperation der Form:<br />

x 2<br />

y 2<br />

z 2<br />

1<br />

a11 a12 a13 a14 a21 a22 a23 a24 = a31 a32 a33 a34 *<br />

a41 a42 a43 1<br />

• Die Transformationsmatrix A kann für viele Standardtransformationen und auch<br />

deren Kombination (z.B. Drehen + Verschieben) relativ einfach bestimmt werden<br />

• Die einheitliche Berechnungsweise erlaubt in aktuellen <strong>3D</strong>-Grafikkarten eine<br />

Realisierung dieser Berechnung per Hardware und damit maximale Performance !<br />

• Diese Vorgehensweise ist bei Weglassen von Z auch für 2D-Operationen gültig !<br />

• Bei der finalen Anzeige wird die 4. Dimension ignoriert.<br />

Grafikprogrammierung Teil 1 - Prof. T.Wiedemann - HTW Dresden - Folie 7<br />

x 1<br />

y 1<br />

z 1<br />

1<br />

<strong>3D</strong>-Transformationen als Matrixoperation<br />

Darstellung der Transformationsmatrix A für Standardtransformationen:<br />

• Verschiebung (engl. Translation)<br />

x+a<br />

y+b<br />

z+c<br />

1<br />

• Skalierung (engl. Zoom )<br />

x*a<br />

y*a<br />

z*a<br />

1<br />

=<br />

=<br />

1 0 0 0<br />

0 1 0 0<br />

0 0 1 0<br />

a b c 1<br />

a 0 0 0<br />

0 a 0 0<br />

0 0 a 0<br />

0 0 0 1<br />

• Drehung um α (engl. Rotation ) – hier um X-Achse (andere Achsen analog)<br />

x 2<br />

y 2<br />

z 2<br />

1<br />

=<br />

Grafikprogrammierung Teil 1 - Prof. T.Wiedemann - HTW Dresden - Folie 8<br />

*<br />

*<br />

x 1<br />

y 1<br />

z 1<br />

1<br />

x 1<br />

y 1<br />

z 1<br />

1<br />

1 0 0 0<br />

0 cos(α) -sin(α) 0<br />

0 sin(α) cos(α) 0<br />

0 0 0 1<br />

• Spiegelung kann abgeleitet werden aus Drehung um 180°<br />

*<br />

x 1<br />

y 1<br />

z 1<br />

1<br />

4


Darstellungsoptionen von geometrischen Objekten<br />

1. Drahtmodell<br />

• es werden nur die Kanten oder Höhenlinien dargestellt<br />

• relativ einfache Realisierung, aber schnell unübersichtlich<br />

2. Flächenmodelldarstellung<br />

• Zerlegung der Objekte in Flächen<br />

• bei gekrümmten Flächen Zerlegung in kleine Dreiecke<br />

• noch relativ effizient realisierbar (Computerspiele)<br />

• Probleme mit Schnittoperationen oder Durchdringungen<br />

3. Volumenmodell<br />

• Aufbau der Objekte aus Basisobjekten (Quader, Kugel,...)<br />

oder Näherung durch Spline-Volumina (B-Spline / Nurbs)<br />

• Volumenoperationen (Bohren, Abrunden) möglich und<br />

notwendig zur Generierung von komplexen Werkstücken<br />

• sehr große und aufwendige dynamische Datenstrukturen im<br />

Gigabyte-Bereich<br />

Grafikprogrammierung Teil 1 - Prof. T.Wiedemann - HTW Dresden - Folie 9<br />

Probleme bei der Anzeige von <strong>3D</strong>-Objekten<br />

• Berechnung der Verdeckung unsichtbarer Objekte und Teile<br />

davon (betrifft alle Darstellungsoptionen)<br />

Basisalgorithmus "Z-Buffering":<br />

• Grafikprimitive (Linien, Dreiecke) werden nach ihrer Z-<br />

Koordinate sortiert (Z ist i.d.R. immer die Achse vom Nutzer<br />

weg)<br />

• Option A: danach werden beginnend mit den entferntesten<br />

Objekt die Objekte gezeichnet und entferntere werden durch<br />

nähere Objekte überlagert (überschrieben)<br />

• Option B: es wird mit den nächsten begonnen und es wird<br />

geprüft, ob das folgende Objekt von vorhergehenden Objekten<br />

verdeckt wird –dann wird nichts oder nur teilweise gezeichnet<br />

• Bewertung: Option B ist schneller, aber deutlich aufwendiger<br />

• moderne <strong>3D</strong>-Grafikkarten führen den Prozeß der Zerlegung,<br />

Sortierung und Zeichnung von Dreiecken autonom, ohne<br />

Beteiligung des Prozessors durch<br />

Grafikprogrammierung Teil 1 - Prof. T.Wiedemann - HTW Dresden - Folie 10<br />

5


Durchführung von Animation<br />

Lösungsansatz :<br />

• wiederholtes Neuzeichnen bei sich schrittweise ändernden Bezugspunkten oder<br />

Objekteigenschaften (Abmessungen / Farbe / Form )<br />

• z.B. Bewegung eines Objektes entlang einer Linie im Raum durch Transformation der<br />

Objektpunkte mittels einer Translationsmatrix<br />

• Auch Zusammenfassung mehrerer Transformationen durch einmalige Multiplikation<br />

der Matrizen miteinander und nachfolgender Anwendung auf die Punkte<br />

Probleme / Anforderungen<br />

• gleitende, ruckfreie Bewegungsdarstellung erfordert sehr kleine<br />

Bewegungsinkremente und damit sehr häufiges Neuzeichnen<br />

• Messung der Anzahl von Neu-Zeichnungen in Frames per second (Fps) – eine<br />

Meßgröße bei <strong>3D</strong>-Grafikkarten anhand von Referenzanimationen – Ziel ca. 25 Fps<br />

• Neuaufbau des Bildes würde bei großen Szenen (bzw. kleiner Fps-Wert) zu starken<br />

Störungen führen -> Konzept eines doppelten Bildschirmspeichers (Dopple<br />

Buffering) :<br />

• es werden abwechselnd der erste oder zweite Speicher neu gezeichnet<br />

• nach Abschluß des Zeichens wird nur die Startadresse des Speicherauslesens<br />

umgeschaltet und damit das neue Bild gezeigt<br />

• das nächste Bild wird immer anderen Speicherteil gezeichnet<br />

Grafikprogrammierung Teil 1 - Prof. T.Wiedemann - HTW Dresden - Folie 11<br />

Verfügbare <strong>3D</strong>-Technologien<br />

• Die Komplexität aber auch die gute Wiederverwendbarkeit der Basisalgorithmen<br />

machen eine Eigenentwicklung von <strong>3D</strong>-Basissoftware heute kaum noch notwendig<br />

bzw. sinnvoll !<br />

• auch im Interesse einer Austauschfähigkeit der Grafikdaten sollten einige der<br />

nachfolgenden Industriestandards verwendet werden.<br />

Highend-<strong>3D</strong>-Programmierung :<br />

• in 80er Jahren erste, meist herstellerabhängige Funktionsbibliotheken<br />

• OpenGL – Bibliothek mit allen notwendigen Datenstrukturen und<br />

Transformationsfunktionen für 2D- und <strong>3D</strong>-Darstellungen<br />

wurde ursprünglich von Silicon Graphics (SGI) für eigene Grafik-Workstations als<br />

hardware-unabhängige Schnittstelle für <strong>3D</strong>-Grafikprogrammierung entwickelt<br />

1992 Zusammenschluss von wichtigen Grafikworkstation-Herstellern wie SGI, Sun,<br />

Hewlett-Packard, Microsoft und anderen zum OpenGL Architectural Review Board<br />

(ARB) zwecks gemeinsamer Weiterentwicklung<br />

heute wichtigste, professionelle Schnittstelle für <strong>3D</strong>-Programmierung !<br />

für die Internetpräsentation wurde 1995 von OpenGL ein neues, XML-basiertes<br />

Textformat abgeleitet - VRML, konnte sich aber noch nicht breit durchsetzen<br />

unter Windows wurde von Microsoft die DirectX-Schnittstelle entwickelt<br />

für 2D-Grafiken wurde 2002 das einfache und schnellere SVG-Format definiert<br />

Grafikprogrammierung Teil 1 - Prof. T.Wiedemann - HTW Dresden - Folie 12<br />

6


<strong>3D</strong>-Grafikprogrammierung am Beispiel von OpenGL<br />

• Die OpenGL-Befehle sind für verschiedene Programmiersprachen definiert (u.a.<br />

FORTRAN, ADA, C )<br />

• OpenGL befindet sich immer in einem definierten Zustand, der durch Zustandsvariablen<br />

gegeben ist (auch als State-Machine bezeichnet)<br />

• Beispiel: die Farbe wird mit dem Befehl glColor3f(rot, grün, blau) definiert und gilt<br />

dann für alle zu zeichnenden Objekte bis zum nächsten glColor3f(..)-Befehl<br />

• OpenGL verfügt über 10 Primitive, mit welchen alle Grafiken realisiert werden<br />

• der Befehlssatz der gesamten Bibliothek umfasst etwa 200 Kommandos ( gl...)<br />

• für <strong>3D</strong>-Objekte stehen nur Punkte, Linien und Polygone zur Verfügung<br />

• alle komplexen Körper müssen durch den <strong>3D</strong>-Entwickler aus den einfachen<br />

Primitiven aufgebaut werden<br />

Zur Vereinfachung wurden weitere Bibliotheken entwickelt :<br />

• GLU (OpenGL Utility Library) zur Erstellung von Projektionsberechnungen und<br />

zum Aufbau komplexer Oberflächen mit Nurbs (Non-uniform-rational B-Splines)<br />

• GLUT (OpenGL Utility Toolkit) als Betriebssystem-unabhängiges Werkzeug für<br />

das einfachere Handling der OpenGL-Fenster und für die Reaktion auf Benutzer-<br />

Events von Maus oder Tastatur<br />

Grafikprogrammierung Teil 1 - Prof. T.Wiedemann - HTW Dresden - Folie 13<br />

Ein einfaches OpenGL-C-Programm<br />

... #include <br />

void DrawScene(void)<br />

{ glClearColor (0.5, 0.0, 0.0, 0.0); //Hintergrundfarbe setzen (dunkles Rot)<br />

glClear(GL_COLOR_BUFFER_BIT);<br />

glColor3f(0.0, 0.1, 1.0); // Farbe des 5-Ecks setzen, (blau)<br />

glBegin(GL_POLYGON); //Polygonzug des 5-Ecks starten<br />

glVertex2f(-0.5, -0.5); glVertex2f(-0.5, 0.5); // Polygonpunkte definieren<br />

glVertex2f( 0.5, 0.5); glVertex2f( 0.8, 0.0); glVertex2f( 0.5, -0.5);<br />

glEnd();<br />

glFlush(); //vorangehende GL-Befehle zeichnen<br />

}<br />

int main(int argc, char *argv[])<br />

{ glutInit(&amp;argc, argv); // initialisiert GLUT<br />

glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); // initialisiere Ausgabefenster<br />

glutInitWindowPosition (100, 100); // Fensterposition und -grösse setzen<br />

glutInitWindowSize (500, 500); glutCreateWindow (argv[0]); // Fenster erzeugen<br />

glutDisplayFunc(DrawScene); // Zeichnen mit obiger Funktion<br />

glutMainLoop(); // Hauptschleife<br />

return EXIT_SUCCESS;}<br />

Quelle: Linux-Magazin 04/2001 Thomas G. E. Ruge<br />

Grafikprogrammierung Teil 1 - Prof. T.Wiedemann - HTW Dresden - Folie 14<br />

7


Weitere OpenGL-Funktionalitäten<br />

• Einstellung der Beleuchtung und des Blickwinkels<br />

• diffuses Licht, Punktlicht (Glühbirne) , Spotlight (wie Taschenlampe)<br />

• verschiedene Farben und Helligkeiten der Lichtquelle<br />

• Definition verschiedener Kamerapunkte mit Umschaltmöglichkeit<br />

• Einstellungen für Transparenz und Reflektion der Objekte<br />

• Transparenz definiert Lichtdurchlässigkeit (1= Glas 0.5 = Milchglas<br />

0=undurchlässig)<br />

• Reflektion definiert Art der Rückstrahlung bei Lichteinfall (chaotischer<br />

Rückstrahlwinkel entspricht matten Oberflächen wie Stoff, einheitlicher<br />

Rückstrahlwinkel führt zu Reflexionen wie bei metallischem Glanz)<br />

• bei Highend-Grafiken erfolgt sogenanntes Raytracing :<br />

• eine große Anzahl (!!!) von Strahlen einer Lichtquelle wird in seinem Verlauf<br />

und den dabei stattfindenden Reflexionen , Abschwächungen und Veränderungen<br />

genau berechnet (Rechenzeiten im Minuten bis Stundenbereich)<br />

• Ergebnisse sind meist sich gegenseitig spiegelnde Objekte und ein fast<br />

natürliches Aussehen<br />

• Probleme bereiten (noch) Objekte mit vielen Einzelteilen wie Haare oder<br />

Bäume<br />

• Nebel und Wasser sind durch Texturen (= projektierte Bitmaps) realisierbar<br />

Grafikprogrammierung Teil 1 - Prof. T.Wiedemann - HTW Dresden - Folie 15<br />

8

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!