Texture Mapping. Texturen



Ähnliche Dokumente
Texture Mapping Beispiel. Universität Frankfurt

Bitmaps. - Definition eigener Zeichenmuster - Definition eigener Schriften. Zeichnen auf Pixel- und Bitmap-Ebene

Stapelverarbeitung Skalieren von Bildern

1 Einleitung. Lernziele. automatische Antworten bei Abwesenheit senden. Einstellungen für automatische Antworten Lerndauer. 4 Minuten.

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

1 Schritt für Schritt zu einem neuen Beitrag

teamsync Kurzanleitung

Erstellung von Reports mit Anwender-Dokumentation und System-Dokumentation in der ArtemiS SUITE (ab Version 5.0)

Aktivierung von Makros in den Erfassungshilfen

Vorgehensweise bei Lastschriftverfahren

Universal Gleismauer Set von SB4 mit Tauschtextur u. integrierten Gleismauerabschlüssen!

Gezielt über Folien hinweg springen

Teaser-Bilder erstellen mit GIMP. Bildbearbeitung mit GIMP 1

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Flyer, Sharepics usw. mit LibreOffice oder OpenOffice erstellen

SCHRITT 1: Öffnen des Bildes und Auswahl der Option»Drucken«im Menü»Datei«...2. SCHRITT 2: Angeben des Papierformat im Dialog»Drucklayout«...

BEDIENUNGSANLEITUNG: EINREICH-TOOL

Anleitung über den Umgang mit Schildern

Gimp Kurzanleitung. Offizielle Gimp Seite:

1. Aktionen-Palette durch "Fenster /Aktionen ALT+F9" öffnen. 2. Anlegen eines neuen Set über "Neues Set..." (über das kleine Dreieck zu erreichen)

Zwischenablage (Bilder, Texte,...)

Lehrer: Einschreibemethoden

Internet online Update (Mozilla Firefox)

STORES2. Operation Manual Version Warenretoure mit Zustimmung des Headquarter

Funktionsbeschreibung Website-Generator

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

Erstellen einer Collage. Zuerst ein leeres Dokument erzeugen, auf dem alle anderen Bilder zusammengefügt werden sollen (über [Datei] > [Neu])

Step by Step Webserver unter Windows Server von Christian Bartl

Abwesenheitsnotiz im Exchange Server 2010

Handbuch. NAFI Online-Spezial. Kunden- / Datenverwaltung. 1. Auflage. (Stand: )

Graphic Coding. Klausur. 9. Februar Kurs A

Einführung in die Java- Programmierung

WinWerk. Prozess 6a Rabatt gemäss Vorjahresverbrauch. KMU Ratgeber AG. Inhaltsverzeichnis. Im Ifang Effretikon

50,2 Hz Portal - Kurzanleitung für die Rolle Sachbearbeiter

Um das Versenden von Anhängen an s zu ermöglichen, wurde der Assistent für die Kommunikation leicht überarbeitet und wo nötig verbessert.

SEPA-Umstellungsanleitung Profi cash

Ein Bild in den Text einfügen

Die Statistiken von SiMedia

PDF-Dateien erstellen mit edocprinter PDF Pro

Drucken aus der Anwendung

Erstellen von x-y-diagrammen in OpenOffice.calc

Der neue persönliche Bereich/die CommSy-Leiste

Elexis-BlueEvidence-Connector

Dokumentation zur Versendung der Statistik Daten

SUB-ID- VERWALTUNG MIT GPP SETUP-GUIDE FÜR PUBLISHER

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Schuljahreswechsel im Schul-Webportal

Advanced Rendering Interior Szene

Kaiser edv-konzept, Inhaltsverzeichnis

Integrated Services Realtime Remote Network

Windows. Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1

Erweiterung AE WWS Lite Win: AES Security Verschlüsselung

Node Locked Lizenzierung für Solid Edge V19 bis ST3

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

FORUM HANDREICHUNG (STAND: AUGUST 2013)

Kapitel 3 Bilder farblich verändern - Arbeiten mit Objekten

S/W mit PhotoLine. Inhaltsverzeichnis. PhotoLine

Thermoguard. Thermoguard CIM Custom Integration Module Version 2.70

Einzel- s und unpersönliche Massen-Mails versenden

Password Depot für ios

Downloadfehler in DEHSt-VPSMail. Workaround zum Umgang mit einem Downloadfehler

White Paper. Fabasoft Folio Zugriffsdefinitionen Winter Release

Dokumentation IBIS Monitor

OASE Downloadportal Dokumentation

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Anbindung an easybill.de

1. EINLEITUNG 2. GLOBALE GRUPPEN Globale Gruppen anlegen

Vorgestellt vom mexikanischen Rat für Fremdenverkehr

Ihre Lizenz ändern. Stand 01/2015

Nutzerhandbuch Zentrale Klassenverwaltung

LEITFADEN ZUR SCHÄTZUNG DER BEITRAGSNACHWEISE

GPS Navigation für PPC

Nutzung der Onleihe Schritt für Schritt

Willkommen bei Dropbox!

Standard-Formatvorlagen in WORD und WRITER

Facebook I-Frame Tabs mit Papoo Plugin erstellen und verwalten

Abb. 1. Abb. 2. Schaltflächen Speichern und Bericht öffnen. Abb. 3.

2. Semester, 2. Prüfung, Lösung

ECDL Europäischer Computer Führerschein. Jan Götzelmann. 1. Ausgabe, Juni 2014 ISBN

Anleitung zum Wechsel von einer auslaufenden VR-NetWorld Card auf eine neue VR-NetWorld Card in Profi cash 8

Erstellen eines Wordpress-Blogs

Übungen Programmieren 1 Felix Rohrer. Übungen

Neuerungen der Ck-Schnittstelle in dms.net Rev. 4895

Erstellen eines Screenshot

Jederzeit Ordnung halten

Übernahme von Daten aus einem bestehenden Outlook-Profil bzw. einem anderen Exchange Server

Bedienungsanleitung Albumdesigner. Neues Projekt: Bestehendes Projekt öffnen:

Wie Sie mit Mastern arbeiten

Bildbearbeitung mit IrfanView

GEONET Anleitung für Web-Autoren

A. Ersetzung einer veralteten Govello-ID ( Absenderadresse )

Bedienung des Web-Portales der Sportbergbetriebe

Bedienungsanleitung Anlassteilnehmer (Vereinslisten)

Screening for Illustrator. Benutzerhandbuch

Vorstellung Version 1.00 vom 03. März 2009 Christian Schnettelker,

Automatisches Beantworten von - Nachrichten mit einem Exchange Server-Konto

Transkript:

Grundlagen - Eine Textur ist ein Bild, das auf eine Oberfläche einer Geometrie aufgebracht ist - erlauben eine realistischere Darstellung von Oberflächen - können auf alle Primitive, nicht nur Polygone angewandt werden - können ein-, zwei- oder dreidimensional sein - können direkt auf die Oberfläche gezeichnet werden und deren Farbe ersetzen oder sie modulieren - Anwendungsbeispiele: - Natürliche Darstellung von Oberflächen wie Holz, Stein, etc - Environment Mapping 1

Allgmeines Vorgehen bei der Texturierung - Erstellen eines Textur-Objekts - Spezifikation einer Textur für das Objekt - Festlegung, wie die Textur auf einzelnen Pixel angewandt werden soll - Aktivieren des Textur-Mappings - Zeichnen der Szene - Definition der Texturkoordinaten - Definition der geometrischen Koordinaten 2

Erstellen von Textur-Objekten void glgentextures(glsizei n, GLuint *texnames); - Allokiert Speicherplatz für n Textur-Objekte - Ein Textur-Objekt wird über einen unsigned integer Wert referenziert - Die zurückgegebenen Werte müssen nicht zusammenhängend sein - Der Speicherplatz für die wird erst initialisiert, wenn die Textur an den Speicherplatz gebunden wird. 3

Überprüfung von Textur-Objekten GLboolean glistexture(gluint texname); - Überprüft, ob an den unsigned integer Wert eine Textur gebunden ist - Rückgabewert: - GL_TRUE wenn an den Wert eine Textur gebunden ist, die nicht vorher gelöscht wurde - GL_FALSE wenn der Wert 0 ist oder keine Textur an ihn gebunden ist 4

Löschen von Textur-Objekten void gldeletetextures(glsizei n, const GLuint *texnames); - Gibt den Speicherplatz für die n Textur-Objekte, die in dem Array angegeben sind, wieder frei - Beim Versuch, nicht belegte Textur-Objekte zu löschen, wird die Operation nicht ausgeführt und der Löschversuch ignoriert. Es wird keine Fehlermeldung generiert. - Wird eine aktuell gebundene Textur (siehe glbindtexture() ) gelöscht, wird die Verwendung von Textur-Objekten beenden 5

Binden von Textur-Objekten / Verwalten mehrerer Textur-Objekte void glbindtexture(glenum target, GLuint texname); - Bindet und initialisiert ein Textur-Objekt - Ist das Textur-Objekt noch nicht generiert, wird es auch erstellt - Beim Binden an das Textur-Objekt 0 wird die Verwendung von Textur-Objekten beendet -target kann die Werte GL_TEXTURE_1D, GL_TEXTURE_2D, GL_TEXTURE_3D oder GL_TEXTURE_CUBE_MAP (ab Version 1.3) annehmen. - Durch diesen Mechanismus (verfügbar ab OpenGL Version 1.1) wird die jeweils aktive Textur festgelegt. 6

Spezifikation von Textur-Parametern void gltexparameteri(glenum target, GLenum pname, GLint param); void gltexparameterf(glenum target, GLenum pname, GLfloat param); void gltexparameteriv(glenum target, GLenum pname, GLint *param); void gltexparameterfv(glenum target, GLenum pname, GLfloat *param); - Spezifiziert den durch pname angegebenen Parameter -target kann die Werte GL_TEXTURE_1D, GL_TEXTURE_2D, GL_TEXTURE_3D oder GL_TEXTURE_CUBE_MAP annehmen 7

Texture Mapping Einige Textur-Parameter und ihre Werte Parameter Mögliche Werte GL_TEXTURE_WRAP_S, GL_CLAMP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE, GL_TEXTURE_WRAP_R GL_CLAMP_TO_BORDER, GL_REPEAT, GL_MIRRORED_REPEAT GL_TEXTURE_MAG_FILTER GL_TEXTURE_MIN_FILTER GL_TEXTURE_BORDER_COLOR GL_NEAREST, GL_LINEAR GL_NEAREST, GL_LINEAR (und andere) RGBA-Werte 8

Definition des Zeichenmodus bei der Texturierung - Nutzung der Methoden zur Spezifikation der Textur-Umgebung void gltexenvi(glenum target, GLenum pname, GLint param); void gltexenvf(glenum target, GLenum pname, GLfloat param); void gltexenviv(glenum target, GLenum pname, GLint *param); void gltexenvfv(glenum target, GLenum pname, GLfloat *param); 9

Definition des Zeichenmodus bei der Texturierung -Ein target Wert von GL_TEXTURE_ENV und der Parameter-Wert GL_TEXTURE_ENV_MODE spezifizieren den Zeichenmodus - GL_DECAL Blending von Oberflächen- und Texturfarbe gemäß dem Alpha-Wert der Textur-Farbe - GL_REPLACE Ersetzt die Oberflächenfarbe durch die Texturfarbe - GL_MODULATE Multipliziert die Oberflächenfarbe mit der Texturfarbe - GL_BLEND Blending jeder Komponente der Oberflächen- und Texturfarbe mit der entsprechenden Komponente der Texturfarbe - GL_ADD Addiert Oberflächen- und Texturfarbe - GL_COMBINE Kombiniert die Farben gemäß einem extra zu spezifizierenden Kombinations-Modus 10

Spezifikation eines Textur-Bildes für ein Textur-Objekt - sind ein-, zwei- oder dreidimensionale Bilder - Sie enthalten meist RGBA-Werte - Sie können auch Modulations-Konstanten oder Tiefenwerte enthalten - Spezifikation der Objekte mittels void glteximage1d(); void glteximage2d(); oder void glteximage3d(); 11

Definition eines zweidimensionalen Textur-Images void glteximage2d(glenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *texels); - Definiert das Texturobjekt mit den entsprechenden Parametern - Die eigentliche Textur ist in dem Array texels enthalten. 12

Parameter eines Textur-Images GLenum target - Beschreibt den Typ der Textur - Mögliche Werte (Auswahl): GL_TEXTURE_2D GL_TEXTURE_CUBE_MAP_POSITIVE_X GL_TEXTURE_CUBE_MAP_NEGATIVE_X GL_TEXTURE_CUBE_MAP_POSITIVE_Y GL_TEXTURE_CUBE_MAP_NEGATIVE_Y GL_TEXTURE_CUBE_MAP_POSITIVE_Z GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 13

Parameter eines Textur-Images GLint level - Wird benötigt bei der Darstellung der Textur in mehreren Levels of Detail (Mip-Mapping) - Spezifiziert den Level of Detail, dem die Textur zugeordnet werden soll - Wird nur eine Textur spezifiziert, so ist der level 0 14

Parameter eines Textur-Images GLint internalformat - Beschreibt, welche Komponenten des Bildes auf die Textur angewendet werden sollen - Mögliche Werte (Auswahl): GL_ALPHA GL_LUMINANCE GL_LUMINANCE_ALPHA GL_RGB GL_RGBA GL_R3_G3_B2 GL_COMPRESSED_LUMINANCE_ALPHA GL_COMPRESSED_RGBA 15

Parameter eines Textur-Images GLsizei width, GLsizei height, GLint border - Geben Breite und Höhe der Textur sowie das Vorhandensein eines möglichen Randes an -border kann die Werte 0 (kein Rand) oder 1 annehmen -width und height müssen von der form 2 m +2border sein - Der Wert von m kann für Breite und Höhe unterschiedlich sein - Die Maximalgröße einer Textur ist implementierungsabhängig, ist aber mindestens 64x64 Texels (bzw. 66*66 mit Rand). -GLenum format und GLenum type beschreiben Pixelformat und Datentyp wie bei gldrawpixels() - Formatbeispiele: GL_RGBA, GL_LUMINANCE_ALPHA - Datentypen: GL_BYTE, GL_UNSIGNED_BYTE, GL_SHORT 16

Setzen der Texturkoordinaten - Texturkoordinaten werden parallel zum Zeichnen der Geometrie gesetzt - Eine gesetzte Texturkoordinate ist gültig für alle anschließend gezeichneten Vertices - Das Setzen der Texturkoordinaten geschieht analog zum Setzen der Geometrie: void gltexcoord{1234}{sifd}(type coords); bzw. void gltexcoord{1234}{sifd}v(type *coords); 17

Setzen der Texturkoordinaten - Beispiel: glbegin(gl_quads); gltexcoord2f(0.0, 0.0); glvertex3f(-2.0, -1.0, 0.0); gltexcoord2f(0.0, 1.0); glvertex3f(-2.0, 1.0, 0.0); gltexcoord2f(1.0, 1.0); glvertex3f(0.0, 1.0, 0.0); gltexcoord2f(1.0, 0.0); glvertex3f(0.0, -1.0, 0.0); glend(); 18

Alignment bei Textur-Operationen void glpixelstorei(gl_pack_alignment, GLint value); void glpixelstorei(gl_unpack_alignment, GLint value); - Legt das Byte-Alignment der einzelnen Zeilen der Textur fest (analog zum Bitmap- und Pixel-Zeichnen) - Wenn die einzelnen Zeilen im Speicher nicht auf bestimmte Werte aufgefüllt werden, ist ein value von 1 sinnvoll 19

Aktivieren / Deaktivieren der Texturierung glenable(glenum textureformat); - Aktiviert die Texturierung in dem entsprechenden Format (z.b. GL_TEXTURE_2D) gldisable(glenum textureformat); - Deaktiviert entsprechend die Texturierung 20

Beispielprogramm - checker.cpp (Siehe Website) 21

Beispielprogramm - texbind.cpp (Siehe Website) 22

Skalieren eines Textur-Bildes int gluscaleimage(glenum format, GLint widthin, GLint heightin GLenum typein, const void *datain, GLint widthout, GLint heightout, GLenum typeout, void *dataout); - Erlaubt die Skalierung eines Bildes, um durch Interpolation der Texel die vorgeschriebene Größe zu erhalten -format, typein und typout beschreiben wiederum Pixelformat und Datentyp wie bei gldrawpixels() - Der zum Schreiben der Daten benötigte Speicher muss vorher reserviert werden - Rückgabewerte: 0 im Erfolgsfall, ansonsten ein GLU Fehlercode 23

Lesen einer Textur aus dem Framebuffer void glcopyteximage2d(glenum target, GLint level, GLint internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); - Liest den Framebuffer an der Stelle x, y (linke untere Ecke) aus und kopiert die Werte in den Texturspeicher - Alle anderen Parameter haben genau die gleiche Funktion wie bei glteximage2d() 24

Lesen einer Textur aus einer Bilddatei - Nutzung einer Funktion aus der glm-bibliothek GLubyte* glmreadppm(char* filename, int* width, int* height); - Liest eine Datei im PPM-Format (Portable Pixel Map) - Gibt die Werte als Array of unsigned bytes zurück - Gibt die Breite und Höhe des gelesenen Bildes in den Parametern zurück - Format einer PPM-Datei: P6 # comment width height max_value rgbrgbrgb... - Erzeugung einer PPM-Datei z.b. mittels IrfanView 25

Beispielprogramm - checker_image.cpp (Siehe Website) 26

Aufgabe - Was müssen Sie tun, um die Datei Segeln.ppm (in der gepackten Datei "checker_image.tar.gz" enthalten) als Textur auf eine Oberfläche mappen zu können? 27

Automatische Generierung von Textur-Koordinaten void gltexgen{ifd}(glenum coord, GLenum pname, TYPE param); void gltexgen{ifd}v(glenum coord, GLenum pname, TYPE *param); - Legt die Funktion fest, nach der die Textur-Koordinaten automatisch berechnet werden - Die zu berechnende Textur-Koordinate wird durch den Parameter coord festgelegt - GL_S, GL_T, GL_R, GL_Q 28

Parameternamen bei der Generierung von Textur-Koordinaten -pname kann die Werte GL_TEXTURE_GEN_MODE, GL_OBJECT_PLANE oder GL_EYE_PLANE annehmen -GL_TEXTURE_GEN_MODE legt die Funktion zur Erstellung der Textur-Koordinaten fest - Entsprechende Parameterwerte sind folgende Integer-Konstanten: - GL_OBJECT_LINEAR - GL_EYE_LINEAR - GL_SPHERE_MAP - GL_REFLECTION_MAP - GL_NORMAL_MAP 29

Parameternamen bei der Generierung von Textur-Koordinaten -pname kann die Werte GL_TEXTURE_GEN_MODE, GL_OBJECT_PLANE oder GL_EYE_PLANE annehmen - Bei Verwendung des Parameternamens GL_OBJECT_PLANE oder GL_EYE_PLANE legt der Parameter die Ebenengleichung der betreffenden Ebene fest - Beispiel: static GLfloat objplane[] = {1.0, 1.0, 1.0, 0.0}; gltexgeni(gl_s, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); gltexgenfv(gl_s, GL_OBJECT_PLANE, objplane); 30

Beispielprogramm - texgen.cpp (Siehe Website) 31

Beispielprogramm - NateRobinsTexture.cpp (Siehe Website) 32

Mip-Mapping - Textur-Objekte können in verschiedenen Levels of Detail gespeichert werden - Bei weit entfernten texturierten Objekten muß die Textur weniger detailliert sein als bei näheren - Zu diesem Zweck können zur Texturierung eine Reihe von unterschiedlicher Größe verwendet werden, welche die unterschiedlichen Levels of Detail darstellen - Dazu wird einer Textur mittels glteximage2d() für jeden Level of Detail ein eigenes Bild zugewiesen - Der höchste Mip-Map-Level beinhaltet die Textur mit der geringsten Auflösung 33

Mip-Mapping Beispielprogramm - mipmap.cpp (Siehe Website) 34

Mip-Mapping Generierung aller Mipmap-Levels aus einem Bild int glubuild{1 2}DMipmaps (GLenum target, GLint imageformat, GLint width, [GLint height], GLenum pixelformat, GLenum storagetype, const void *data); - Erzeugt aus einem Bild der Größe width, height die Textur- Bilder aller Mipmap-Levels - Skaliert das Bild auf die nächste Zweierpotenz - Generiert anschließend alle Mipmap-Levels bis zur Textur-Größe 1x1 35

Mip-Mapping Beispielprogramm - mipmap_image.cpp (Siehe Website) 36