Texturen

Aus DGL Wiki
Wechseln zu: Navigation, Suche

Texturen

Eine Textur ist eine Art Bild, welches im Speicher der Grafikkarte abgelegt wird, um dann beim Rendern auf einzelne Polygone oder ganze Objekte gezeichnet zu werden. Die einzelnen Bildpunkte einer Textur werden nicht wie bei sonstigen Bildern im Computer Pixel sondern Texel genannt. Durch unterschiedliche Projektion der Textur, wie z.B. Skalieren oder Rotieren, kann ein Texel im späteren Bild einem Pixel, dem Bruchteil eines Pixels oder einer ganzen Gruppe an Pixeln entsprechen.

Arten

Unter OpenGL gibt es (momentan) drei verschiedene Texturtypen :

1D-Textur

Eine 1D-Textur ist immer einen Pixel hoch, die Breite ist frei (je nach Hardware allerdings auf 2^n*1 beschränkt) wählbar. 1D-Texturen werden oft als Lookup-Tabellen verwendet, siehe z.B. Abschwächung von Lichtquellen (wo der Abschwächungsfaktor dann in der 1D-Textur liegt) oder die Abstufungen für nicht-photorealistische Effekte wie z.B. einen Comic-Look.

2D-Texturen

Die am meisten verwendete Texturenart. Sowohl Breite als auch Höhe sind frei wählbar (je nach Hardware allerdings auf 2^n*2^n beschränkt) und eine 2D-Textur kann man sich als ein "Bild" vorstellen dass auf eine Oberfläche aufgeklebt wird. Im 3D-Echtzeitbereich (im Profi-Bereich ist es oft anders, dort wird meist ganz auf Texturierung verzichtet) werden sogut wie alle Oberflächen über 2D-Texturen realisiert. Allerdings geht der Trend zumindest bei prozeduralen/dynamischen Materialien mehr in Richtung Shader.

3D-Texturen

Im Gegensatz zu 2D-Texturen gibt es hier noch eine Tiefe, die auch oft als "Slices" (Scheiben) bezeichnet werden. Hauptsächlich werden diese Texturen für volumetrische Effekte verwendet, und sind daher bei medizinischen Anwendungen weit verbreitet. Allerdings kann man mit diesem Texturentyp noch viele andere Sachen machen, z.B. Animationen, die dann in den Scheiben als Frames abgelegt werden, oder Lichtquellen, wo die Lichtstärke dann als dreidimensionale Funktion in der Textur abgelegt wird. Nachteilig ist allerdings der recht hohe Speicherverbrauch und die Tatsache dass v.a. ältere Grafikkarten 3D-Texturen nur per Software (also sehr langsam) oder gar nicht beherrschen.

Filter

Beim Rendern von Texturen, seien sie nun 1D (gerade linien), 2D (normale Bilder) oder 3D, werden verschiedene Filter angewendet, um gute Bildqualität unter verschiedenen Skalierungen und Betrachtungswinkeln zu garantieren. Häufig werden zusätzlich MipMaps eingesetzt: Im Grafikspeicher werden mehrere Fassungen einer Textur gehalten, die der Reihe nach etwa 1/4 der vorigen Fläche besitzen. Sie stellen somit verschiedene detalierte Stufen der Textur dar, die je nach angezeigter Größe auf dem Bildschirm von der Grafikkarte ausgewählt werden, um stets ein möglichst flimmerfreies und gutes Bild darzustellen; siehe dazu das Textur-Filter Tutorial.

Um mehr über die Auswirkung der OpenGL Texturfilter zu erfahren können Sie den Artikel glTexParameter lesen.


Neben den Filtern die OpenGL bereitstellt bieten viele Grafikprogramme noch andere Filter, wie z.B. Blur, Schärfen oder ähnliches an. Wie dies gemacht wird finden können Sie im Artikel Convolution-Filter lesen. Ebenfalls könnte der Artikel zu Farbräumen Excelent 30x30.jpg interessant sein, der im 2. Teil ebenfalls Bildeffekte beschreibt.

Kompressionen

Damit möglichst viele und möglichst hochaufgelöste Texturen in den schnellen Grafikkartenspeicher passen und nicht in den langsameren Hauptspeicher ausgelagert werden, können Texturen auch komprimiert werden. Dies hat mehrere Vorteile:

  • Es passen wesentlich mehr Texturen in den Grafikkartenspeicher
  • Es können höher aufgelöste Texturen verwendet werden
  • Die Rendergeschwindigkeit kann erhöht werden, da zum Rendern weniger Daten über den Bus der Grafikkarte geschoben werden müssen

OpenGL-Befehle

Befehle im Zusammenhang mit Texturen sind:

glBindTexture, glGenTextures, glIsTexture, glTexCoord, glTexGen, glTexParameter