Proseminar Computer Graphics Texture Mapping computer graphics & visualization Proseminar – Computer Graphics Andreas Budde Inhalt: 1. Entstehung des Texture Mappings 2 .Texturformate 3. Texture Mapping Verfahren Zweistufiges Texture-Mapping Rückwärts-Mapping Vorwärts-Mapping Affines Texture Mapping Projiziertes Texture Mapping 4. Problembehandlung Anti-Aliasing Mip-Mapping 5. Speziellere Mapping Verfahren 6. Texture Mapping in OpenGL 7. Fazit 8. Quellenangabe Proseminar – Computer Graphics Andreas Budde computer graphics & visualization 1.Enstehung des Texture Mapping • bei realistischen Darstellung von Objekten aus der realen Welt benötigt man sehr viele kleine Polygone • kostet viel Speicherplatz und Rechenzeit Suche nach anderen Methode Details darstellen zu können Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Idee 2-D Rasterbilder, welches die Details wiederspiegelt, wird auf ein 3D-Modelle aufgesetzt Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Weiteres Beispiel Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Vor- und Nachteile + + + + + Modelle mit einfacher Form wirken detailliert Polygonanzahl kann reduziert werden spart Modellier-, Speicher- und Rechenaufwand Eindruck von rauhen Oberfläche hinzufügbar Spiegelung der Umgebung an einem Objekt möglich - bei näherer Betrachtung wird das Objekt unscharf - Texturen müssen so gestaltet sein, dass die Übergänge fließend sind - Verzerrungen können auftreten Proseminar – Computer Graphics Andreas Budde computer graphics & visualization 2.Texturformate Texturen können ein-, zwei- oder dreidiminsional sein 1D-Textur wäre eine Rasterlinie mit Farbwerten 2D-Texturen sind am gebräuchlichsten Verwendung von Rasterbilder von realen Objekten, Mustern oder auch Oberflächenstrukturen 3D-Textur auch Volumentextur genannt, besteht beispielsweise aus räumliche Daten von Objekten, wie sie bei der Computertomographie entstehen Proseminar – Computer Graphics Andreas Budde computer graphics & visualization 1D-Textur Beispiel Farbwert aus der 1D-Textur wird durch die Höhe des einzelnen Punktes bestimmt Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Beispiel: 3D-Texture Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Beispiel: 3D-Texture Proseminar – Computer Graphics Andreas Budde computer graphics & visualization 3.Texture Mapping Verfahren Zweistufiges Texture-Mapping Rückwärts-Mapping Vorwärts-Mapping Affines Texture Mapping Projiziertes Texture Mapping Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Texture Mapping Allgemein: 2D texture space (u,v) -> 3D object space (x,y,z) -> 2D screen space (x,y) parametrization projective transformation Parametrisierung: Vertex bekommt Texturkoordinaten zugewiesen Zwischen den Vertex wird durch lineare Interpolation die entsprechende Texturkoordinate ermittelt Bei einfachen Objekten ist die Parametrisierung trivial, bei komplexeren Objekten wird das Zweistufige Texture Mapping angewendet Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Zweistufiges Texture-Mapping Anwendung Bei komplexeren Objekten verwendet man Zwischenobjekte Durchführung Zunächst wird die Texture auf ein Zwischenobjekt projiziert. Im Anschluss wird sie auf das Objekt projiziert (Mapping von einem 3D-Raum in einen 3D-Raum) Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Im Detail: 1.Schritt (S-Mapping) Mapping von einem zweidimensionalen Texturraum auf eine einfach dreidiminsionale Zwischenoberfläche Bsp.: Zylinder, Ebene, Würfel, Kugel 2.Schritt (O-Mapping) 3D-Texturmuster wird auf Objektoberfläche aufgetragen Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Im Detail: Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Texture Mapping Verfahren Rückwärts-Mapping (Reverse-Mapping) man findet für jedes Screen-Pixel sein zugehöriges “Urbild“ im Texturraum (Abbildung in den Texturraum) +gebräuchlichtes Verfahren +gut mit Z-Buffering kombinierbar Vorwärts-Mapping (Forward-Mapping) Abbildung vom Texturraum in den Bildraum Vorgang vergleichbar mit elastischen Folie die an die Objektoberfläche angeschmiegt wird -Löcher und Überlappungen möglich -in Hardware schwer realisierbar Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Affines Texture Mapping • dabei werden den Eckpunkten eines Dreiecks im Bildraum entsprechend Texturkoordinaten im (U,V)-Texturraum zugewiesen. • durch lineare Interpolation wird zu jedem Pixel im Bildraum das entsprechende Pixel im Texturraum bestimmt. - Lage des Dreiecks im Objektraum und Perspektive nicht korrekt beachtet Folge: Perspektivische Verzehrung entsteht + relativ einfache Berechnung Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Affines Texture Mapping Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Vergleich beider Verfahren Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Projiziertes Texture Mapping • Projektion relativ zum Projektorstandpunkt Objekte können sich relativ zur Textur bewegen (Bsp.: Simulation eines Lichtkegels) • Projektion relativ zu den Objektkoordinaten betrachten. Textur bewegt sich mit dem Körper mit , wie festgemacht am Körper Proseminar – Computer Graphics Andreas Budde computer graphics & visualization 4.Problembehandlung Anti-Aliasing Mip-Mapping Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Probleme beim Texture Mapping bei der Zuordnung eines Pixels im Bildraum zu einem Pixel im Texturraum kann es beispielsweise zu dem Problem kommen, dass viele Textur-Pixel auf einen Pixel abgebildet werden können somit können visuelle Artefakte (Aliasing) entstehen Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Probleme Magnification (Vergrößerung) Ein Textur-Pixel wird für mehrere Bild-Pixel verwendet Orginal: Lösung: Bilineare Interpolation Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Probleme Minification (Verkleinerung) mehrere Textur-Pixel werden auf einen Bild-Pixel abgebildet Orginal: Ausweg: Mip-Mapping (Bilineare Interpolation) Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Möglichkeiten gegen Aliasing Point-Sampling (Nearest Neighbor) den Wert des nächst liegenden Textur-Pixel nehmen + schnell - schlechte Qualität Bilineare Interpolation gewichteter linearer Durchschnitt aus 2x2-Feld des am nächsten liegenden Textur-Pixels - langsam + höhe Qualität Mip Mapping Trilineare Interpolation Interpolation zwischen MipMap Stufen Anisotropes Filtern Im Gegensatz zu isotropen Filtern wird ein nicht-quadratischer Filterbereich (Rechteck oder Parallelogramm) angenähert Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Beispiel • Kommt noch Point-Sampling Mip Mapping + Bilineare Interpolation Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Mip Mapping Anwendung des Filters auf die Textur in verschiedene Entfernungen bereits bei der Initialisierung Abspeichern der Ergebnisse Speicherung der drei Farbanteile (Rot, Grün, Blau) in der Textur wie folgend: Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Speicherung von Mip-Maps im 4. Viertel wird die Textur wieder in halber Auflösung abgespeichert, rekursiv fortgesetzt. je nach Distanz wird dann das entsprechende Teilbild als Textur verwendet. Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Beispieltextur um 50% verkleinert Ohne Mip-mapping 2x2-Mip-Mapping Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Vor- und Nachteile + schnelle Darstellung mit guter Qualität + man kann mit Hochqualitätsfiltern arbeiten, da die Berechnung nur einmal bei der Initialisierung passiert - 1/3 mehr Speicherplatz nötig - Übergang zwischen MIP-Stufen ist abrupt (MIP-Banding-> trilinearen Filtern) Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Beispiel Proseminar – Computer Graphics Andreas Budde computer graphics & visualization 5.Speziellere Mapping Verfahren • Bump Mapping • Displacement Mapping Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Bump Mapping Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Texture Mapping und Bump Mapping Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Displacement Mapping Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Beispiele Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Beispiele Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Weiteres Beispiel Proseminar – Computer Graphics Andreas Budde computer graphics & visualization 6.Texture Mapping in OpenGl void glGenTextures( GLsizei n, GLuint *textures ) erzeugt Textur-ID über die OpenGl die Texturen identifizieren kann - n Anzahl der Texturennamen an, die generiert - werden sollen textures Array in dem die Texturnamen gespeichert werden sollen Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Texture Mapping in OpenGl void glBindTexture(GLenum target, GLuint texture) bindet eine Texture an ein Texture-Target - target spezifiert das Target zu dem die Texture - gebindet werden soll (kann GL_TEXTURE_1D, GL_TEXTURE_2D oder GL_TEXTURE_3D sein) texture Texture die gebindet werden soll Proseminar – Computer Graphics Andreas Budde computer graphics & visualization void glTexParameterf(GLenum target, GLenum pname, GLfloat param) - - - Setzt die Parameter für die Textur (Texturfilter oder ob die Texture gekachelt werden soll) target spezifiert das Target zu dem die Texture gebindet werden soll pname Name eines Texture-Parameters (GL_TEXTURE_MIN_FILTER, GL_TEXTURE_MAG_FILTER, GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T, GL_TEXTURE_BORDER_COLOR oder GL_TEXTURE_PRIORITY) Params Wert des Parameters Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Beispiel für Magnification glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); GL_TEXTURE_2D Target GL_TEXTURE_MAG_FILTER Mehrere Pixel werden auf ein Texel abgebildet GL_LINEAR Bilineare Interpolation Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Beispiel für Minification glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR ); GL_TEXTURE_2D Target GL_TEXTURE_MIN_FILTER Mehrere Texel werden auf einen Pixel abgebildet GL_LINEAR_MIPMAP_LINEAR Wählt die beiden MipMaps die am Nächsten an der gewünschten Größe sind und berechnet jeweils bei beiden über GL_LINEAR einen Texturwert. Aus den beiden Texturwerten wird dann der Durchschnitt gebildet Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Texture Mapping in OpenGl void glTexImage2D( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels ) Lädt die Texture in den Video Speicher - target Target level gibt den Detailgradan, level=0 ist das Basisbild. level=n ist die n-te Mipmap Reduzierung der Texture internalformat Anzahl der Farbkomponenten GL_RGB width & height die Breite und Höhe der Texture (Muss 2er Potenz sein) border Borderweite (0 oder 1) format Format der Pixeldaten (GL_RGB ) type Datentyp der Pixeldaten (GL_UNSIGNED_BYTE. ) pixels Pointer zu den Bilddaten im Speicher Beispiel: glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB, imageWidth, imageHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, imageData); Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Zu beachten: Texturing einschalten mit glEnable (GL_TEXTURE_2D) glBindTexture bevor glBegin/glEnd verwendet werden Sicherstellen das man die Texture Koordinaten spezifiziert hat Bei Dreieck mit 3 Vertex: TexCoord; VertexCoord; TexCoord; VertexCoord; TexCoord; VertexCoord; Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Beispiel: Viereck glEnable (GL_TEXTURE_2D); /* enable texture mapping */ glBindTexture (GL_TEXTURE_2D, 13); /* bind to our texture, has id of 13 */ glBegin (GL_QUADS); glTexCoord2f (0.0f,0.0f); /* lower left corner of image */ glVertex3f (-10.0f, -10.0f, 0.0f); glTexCoord2f (1.0f, 0.0f); /* lower right corner of image */ glVertex3f (10.0f, -10.0f, 0.0f); glTexCoord2f (1.0f, 1.0f); /* upper right corner of image */ glVertex3f (10.0f, 10.0f, 0.0f); glTexCoord2f (0.0f, 1.0f); /* upper left corner of image */ glVertex3f (-10.0f, 10.0f, 0.0f); glEnd (); glDisable (GL_TEXTURE_2D); /* disable texture mapping */ Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Weitere Texture Befehle in OpenGL Um Texturfarbe mit Flächenfarbe zu mischen glTexEnv*() Ersetzen von Teilen von Texturen glTexSubImage2d() Texturengröße abändern gluScaleImage() gluBuild*DMipmaps() …Funktionen für Environment Mapping…. Proseminar – Computer Graphics Andreas Budde computer graphics & visualization 7.Fazit In der heutigen Computergrafik ist das Texture Mapping nicht wegzudenken Es stellt eine Vielzahl von Möglichkeiten bereit, Computer Szenen noch realistischer und in Echtzeit darzustellen zu können Proseminar – Computer Graphics Andreas Budde computer graphics & visualization 8.Quellenangabe • Alan Watt – 3D-Computer Graphics, 3.Auflage • Alan Warr – 3D Games • Hans-Joachim Bungartz, Michael Griebel, Christoph Zenger Einführung in die Computergraphik, 2 Auflage • Beat Brüderlin, Andreas Meier – Computergrafik und Geometrisches Modellieren • www.tomshardware.de • www.opengl.org • http://de.wikipedia.org Proseminar – Computer Graphics Andreas Budde computer graphics & visualization Danke für Ihre Aufmerksamkeit Proseminar – Computer Graphics Andreas Budde computer graphics & visualization