Klaus Zeppenfeld Lehrbuch der Grafikprogrammierung Grundlagen Programmierung Anwendung unter Mitwirkung von Regine Wolters mit 2 CD-ROMs Spektrum Akademischer Verlag Heidelberg Berlin
LE 1 1 Grundlagen - Licht und visuelle Wahrnehmung 1 1.1 Physikalische Grundlagen 2 1.1.1 Licht 2 1.1.2 Fotometrie 6 1.1.3 Geometrische Optik 9 1.1.4 Schatten 13 1.1.5 Farben 15 1.2 Visuelle Wahrnehmung - vom Reiz zum Sehen und Erkennen 17 1.2.1 Das Auge 18 1.2.2 Akkomodation und Adaptation 20 1.2.3 Farbensehen 22 1.2.4 Verarbeitung des Sehreizes 23 1.2.5 Augenbewegung, plastisches Sehen und Entfernungssehen 25 1.2.6 Beeinflussung des Sehsinns (Optische Täuschung) 27 1.2.7 Sehen - Bestandteil des Lernens und Einfluss auf andere Sinnesorgane 35 1.3 Bedeutung von Physik und Wahrnehmung in der Computergrafik 36 LE 2 2 Grundlagen - 2D Grafik (Teil 1) 43 2.1 Punkte, Koordinaten und Koordinatensysteme 44 2.2 2D-Transformationen 49 2.2.1 Translation 51 2.2.2 Skalierung 52 2.2.3 Rotation 53 2.3 Homogene Koordinaten 55 2.4 Matrixrepräsentation von 2D-Transformationen 56 2.4.1 Translation 57 2.4.2 Skalierung 58 2.4.3 Rotation 59 2.4.4 Weitere Transformationen und Gesetze 61 LE 3 2 Grundlagen - 2D Grafik (Teil 2) 67 2.5 Transformation von Welt- in Bildkoordinaten 67 2.6 Transformationen in Java 71 XI
2.7 Fallbeispiel: 2D-Baukasten 79 2.7.1 Basisobjekte 79 2.7.2 Elementcontainer 82 2.7.3 Elementtransformationen 83 2.7.4 Window-Viewport-Transformation 84 2.7.5 Anwendung: 2D-Baukasten 85 LE 4 3 Grundlagen - 3D Grafik (Teil 1)93 3.1 Punkte, Koordinaten und Koordinatensysteme 93 3.2 Homogene Koordinaten 95 3.3 3D-Transformationen 96 3.3.1 Translation 96 3.3.2 Skalierung 96 3.3.3 Rotation 97 3.3.4 Rotation um eine beliebige Achse 98 3.3.5 Weitere Transformationen und Effizienz 107 3.4 Transformation von Koordinatensystemen 110 LE 5 3 Grundlagen - 3D Grafik (Teil 2) 117 3.5 Projektionen 117 3.5.1 Perspektivische Projektion 118 3.5.2 Parallelprojektion 121 3.6 Transformation von Welt- in Bildkoordinaten 128 3.6.1 Sicht-Transformation 128 3.6.2 Sichtvolumen-Transformation 132 3.6.3 Projektions-Transformation für perspektivische Projektion 136 3.6.4 Bildschirm-Transformation 138 LE 6 4 Grundlagen - Grafikalgorithmen 147 4.1 Zuschneiden (Clipping) 148 4.1.1 Zuschneiden von Punkten 149 4.1.2 Zuschneiden von Linien 149 4.1.3 Zuschneiden von Polygonen 153 4.1.4 Zuschneiden von 3D-Objekten 155 4.2 Sichtbarkeit von Flächen 157 4.2.1 Entfernung von Rückseiten (Backface Culling) 157 4.2.2 Tiefenpuffer-Algorithmus (z-buffering) 159 4.3 Rasterkonvertierung 161 4.3.1 Rasterung von Linien 161 4.3.2 Rasterung von Kreisen 163 4.3.3 Rasterung von Ellipsen 165 4.3.4 Rasterung von Kurven 167 4.3.5 Füllen von Rechtecken 168 4.3.6 Füllen von Polygonen 170 4.3.7 Antialiasing 171 XII
LE 7 5 Grundlagen - Rendering (Teil 1) 175 5.1 Realistische 3D-Bilder 175 5.2 Farbmodelle 178 5.2.1 Schwarz-Weiß-Modell 179 5.2.2 Graustufen-Modell 179 5.2.3 RGB-Modell 180 5.2.4 CMYK-Modell 181 5.2.5 HSV-Modell 183 5.2.6 HLS-Modell 184 5.3 Fallbeispiel: 3D-Baukasten 186 5.4 Beleuchtungsmodelle 190 LE 8 5 Grundlagen - Rendering (Teil 2) 199 5.5 Schattierungsverfahren 199 5.5.1 Flat-Shading 200 5.5.2 Gouraud-Shading 201 5.5.3 Phong-Shading 203 5.6 Fallbeispiel: 3D-Szeneneditor 205 5.7 Textur 211 5.8 Schatten 213 LE 9 6 Grundlagen - Rendering (Teil 3) 217 LE 10 7 6.1 Strahlverfolgungsverfahren (Ray-Tracing) 217 6.2 Lichtenergiekalkül (Radiosity) 224 6.2.1 Berechnung der Strahlungswerte 226 6.2.2 Berechnung der Formfaktoren 227 6.2.3 Darstellung des Bildes 228 6.3 Fallbeispiel - Spiegelvitrine 231 Java 2D API (Teil 1) 235 7.1 Grundlagen 236 7.2 Koordinatensysteme 236 7.2.1 Benutzerkoordinatensystem 237 7.2.2 Gerätekoordinatensystem 237 7.3 Darstellung von Objekten 238 7.4 Grafikobjekte 241 7.4.1 Geometrische Objekte (Shapes) 242 7.4.2 Punkt 243 7.4.3 Linie 243 7.4.4 Rechteck 244 7.4.5 Abgerundetes Rechteck 245 7.4.6 Quadratische Kurven 246 7.4.7 Kubische Kurven 247 7.4.8 Ellipse 248 XIII
LE 11 7 Inhalt 7.4.9 Ellipsenausschnitt 248 7.5 Zusammenbau komplexer Objekte 250 7.5.1 Pfaditerator 250 7.5.2 Geometrischer Pfad 252 7.5.3 Zusammengesetzte Objekte 254 Java-2D-API (Teil 2) 259 7.6 Zeichensätze und Text-Layout 260 7.6.1 Zeichensätze 260 7.6.2 TextLayout 262 7.6.3 Text-Attribute 263 7.7 Grafikkontext 264 7.7.1 Pinselstrich (Stroke) 264 7.7.2 Füllung (Paint) 266 7.7.3 Transformationen 267 7.7.4 Bereichsausschnitt (Clipping) 269 7.7.5 Zeichenkontext (Rendering Hint) 270 7.7.6 Komposition (Composition) 271 7.8 Farben 272 7.8.1 Monochrome Farben 272 7.8.2 Farbverläufe 273 7.8.3 Texturen 275 7.9 Bildbearbeitung 276 7.9.1 Wertetabellen 276 7.9.2 Skalierungsfilter 277 7.9.3 Farbkonvertierungsfilter 278 7.9.4 Umgebungsfilter 279 7.9.5 Transformationsfilter 280 7.9.6 Bandfilter 281 7.10 Beispielanwendungen 282 LE 12 8 OpenGL-API 287 8.1 Grundlagen 288 8.2 Vordefinierte Grundkörper 292 8.3 Selbst definierte Körper 294 8.4 Erscheinung von Objekten 298 8.4.1 Erscheinung von Polygonen 298 8.4.2 Transparente Objekte 299 8.4.3 Texturen 300 8.5 Beleuchtung einer Szene 302 8.6 Transformationen 307 8.7 Animation und Interaktion 314 XIV
LE 13 9 LE 14 9 Java-3D-API (Teil 1) 321 Inhalt 9.1 Grundlagen 321 9.2 Primitive Körper 324 9.3 Selbst definierte Körper 325 9.3.1 Konstruktion von Objekten mit GeometryArray 326 9.3.2 Erstellen von Objekten mit GeometryInfo 332 9.3.3 Loader 333 9.3.4 Textobjekte 334 9.4 Erscheinung von Objekten 336 9.5 Transformationen 339 Java-3D-API (Teil 2) 343 9.6 Szenengestaltung 343 9.6.1 Hintergrund 349 9.6.2 Beleuchtung einer Szene 349 9.7 Verhalten von Objekten 352 9.7.1 Interaktionen 352 9.7.2 Animation 356 9.8 Audio 359 9.9 Fallbeispiel - Schachspiel 361 LE 15 10 VRML / X3D 365 10.1 Geschichte 366 10.2 Grundlagen 368 10.3 Die VRML-Syntax 369 10.3.1 Definierte Grundkörper 371 10.3.2 Selbst definierte Körper 372 10.3.3 Text 376 10.4 Oberflächeneigenschaften 377 10.5 Modellierung 382 10.6 Aufbau komplexer Szenen 383 10.6.1 Gruppierung von Elementen 383 10.6.2 Beleuchtung 384 10.6.3 Hintergrund 386 10.7 Dynamische Welten 388 10.7.1 Animation 389 10.7.2 Interaktion 391 10.8 Fallbeispiel: Spargelsortiermaschine 391 10.9 X3D 393 10.9.1 XML-Transformation 395 10.10 Fallbeispiel - Modell der FH-Dortmund 397 XV
LE 16 11 Anwendung - 3D-Werkzeuge 403 11.1 Einführung 403 11.2 3ds max 405 11.2.1 Funkwellenanimation 405 11.2.2 Werkstatt 407 11.2.3 Schiffshebewerk 408 11.2.4 VRML und 3ds max 409 11.3 Cinema 4D 410 11.3.1 Flaschenabfüllanlage 410 11.4 Maya 412 11.5 SolidEdge 413 11.5.1 Rasenmäher 413 11.5.2 Mähdrescher 416 LE 17 12 Anwendung - 3D im Internet 419 12.1 Einführung 419 12.2 DirectX 420 12.3 Scalable Vector Graphics (SVG) 425 12.4 FlashPix 433 12.5 Fallbeispiel - SVG 437 A Java 441 B Vektor- und Matrizenrechnung 451 C Typographie 457 Stichwortverzeichnis 461 XVI