2D-Rastergrafiken, die als "Farbtapete" auf 3D-Geometrie aufgetragen werden
dadurch höherer Detailgrad als durch reine Geometrie
pro Polygon oder pro Geometrie
Setzen von Texturkoordinate: glTexCoord2f(x, y)
wird beim nächsten Zeichnen eines Stützpunktes zugeordnet
xxxxxxxxxx
glBegin(GL_POLYGON);
glTexCoord2f(0.25f,0.50f); glVertex3f(-1.0f, 1.0f, 1.0f);
glTexCoord2f(0.25f,0.25f); glVertex3f(-1.0f,-1.0f, 1.0f);
glTexCoord2f(0.50f,0.25f); glVertex3f( 1.0f,-1.0f, 1.0f);
glTexCoord2f(0.50f,0.50f); glVertex3f( 1.0f, 1.0f, 1.0f);
glEnd();
Texturkoordinaten sind Teil der Vertex-Daten (Pipeline links)
Texturen selbst sind Pixeldaten (Pipeline rechts)
Texturpixel = "Texel"
Texturen werden i.d.R. vor Rendern erzeugt
Erzeugung:
xxxxxxxxxx
glBindTexture(GL_TEXTURE_2D, texID);
glTexImage2D(GL_TEXTURE_2D, texLevel, texFormat, inWidth, inHeight,
inBorder, inFormat, inType, inData);
während Rendering muss zuerst Textureinheit aktiviert werden: glEnable(GL_TEXTURE_2D)
Beim Rendern wird über texID auf Textur zugegriffen und diese an GL_TEXTURE_2D gebunden: glBindTexture(GL_TEXTURE_2D, texID);
GL_TEXTURE_WRAP bestimmt, wie Texture-Mapping sich verhält, wenn Texturkoordinaten außerhalb
zur Berechnung von Farbwerten, für Koordinaten, die nicht exakt auf dem Pixelraster der Textur liegen
Verwendung:
xxxxxxxxxx
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
Unterscheidung:
GL_TEXTURE_MAG_FILTER: Für Vergrößerungen: Auflösung der Textur ist geringer als die des Viewports, ein Texturpixel "überlagert also mehrere Viewportpixel"
z.B.: Viewport: 4k; Textur: 720p
GL_TEXTURE_MIN_FILTER: Für Verkleinerungen: Auflösung der Textur ist höher als die des Viewports, es "passen mehrere in einen Viewportpixel"
z.B.: Viewport: 720p, Textur: 4k
Parameterwerte
GL_NEAREST
GL_LINEAR
Auflösungspyramide, mit jeweils Viertelung der Auflösung auf nächsthöherer Ebene
Mit glTexEnv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
kann beeinflusst werden, wie Texturfarbe mit aktuellem Fragment (Farbwert und Alphakanal) kombiniert wird.
glActiveTexture(GL_TEXTURE0), glActiveTexture(GL_TEXTURE1), ...