3D-Computergrafik
3D-Computergrafik
3D-Computergrafik
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(&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